X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/942f9e8554c495e6782d93524c8e820ec548a8a9..67dbb2973f32ccf52c0e5f3e2b5848320a215062:/lib/dvb/db.h diff --git a/lib/dvb/db.h b/lib/dvb/db.h index c5e3ff5c..55e008fb 100644 --- a/lib/dvb/db.h +++ b/lib/dvb/db.h @@ -1,18 +1,22 @@ #ifndef __db_h #define __db_h -#include +#ifndef SWIG #include +#include #include - class ServiceDescriptionSection; +#endif class eDVBDB: public iDVBChannelList { -DECLARE_REF(eDVBDB); + DECLARE_REF(eDVBDB); + static eDVBDB *instance; friend class eDVBDBQuery; friend class eDVBDBBouquetQuery; -private: + friend class eDVBDBSatellitesQuery; + friend class eDVBDBProvidersQuery; + struct channel { ePtr m_frontendParameters; @@ -23,16 +27,25 @@ private: std::map > m_services; std::map m_bouquets; +#ifdef SWIG + eDVBDB(); + ~eDVBDB(); +#endif public: - void load(); - void save(); - - void loadBouquet(const char *path); - void loadBouquets(); +// 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); - eDVBDB(); - virtual ~eDVBDB(); - RESULT addChannelToList(const eDVBChannelID &id, iDVBFrontendParameters *feparm); RESULT removeChannel(const eDVBChannelID &id); @@ -45,20 +58,32 @@ public: RESULT startQuery(ePtr &query, eDVBChannelQuery *query, 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(); }; +#ifndef SWIG // we have to add a possibility to invalidate here. class eDVBDBQueryBase: public iDVBChannelListQuery { -DECLARE_REF(eDVBDBQueryBase); + DECLARE_REF(eDVBDBQueryBase); protected: - std::map >::iterator m_cursor; ePtr m_db; ePtr m_query; eServiceReference m_source; public: eDVBDBQueryBase(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query); - int compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b); + virtual int compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b); }; class eDVBDBQuery: public eDVBDBQueryBase @@ -77,4 +102,28 @@ public: 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