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);
53 eServiceReference searchReference(int tsid, int onid, int sid);
57 static eDVBDB *getInstance() { return instance; }
58 void reloadServicelist();
59 void reloadBouquets();
63 // we have to add a possibility to invalidate here.
64 class eDVBDBQueryBase: public iDVBChannelListQuery
66 DECLARE_REF(eDVBDBQueryBase);
69 ePtr<eDVBChannelQuery> m_query;
70 eServiceReference m_source;
72 eDVBDBQueryBase(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
73 virtual int compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b);
76 class eDVBDBQuery: public eDVBDBQueryBase
78 std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator m_cursor;
80 eDVBDBQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
81 RESULT getNextResult(eServiceReferenceDVB &ref);
84 class eDVBDBBouquetQuery: public eDVBDBQueryBase
86 std::list<eServiceReference>::iterator m_cursor;
88 eDVBDBBouquetQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
89 RESULT getNextResult(eServiceReferenceDVB &ref);
92 class eDVBDBListQuery: public eDVBDBQueryBase
95 std::list<eServiceReferenceDVB> m_list;
96 std::list<eServiceReferenceDVB>::iterator m_cursor;
98 eDVBDBListQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
99 RESULT getNextResult(eServiceReferenceDVB &ref);
100 int compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b);
103 class eDVBDBSatellitesQuery: public eDVBDBListQuery
106 eDVBDBSatellitesQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
109 class eDVBDBProvidersQuery: public eDVBDBListQuery
112 eDVBDBProvidersQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);