X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d63d2c3c6cbbd574dda4f8b00ebe6c661735edd5..4aa7b11f525aaa22b3ad6b0d247ea67f39b498de:/lib/dvb/db.h diff --git a/lib/dvb/db.h b/lib/dvb/db.h index 763df7eb..8bb0e5ae 100644 --- a/lib/dvb/db.h +++ b/lib/dvb/db.h @@ -1,28 +1,19 @@ #ifndef __db_h #define __db_h +#include #include #include -class eDVBService: public iObject -{ - DECLARE_REF; -public: - eDVBService(); - eString m_service_name; - eString m_provider_name; - - int m_flags; - std::set m_ca; - std::map m_cache; - virtual ~eDVBService(); -}; - -class ServiceDescriptionTable; +class ServiceDescriptionSection; -class eDVBDB: public virtual iDVBChannelList +class eDVBDB: public iDVBChannelList { -DECLARE_REF; +DECLARE_REF(eDVBDB); + friend class eDVBDBQuery; + friend class eDVBDBBouquetQuery; + friend class eDVBDBSatellitesQuery; + friend class eDVBDBProvidersQuery; private: struct channel { @@ -32,7 +23,15 @@ private: std::map m_channels; std::map > m_services; + + std::map m_bouquets; public: + void load(); + void save(); + + void loadBouquet(const char *path); + void loadBouquets(); + eDVBDB(); virtual ~eDVBDB(); @@ -43,6 +42,63 @@ public: RESULT addService(const eServiceReferenceDVB &service, eDVBService *service); RESULT getService(const eServiceReferenceDVB &reference, ePtr &service); + RESULT flush(); + + RESULT startQuery(ePtr &query, eDVBChannelQuery *query, const eServiceReference &source); + + RESULT getBouquet(const eServiceReference &ref, eBouquet* &bouquet); +}; + + // 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