X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdvb%2Fdb.h;h=098ee03ea3a9176af9ce394fe01b53b65cd973ac;hp=5a67870d1d92493ed48ecd39ff149448b7befffb;hb=e21cff679bb73bce310e877d5219ec29291dbe10;hpb=ddc3964ed95d01e72229dc9af968a327cd84e56c diff --git a/lib/dvb/db.h b/lib/dvb/db.h index 5a67870..098ee03 100644 --- a/lib/dvb/db.h +++ b/lib/dvb/db.h @@ -1,29 +1,22 @@ #ifndef __db_h #define __db_h +#ifndef SWIG #include +#include #include - -class eDVBService: public iObject -{ - DECLARE_REF; -public: - eDVBService(); - std::string m_service_name; - std::string m_provider_name; - - int m_flags; - std::set m_ca; - std::map m_cache; - virtual ~eDVBService(); -}; - -class ServiceDescriptionTable; +class ServiceDescriptionSection; +#endif class eDVBDB: public iDVBChannelList { -DECLARE_REF; -private: + DECLARE_REF(eDVBDB); + static eDVBDB *instance; + friend class eDVBDBQuery; + friend class eDVBDBBouquetQuery; + friend class eDVBDBSatellitesQuery; + friend class eDVBDBProvidersQuery; + struct channel { ePtr m_frontendParameters; @@ -32,17 +25,106 @@ private: std::map m_channels; std::map > m_services; -public: - eDVBDB(); - virtual ~eDVBDB(); + std::map m_bouquets; +#ifdef SWIG + eDVBDB(); + ~eDVBDB(); +#endif +public: +// iDVBChannelList + RESULT removeFlags(unsigned int flagmask, int dvb_namespace=-1, int tsid=-1, int onid=-1, unsigned int orb_pos=0xFFFFFFFF); + RESULT removeServices(int dvb_namespace=-1, int tsid=-1, int onid=-1, unsigned int orb_pos=0xFFFFFFFF); + RESULT removeService(const eServiceReference &service); + RESULT addFlag(const eServiceReference &service, unsigned int flagmask); + RESULT removeFlag(const eServiceReference &service, unsigned int flagmask); + PyObject *readSatellites(SWIG_PYOBJECT(ePyObject) sat_list, SWIG_PYOBJECT(ePyObject) sat_dict, SWIG_PYOBJECT(ePyObject) tp_dict); + PyObject *readTerrestrials(SWIG_PYOBJECT(ePyObject) ter_list, SWIG_PYOBJECT(ePyObject) tp_dict); + PyObject *readCables(SWIG_PYOBJECT(ePyObject) cab_list, SWIG_PYOBJECT(ePyObject) tp_dict); +#ifndef SWIG + RESULT removeFlags(unsigned int flagmask, eDVBChannelID chid, unsigned int orb_pos); + RESULT removeServices(eDVBChannelID chid, unsigned int orb_pos); + RESULT removeServices(iDVBFrontendParameters *feparm); + RESULT addChannelToList(const eDVBChannelID &id, iDVBFrontendParameters *feparm); RESULT removeChannel(const eDVBChannelID &id); RESULT getChannelFrontendData(const eDVBChannelID &id, ePtr &parm); - RESULT addService(const eServiceReferenceDVB &service, eDVBService *service); + RESULT addService(const eServiceReferenceDVB &referenc, eDVBService *service); RESULT getService(const eServiceReferenceDVB &reference, ePtr &service); + RESULT flush(); + + RESULT startQuery(ePtr &query, eDVBChannelQuery *q, const eServiceReference &source); + + RESULT getBouquet(const eServiceReference &ref, eBouquet* &bouquet); +////// + void loadBouquet(const char *path); + eServiceReference searchReference(int tsid, int onid, int sid); + eDVBDB(); + virtual ~eDVBDB(); +#endif + void loadServicelist(const char *filename); + static eDVBDB *getInstance() { return instance; } + void reloadServicelist(); + void saveServicelist(); + void saveServicelist(const char *file); + void reloadBouquets(); + void parseServiceData(ePtr s, std::string str); +}; + +#ifndef SWIG + // we have to add a possibility to invalidate here. +class eDVBDBQueryBase: public iDVBChannelListQuery +{ + DECLARE_REF(eDVBDBQueryBase); +protected: + ePtr m_db; + ePtr m_query; + eServiceReference m_source; +public: + eDVBDBQueryBase(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query); + virtual int compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b); +}; + +class eDVBDBQuery: public eDVBDBQueryBase +{ + std::map >::iterator m_cursor; +public: + eDVBDBQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query); + RESULT getNextResult(eServiceReferenceDVB &ref); +}; + +class eDVBDBBouquetQuery: public eDVBDBQueryBase +{ + std::list::iterator m_cursor; +public: + eDVBDBBouquetQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query); + RESULT getNextResult(eServiceReferenceDVB &ref); +}; + +class eDVBDBListQuery: public eDVBDBQueryBase +{ +protected: + std::list m_list; + std::list::iterator m_cursor; +public: + eDVBDBListQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query); + RESULT getNextResult(eServiceReferenceDVB &ref); + int compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b); +}; + +class eDVBDBSatellitesQuery: public eDVBDBListQuery +{ +public: + eDVBDBSatellitesQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query); +}; + +class eDVBDBProvidersQuery: public eDVBDBListQuery +{ +public: + eDVBDBProvidersQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query); }; +#endif // SWIG #endif