add week days to epg list
[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         eServiceReference searchReference(int tsid, int onid, int sid);
54         eDVBDB();
55         virtual ~eDVBDB();
56 #endif
57         static eDVBDB *getInstance() { return instance; }
58         void reloadServicelist();
59         void reloadBouquets();
60 };
61
62 #ifndef SWIG
63         // we have to add a possibility to invalidate here.
64 class eDVBDBQueryBase: public iDVBChannelListQuery
65 {
66 DECLARE_REF(eDVBDBQueryBase);
67 protected:
68         ePtr<eDVBDB> m_db;
69         ePtr<eDVBChannelQuery> m_query;
70         eServiceReference m_source;
71 public:
72         eDVBDBQueryBase(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
73         virtual int compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b);
74 };
75
76 class eDVBDBQuery: public eDVBDBQueryBase
77 {
78         std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator m_cursor;
79 public:
80         eDVBDBQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
81         RESULT getNextResult(eServiceReferenceDVB &ref);
82 };
83
84 class eDVBDBBouquetQuery: public eDVBDBQueryBase
85 {
86         std::list<eServiceReference>::iterator m_cursor;
87 public:
88         eDVBDBBouquetQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
89         RESULT getNextResult(eServiceReferenceDVB &ref);
90 };
91
92 class eDVBDBListQuery: public eDVBDBQueryBase
93 {
94 protected:
95         std::list<eServiceReferenceDVB> m_list;
96         std::list<eServiceReferenceDVB>::iterator m_cursor;
97 public:
98         eDVBDBListQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
99         RESULT getNextResult(eServiceReferenceDVB &ref);
100         int compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b);
101 };
102
103 class eDVBDBSatellitesQuery: public eDVBDBListQuery
104 {
105 public:
106         eDVBDBSatellitesQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
107 };
108
109 class eDVBDBProvidersQuery: public eDVBDBListQuery
110 {
111 public:
112         eDVBDBProvidersQuery(eDVBDB *db, const eServiceReference &source, eDVBChannelQuery *query);
113 };
114 #endif // SWIG
115
116 #endif