4 #include <lib/base/eptrlist.h>
5 #include <lib/dvb/idvb.h>
8 class ServiceDescriptionSection;
10 class eDVBDB: public iDVBChannelList
13 friend class eDVBDBQuery;
14 friend class eDVBDBBouquetQuery;
18 ePtr<iDVBFrontendParameters> m_frontendParameters;
21 std::map<eDVBChannelID, channel> m_channels;
23 std::map<eServiceReferenceDVB, ePtr<eDVBService> > m_services;
25 std::map<std::string, eBouquet> m_bouquets;
30 void loadBouquet(const char *path);
31 void saveBouquet(const char *path);
38 RESULT addChannelToList(const eDVBChannelID &id, iDVBFrontendParameters *feparm);
39 RESULT removeChannel(const eDVBChannelID &id);
41 RESULT getChannelFrontendData(const eDVBChannelID &id, ePtr<iDVBFrontendParameters> &parm);
43 RESULT addService(const eServiceReferenceDVB &service, eDVBService *service);
44 RESULT getService(const eServiceReferenceDVB &reference, ePtr<eDVBService> &service);
46 RESULT startQuery(ePtr<iDVBChannelListQuery> &query, eDVBChannelQuery *query, const eServiceReference &source);
48 RESULT getBouquet(const eServiceReference &ref, eBouquet* &bouquet);
51 // we have to add a possibility to invalidate here.
52 class eDVBDBQueryBase: public iDVBChannelListQuery
54 DECLARE_REF(eDVBDBQueryBase);
56 std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator m_cursor;
58 ePtr<eDVBChannelQuery> m_query;
59 eServiceReference m_source;
61 eDVBDBQueryBase(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
62 int compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b);
65 class eDVBDBQuery: public eDVBDBQueryBase
67 std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator m_cursor;
69 eDVBDBQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
70 RESULT getNextResult(eServiceReferenceDVB &ref);
73 class eDVBDBBouquetQuery: public eDVBDBQueryBase
75 std::list<eServiceReference>::iterator m_cursor;
77 eDVBDBBouquetQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
78 RESULT getNextResult(eServiceReferenceDVB &ref);