49624f35d62682bca10dd304329cc61d80348e1b
[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         RESULT removeService(eServiceReferenceDVB service);
37         RESULT removeServices(eDVBChannelID chid, unsigned int orb_pos);
38         RESULT addFlag(eServiceReferenceDVB service, unsigned int flagmask);
39         RESULT removeFlag(eServiceReferenceDVB service, unsigned int flagmask);
40         RESULT removeFlags(unsigned int flagmask, eDVBChannelID chid, unsigned int orb_pos);
41 #ifndef SWIG
42 // iDVBChannelList
43         RESULT addChannelToList(const eDVBChannelID &id, iDVBFrontendParameters *feparm);
44         RESULT removeChannel(const eDVBChannelID &id);
45
46         RESULT getChannelFrontendData(const eDVBChannelID &id, ePtr<iDVBFrontendParameters> &parm);
47         
48         RESULT addService(const eServiceReferenceDVB &service, eDVBService *service);
49         RESULT getService(const eServiceReferenceDVB &reference, ePtr<eDVBService> &service);
50         RESULT flush();
51
52         RESULT startQuery(ePtr<iDVBChannelListQuery> &query, eDVBChannelQuery *query, const eServiceReference &source);
53
54         RESULT getBouquet(const eServiceReference &ref, eBouquet* &bouquet);
55 //////
56         void saveServicelist();
57         void loadBouquet(const char *path);
58         eServiceReference searchReference(int tsid, int onid, int sid);
59         eDVBDB();
60         virtual ~eDVBDB();
61 #endif
62         static eDVBDB *getInstance() { return instance; }
63         void reloadServicelist();
64         void reloadBouquets();
65 };
66
67 #ifndef SWIG
68         // we have to add a possibility to invalidate here.
69 class eDVBDBQueryBase: public iDVBChannelListQuery
70 {
71 DECLARE_REF(eDVBDBQueryBase);
72 protected:
73         ePtr<eDVBDB> m_db;
74         ePtr<eDVBChannelQuery> m_query;
75         eServiceReference m_source;
76 public:
77         eDVBDBQueryBase(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
78         virtual int compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b);
79 };
80
81 class eDVBDBQuery: public eDVBDBQueryBase
82 {
83         std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator m_cursor;
84 public:
85         eDVBDBQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
86         RESULT getNextResult(eServiceReferenceDVB &ref);
87 };
88
89 class eDVBDBBouquetQuery: public eDVBDBQueryBase
90 {
91         std::list<eServiceReference>::iterator m_cursor;
92 public:
93         eDVBDBBouquetQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
94         RESULT getNextResult(eServiceReferenceDVB &ref);
95 };
96
97 class eDVBDBListQuery: public eDVBDBQueryBase
98 {
99 protected:
100         std::list<eServiceReferenceDVB> m_list;
101         std::list<eServiceReferenceDVB>::iterator m_cursor;
102 public:
103         eDVBDBListQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
104         RESULT getNextResult(eServiceReferenceDVB &ref);
105         int compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b);
106 };
107
108 class eDVBDBSatellitesQuery: public eDVBDBListQuery
109 {
110 public:
111         eDVBDBSatellitesQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
112 };
113
114 class eDVBDBProvidersQuery: public eDVBDBListQuery
115 {
116 public:
117         eDVBDBProvidersQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
118 };
119 #endif // SWIG
120
121 #endif