X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/3af66122574386a2856e83ba9c5d73d27a6f3710..47c79edd46ef8d5cf7da20dd4e376d70c55b6243:/lib/dvb/db.h diff --git a/lib/dvb/db.h b/lib/dvb/db.h index 7e31a22d..265c5970 100644 --- a/lib/dvb/db.h +++ b/lib/dvb/db.h @@ -1,21 +1,17 @@ #ifndef __db_h #define __db_h +#include #include #include -class ServiceDescriptionTable; - -struct eDVBBouquet -{ - std::vector m_services; - int lookupService(eServiceReferenceDVB &ref); -}; +class ServiceDescriptionSection; class eDVBDB: public iDVBChannelList { DECLARE_REF(eDVBDB); friend class eDVBDBQuery; + friend class eDVBDBBouquetQuery; private: struct channel { @@ -26,8 +22,16 @@ private: std::map > m_services; - std::map m_bouquets; + std::map m_bouquets; public: + void load(); + void save(); + + void loadBouquet(const char *path); + void saveBouquet(const char *path); + void loadBouquets(); + void saveBouquets(); + eDVBDB(); virtual ~eDVBDB(); @@ -38,22 +42,40 @@ public: RESULT addService(const eServiceReferenceDVB &service, eDVBService *service); RESULT getService(const eServiceReferenceDVB &reference, ePtr &service); - - RESULT startQuery(ePtr &query, eDVBChannelQuery *query); + + RESULT startQuery(ePtr &query, eDVBChannelQuery *query, const eServiceReference &source); + + RESULT getBouquet(const eServiceReference &ref, const eBouquet* &bouquet); }; // we have to add a possibility to invalidate here. -class eDVBDBQuery: public iDVBChannelListQuery +class eDVBDBQueryBase: public iDVBChannelListQuery { -DECLARE_REF(eDVBDBQuery); -private: +DECLARE_REF(eDVBDBQueryBase); +protected: std::map >::iterator m_cursor; ePtr m_db; ePtr m_query; - eServiceReferenceDVB m_source; + eServiceReference m_source; +public: + eDVBDBQueryBase(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query); + 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: - eDVBDBQuery(eDVBDB *db, const eServiceReferenceDVB &source, eDVBChannelQuery *query); - virtual RESULT getNextResult(eServiceReferenceDVB &ref); + eDVBDBBouquetQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query); + RESULT getNextResult(eServiceReferenceDVB &ref); }; #endif