X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/3af66122574386a2856e83ba9c5d73d27a6f3710..ca7d92c97764d916bb8dd6731efa1ccff693b944:/lib/dvb/db.h diff --git a/lib/dvb/db.h b/lib/dvb/db.h index 7e31a22d..430a5af0 100644 --- a/lib/dvb/db.h +++ b/lib/dvb/db.h @@ -1,22 +1,22 @@ #ifndef __db_h #define __db_h +#ifndef SWIG +#include #include #include - -class ServiceDescriptionTable; - -struct eDVBBouquet -{ - std::vector m_services; - int lookupService(eServiceReferenceDVB &ref); -}; +class ServiceDescriptionSection; +#endif class eDVBDB: public iDVBChannelList { + static eDVBDB *instance; DECLARE_REF(eDVBDB); friend class eDVBDBQuery; -private: + friend class eDVBDBBouquetQuery; + friend class eDVBDBSatellitesQuery; + friend class eDVBDBProvidersQuery; + struct channel { ePtr m_frontendParameters; @@ -26,11 +26,22 @@ private: std::map > m_services; - std::map m_bouquets; -public: + std::map m_bouquets; +#ifdef SWIG eDVBDB(); - virtual ~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); +#ifndef SWIG + RESULT removeFlags(unsigned int flagmask, eDVBChannelID chid, unsigned int orb_pos); + RESULT removeServices(eDVBChannelID chid, unsigned int orb_pos); + RESULT addChannelToList(const eDVBChannelID &id, iDVBFrontendParameters *feparm); RESULT removeChannel(const eDVBChannelID &id); @@ -38,22 +49,75 @@ public: RESULT addService(const eServiceReferenceDVB &service, eDVBService *service); RESULT getService(const eServiceReferenceDVB &reference, ePtr &service); - - RESULT startQuery(ePtr &query, eDVBChannelQuery *query); + RESULT flush(); + + RESULT startQuery(ePtr &query, eDVBChannelQuery *query, const eServiceReference &source); + + RESULT getBouquet(const eServiceReference &ref, eBouquet* &bouquet); +////// + void saveServicelist(); + void loadBouquet(const char *path); + eServiceReference searchReference(int tsid, int onid, int sid); + eDVBDB(); + virtual ~eDVBDB(); +#endif + static eDVBDB *getInstance() { return instance; } + void reloadServicelist(); + void reloadBouquets(); }; +#ifndef SWIG // we have to add a possibility to invalidate here. -class eDVBDBQuery: public iDVBChannelListQuery +class eDVBDBQueryBase: public iDVBChannelListQuery { -DECLARE_REF(eDVBDBQuery); -private: - std::map >::iterator m_cursor; +DECLARE_REF(eDVBDBQueryBase); +protected: ePtr m_db; ePtr m_query; - eServiceReferenceDVB m_source; + 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: - eDVBDBQuery(eDVBDB *db, const eServiceReferenceDVB &source, eDVBChannelQuery *query); - virtual RESULT getNextResult(eServiceReferenceDVB &ref); + eDVBDBProvidersQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query); }; +#endif // SWIG #endif