summaryrefslogtreecommitdiff
path: root/epg.h
diff options
context:
space:
mode:
Diffstat (limited to 'epg.h')
-rw-r--r--epg.h67
1 files changed, 66 insertions, 1 deletions
diff --git a/epg.h b/epg.h
index 580cbe6b..e4cec9b9 100644
--- a/epg.h
+++ b/epg.h
@@ -7,13 +7,14 @@
* Original version (as used in VDR before 1.3.0) written by
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
*
- * $Id: epg.h 2.7 2012/02/26 13:58:26 kls Exp $
+ * $Id: epg.h 2.8 2012/03/10 13:50:10 kls Exp $
*/
#ifndef __EPG_H
#define __EPG_H
#include "channels.h"
+#include "libsi/section.h"
#include "thread.h"
#include "tools.h"
@@ -221,4 +222,68 @@ public:
void ReportEpgBugFixStats(bool Reset = false);
+class cEpgHandler : public cListObject {
+public:
+ cEpgHandler(void);
+ ///< Constructs a new EPG handler and adds it to the list of EPG handlers.
+ ///< Whenever an event is received from the EIT data stream, the EPG
+ ///< handlers are queried in the order they have been created.
+ ///< As soon as one of the EPG handlers returns true in a member function,
+ ///< none of the remaining handlers will be queried. If none of the EPG
+ ///< handlers returns true in a particular call, the default processing
+ ///< will take place.
+ ///< EPG handlers will be deleted automatically at the end of the program.
+ virtual ~cEpgHandler();
+ virtual bool IgnoreChannel(const cChannel *Channel) { return false; }
+ ///< Before any EIT data for the given Channel is processed, the EPG handlers
+ ///< are asked whether this Channel shall be completely ignored. If any of
+ ///< the EPG handlers returns true in this function, no EIT data at all will
+ ///< be processed for this Channel.
+ virtual bool HandleEitEvent(cSchedule *Schedule, const SI::EIT::Event *EitEvent, uchar TableID, uchar Version) { return false; }
+ ///< Before the raw EitEvent for the given Schedule is processed, the
+ ///< EPG handlers are queried to see if any of them would like to do the
+ ///< complete processing by itself. TableID and Version are from the
+ ///< incoming section data.
+ virtual bool SetEventID(cEvent *Event, tEventID EventID) { return false; }
+ virtual bool SetTitle(cEvent *Event, const char *Title) { return false; }
+ virtual bool SetShortText(cEvent *Event, const char *ShortText) { return false; }
+ virtual bool SetDescription(cEvent *Event, const char *Description) { return false; }
+ virtual bool SetContents(cEvent *Event, uchar *Contents) { return false; }
+ virtual bool SetParentalRating(cEvent *Event, int ParentalRating) { return false; }
+ virtual bool SetStartTime(cEvent *Event, time_t StartTime) { return false; }
+ virtual bool SetDuration(cEvent *Event, int Duration) { return false; }
+ virtual bool SetVps(cEvent *Event, time_t Vps) { return false; }
+ virtual bool FixEpgBugs(cEvent *Event) { return false; }
+ ///< Fixes some known problems with EPG data.
+ virtual bool HandleEvent(cEvent *Event) { return false; }
+ ///< After all modifications of the Event have been done, the EPG handler
+ ///< can take a final look at it.
+ virtual bool SortSchedule(cSchedule *Schedule) { return false; }
+ ///< Sorts the Schedule after the complete table has been processed.
+ virtual bool DropOutdated(cSchedule *Schedule, time_t SegmentStart, time_t SegmentEnd, uchar TableID, uchar Version) { return false; }
+ ///< Takes a look at all EPG events between SegmentStart and SegmentEnd and
+ ///< drops outdated events.
+ };
+
+class cEpgHandlers : public cList<cEpgHandler> {
+public:
+ bool IgnoreChannel(const cChannel *Channel);
+ bool HandleEitEvent(cSchedule *Schedule, const SI::EIT::Event *EitEvent, uchar TableID, uchar Version);
+ void SetEventID(cEvent *Event, tEventID EventID);
+ void SetTitle(cEvent *Event, const char *Title);
+ void SetShortText(cEvent *Event, const char *ShortText);
+ void SetDescription(cEvent *Event, const char *Description);
+ void SetContents(cEvent *Event, uchar *Contents);
+ void SetParentalRating(cEvent *Event, int ParentalRating);
+ void SetStartTime(cEvent *Event, time_t StartTime);
+ void SetDuration(cEvent *Event, int Duration);
+ void SetVps(cEvent *Event, time_t Vps);
+ void FixEpgBugs(cEvent *Event);
+ void HandleEvent(cEvent *Event);
+ void SortSchedule(cSchedule *Schedule);
+ void DropOutdated(cSchedule *Schedule, time_t SegmentStart, time_t SegmentEnd, uchar TableID, uchar Version);
+ };
+
+extern cEpgHandlers EpgHandlers;
+
#endif //__EPG_H