loading and saving the cable transponders to lamedb works now
[enigma2.git] / lib / dvb / db.h
1 #ifndef __db_h
2 #define __db_h
3
4 #ifndef SWIG
5 #include <lib/base/eptrlist.h>
6 #include <lib/dvb/idvb.h>
7 #include <set>
8 class ServiceDescriptionSection;
9 #endif
10
11 class eDVBDB: public iDVBChannelList
12 {
13         static eDVBDB *instance;
14 DECLARE_REF(eDVBDB);
15         friend class eDVBDBQuery;
16         friend class eDVBDBBouquetQuery;
17         friend class eDVBDBSatellitesQuery;
18         friend class eDVBDBProvidersQuery;
19
20
21         struct channel
22         {
23                 ePtr<iDVBFrontendParameters> m_frontendParameters;
24         };
25         
26         std::map<eDVBChannelID, channel> m_channels;
27         
28         std::map<eServiceReferenceDVB, ePtr<eDVBService> > m_services;
29         
30         std::map<std::string, eBouquet> m_bouquets;
31 #ifdef SWIG
32         eDVBDB();
33         ~eDVBDB();
34 #endif
35 public:
36 #ifndef SWIG
37 // iDVBChannelList
38         RESULT addChannelToList(const eDVBChannelID &id, iDVBFrontendParameters *feparm);
39         RESULT removeChannel(const eDVBChannelID &id);
40
41         RESULT getChannelFrontendData(const eDVBChannelID &id, ePtr<iDVBFrontendParameters> &parm);
42         
43         RESULT addService(const eServiceReferenceDVB &service, eDVBService *service);
44         RESULT getService(const eServiceReferenceDVB &reference, ePtr<eDVBService> &service);
45         RESULT flush();
46
47         RESULT startQuery(ePtr<iDVBChannelListQuery> &query, eDVBChannelQuery *query, const eServiceReference &source);
48
49         RESULT getBouquet(const eServiceReference &ref, eBouquet* &bouquet);
50 //////
51         void saveServicelist();
52         void loadBouquet(const char *path);
53         eDVBDB();
54         virtual ~eDVBDB();
55 #endif
56         static eDVBDB *getInstance() { return instance; }
57         void reloadServicelist();
58         void reloadBouquets();
59 };
60
61 #ifndef SWIG
62         // we have to add a possibility to invalidate here.
63 class eDVBDBQueryBase: public iDVBChannelListQuery
64 {
65 DECLARE_REF(eDVBDBQueryBase);
66 protected:
67         ePtr<eDVBDB> m_db;
68         ePtr<eDVBChannelQuery> m_query;
69         eServiceReference m_source;
70 public:
71         eDVBDBQueryBase(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
72         virtual int compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b);
73 };
74
75 class eDVBDBQuery: public eDVBDBQueryBase
76 {
77         std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator m_cursor;
78 public:
79         eDVBDBQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
80         RESULT getNextResult(eServiceReferenceDVB &ref);
81 };
82
83 class eDVBDBBouquetQuery: public eDVBDBQueryBase
84 {
85         std::list<eServiceReference>::iterator m_cursor;
86 public:
87         eDVBDBBouquetQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
88         RESULT getNextResult(eServiceReferenceDVB &ref);
89 };
90
91 class eDVBDBListQuery: public eDVBDBQueryBase
92 {
93 protected:
94         std::list<eServiceReferenceDVB> m_list;
95         std::list<eServiceReferenceDVB>::iterator m_cursor;
96 public:
97         eDVBDBListQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
98         RESULT getNextResult(eServiceReferenceDVB &ref);
99         int compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b);
100 };
101
102 class eDVBDBSatellitesQuery: public eDVBDBListQuery
103 {
104 public:
105         eDVBDBSatellitesQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
106 };
107
108 class eDVBDBProvidersQuery: public eDVBDBListQuery
109 {
110 public:
111         eDVBDBProvidersQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
112 };
113 #endif // SWIG
114
115 #endif