5 #include <lib/base/eptrlist.h>
6 #include <lib/dvb/idvb.h>
8 class ServiceDescriptionSection;
11 class eDVBDB: public iDVBChannelList
13 static eDVBDB *instance;
15 friend class eDVBDBQuery;
16 friend class eDVBDBBouquetQuery;
17 friend class eDVBDBSatellitesQuery;
18 friend class eDVBDBProvidersQuery;
23 ePtr<iDVBFrontendParameters> m_frontendParameters;
26 std::map<eDVBChannelID, channel> m_channels;
28 std::map<eServiceReferenceDVB, ePtr<eDVBService> > m_services;
30 std::map<std::string, eBouquet> m_bouquets;
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);
47 RESULT startQuery(ePtr<iDVBChannelListQuery> &query, eDVBChannelQuery *query, const eServiceReference &source);
49 RESULT getBouquet(const eServiceReference &ref, eBouquet* &bouquet);
51 void saveServicelist();
52 void loadBouquet(const char *path);
56 static eDVBDB *getInstance() { return instance; }
57 void reloadServicelist();
58 void reloadBouquets();
62 // we have to add a possibility to invalidate here.
63 class eDVBDBQueryBase: public iDVBChannelListQuery
65 DECLARE_REF(eDVBDBQueryBase);
68 ePtr<eDVBChannelQuery> m_query;
69 eServiceReference m_source;
71 eDVBDBQueryBase(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
72 virtual int compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b);
75 class eDVBDBQuery: public eDVBDBQueryBase
77 std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator m_cursor;
79 eDVBDBQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
80 RESULT getNextResult(eServiceReferenceDVB &ref);
83 class eDVBDBBouquetQuery: public eDVBDBQueryBase
85 std::list<eServiceReference>::iterator m_cursor;
87 eDVBDBBouquetQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
88 RESULT getNextResult(eServiceReferenceDVB &ref);
91 class eDVBDBListQuery: public eDVBDBQueryBase
94 std::list<eServiceReferenceDVB> m_list;
95 std::list<eServiceReferenceDVB>::iterator m_cursor;
97 eDVBDBListQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
98 RESULT getNextResult(eServiceReferenceDVB &ref);
99 int compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b);
102 class eDVBDBSatellitesQuery: public eDVBDBListQuery
105 eDVBDBSatellitesQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
108 class eDVBDBProvidersQuery: public eDVBDBListQuery
111 eDVBDBProvidersQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);