allow gstreamer to signalize missing plugins to the gui (requires reconfiguring enigm...
[enigma2.git] / lib / dvb / epgcache.h
index d27c4b3e0a220ed662c8e9bd0e9a117e234c43b9..5e5e7e8e3927e37a7dd6601e123e028b6332cc35 100644 (file)
@@ -2,7 +2,7 @@
 #define __epgcache_h_
 
 #define ENABLE_PRIVATE_EPG 1
-#define NEED_DEMUX_WORKAROUND 1
+//#define ENABLE_MHW_EPG 1
 
 #ifndef SWIG
 
@@ -15,6 +15,9 @@
 
 #include <lib/dvb/eit.h>
 #include <lib/dvb/lowlevel/eit.h>
+#ifdef ENABLE_MHW_EPG
+#include <lib/dvb/lowlevel/mhw.h>
+#endif
 #include <lib/dvb/idvb.h>
 #include <lib/dvb/demux.h>
 #include <lib/dvb/dvbtime.h>
@@ -149,11 +152,12 @@ class eEPGCache: public eMainloop, private eThread, public Object
        DECLARE_REF(eEPGCache)
        struct channel_data: public Object
        {
+               pthread_mutex_t channel_active;
                channel_data(eEPGCache*);
                eEPGCache *cache;
                eTimer abortTimer, zapTimer;
                int prevChannelState;
-               __u8 state, isRunning, haveData, can_delete;
+               __u8 state, isRunning, haveData;
                ePtr<eDVBChannel> channel;
                ePtr<eConnection> m_stateChangedConn, m_NowNextConn, m_ScheduleConn, m_ScheduleOtherConn;
                ePtr<iDVBSectionReader> m_NowNextReader, m_ScheduleReader, m_ScheduleOtherReader;
@@ -168,6 +172,30 @@ class eEPGCache: public eMainloop, private eThread, public Object
                std::set<__u8> seenPrivateSections;
                void readPrivateData(const __u8 *data);
                void startPrivateReader();
+#endif
+#ifdef ENABLE_MHW_EPG
+               std::vector<mhw_channel_name_t> m_channels;
+               std::map<__u8, mhw_theme_name_t> m_themes;
+               std::map<__u32, mhw_title_t> m_titles;
+               std::multimap<__u32, __u32> m_program_ids;
+               ePtr<eConnection> m_MHWConn, m_MHWConn2;
+               ePtr<iDVBSectionReader> m_MHWReader, m_MHWReader2;
+               eDVBSectionFilterMask m_MHWFilterMask, m_MHWFilterMask2;
+               eTimer m_MHWTimeoutTimer;
+               bool m_MHWTimeoutet;
+               void MHWTimeout() { m_MHWTimeoutet=true; }
+               void readMHWData(const __u8 *data);
+               void readMHWData2(const __u8 *data);
+               void startMHWReader(__u16 pid, __u8 tid);
+               void startMHWReader2(__u16 pid, __u8 tid, int ext=-1);
+               void startTimeout(int msek);
+               bool checkTimeout() { return m_MHWTimeoutet; }
+               void cleanup();
+               __u8 *delimitName( __u8 *in, __u8 *out, int len_in );
+               void timeMHW2DVB( u_char hours, u_char minutes, u_char *return_time);
+               void timeMHW2DVB( int minutes, u_char *return_time);
+               void timeMHW2DVB( u_char day, u_char hours, u_char minutes, u_char *return_time);
+               void storeTitle(std::map<__u32, mhw_title_t>::iterator itTitle, std::string sumText, const __u8 *data);
 #endif
                void readData(const __u8 *data);
                void startChannel();
@@ -176,8 +204,13 @@ class eEPGCache: public eMainloop, private eThread, public Object
                void abortEPG();
                void abortNonAvail();
        };
+       bool FixOverlapping(std::pair<eventMap,timeMap> &servicemap, time_t TM, int duration, const timeMap::iterator &tm_it, const uniqueEPGKey &service);
 public:
-       enum {NOWNEXT=1, SCHEDULE=2, SCHEDULE_OTHER=4};
+       enum {PRIVATE=0, NOWNEXT=1, SCHEDULE=2, SCHEDULE_OTHER=4
+#ifdef ENABLE_MHW_EPG
+       ,MHW=8
+#endif
+       };
        struct Message
        {
                enum
@@ -185,10 +218,6 @@ public:
                        flush,
                        startChannel,
                        leaveChannel,
-                       pause,
-                       restart,
-                       updated,
-                       isavail,
                        quit,
                        got_private_pid,
                        timeChanged
@@ -262,26 +291,27 @@ public:
 #ifndef SWIG
        eEPGCache();
        ~eEPGCache();
-#endif
 
-       // called from main thread
-       inline void Lock();
-       inline void Unlock();
 #ifdef ENABLE_PRIVATE_EPG
        void PMTready(eDVBServicePMTHandler *pmthandler);
 #else
        void PMTready(eDVBServicePMTHandler *pmthandler) {}
 #endif
 
+#endif
+       // called from main thread
+       inline void Lock();
+       inline void Unlock();
+
        // at moment just for one service..
        RESULT startTimeQuery(const eServiceReference &service, time_t begin=-1, int minutes=-1);
 
 #ifndef SWIG
        // eventData's are plain entrys out of the cache.. it's not safe to use them after cache unlock
        // but its faster in use... its not allowed to delete this pointers via delete or free..
-       SWIG_VOID(RESULT) lookupEventId(const eServiceReference &service, int event_id, const eventData *&SWIG_OUTPUT);
-       SWIG_VOID(RESULT) lookupEventTime(const eServiceReference &service, time_t, const eventData *&SWIG_OUTPUT, int direction=0);
-       SWIG_VOID(RESULT) getNextTimeEntry(const eventData *&SWIG_OUTPUT);
+       RESULT lookupEventId(const eServiceReference &service, int event_id, const eventData *&);
+       RESULT lookupEventTime(const eServiceReference &service, time_t, const eventData *&, int direction=0);
+       RESULT getNextTimeEntry(const eventData *&);
 
        // eit_event_struct's are plain dvb eit_events .. it's not safe to use them after cache unlock
        // its not allowed to delete this pointers via delete or free..
@@ -304,8 +334,8 @@ public:
                CASE_CHECK,
                NO_CASE_CHECK
        };
-       PyObject *lookupEvent(PyObject *list, PyObject *convertFunc=NULL);
-       PyObject *search(PyObject *);
+       PyObject *lookupEvent(SWIG_PYOBJECT(ePyObject) list, SWIG_PYOBJECT(ePyObject) convertFunc=(PyObject*)0);
+       PyObject *search(SWIG_PYOBJECT(ePyObject));
 
        // eServiceEvent are parsed epg events.. it's safe to use them after cache unlock
        // for use from python ( members: m_start_time, m_duration, m_short_description, m_extended_description )