summaryrefslogtreecommitdiff
path: root/epg.c
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2012-03-10 15:10:43 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2012-03-10 15:10:43 +0100
commit860786f809e55ac36d3f347b132d93118ca201d4 (patch)
tree3a99189a28a55ed499dcca562ba3eaabed568ae0 /epg.c
parentbc06fc2ce38392605ef094cfe544faafad9c1cb8 (diff)
downloadvdr-860786f809e55ac36d3f347b132d93118ca201d4.tar.gz
vdr-860786f809e55ac36d3f347b132d93118ca201d4.tar.bz2
Added a new plugin interface for implementing EPG handlers1.7.26
Diffstat (limited to 'epg.c')
-rw-r--r--epg.c154
1 files changed, 152 insertions, 2 deletions
diff --git a/epg.c b/epg.c
index 2ff10528..f5c9b3a3 100644
--- a/epg.c
+++ b/epg.c
@@ -7,7 +7,7 @@
* 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.c 2.11 2012/02/13 14:58:19 kls Exp $
+ * $Id: epg.c 2.12 2012/03/10 13:14:27 kls Exp $
*/
#include "epg.h"
@@ -114,7 +114,7 @@ cEvent::cEvent(tEventID EventID)
{
schedule = NULL;
eventID = EventID;
- tableID = 0;
+ tableID = 0xFF; // actual table ids are 0x4E..0x60
version = 0xFF; // actual version numbers are 0..31
runningStatus = SI::RunningStatusUndefined;
title = NULL;
@@ -1296,3 +1296,153 @@ void cEpgDataReader::Action(void)
{
cSchedules::Read();
}
+
+// --- cEpgHandler -----------------------------------------------------------
+
+cEpgHandler::cEpgHandler(void)
+{
+ EpgHandlers.Add(this);
+}
+
+cEpgHandler::~cEpgHandler()
+{
+ EpgHandlers.Del(this, false);
+}
+
+// --- cEpgHandlers ----------------------------------------------------------
+
+cEpgHandlers EpgHandlers;
+
+bool cEpgHandlers::IgnoreChannel(const cChannel *Channel)
+{
+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
+ if (eh->IgnoreChannel(Channel))
+ return true;
+ }
+ return false;
+}
+
+bool cEpgHandlers::HandleEitEvent(cSchedule *Schedule, const SI::EIT::Event *EitEvent, uchar TableID, uchar Version)
+{
+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
+ if (eh->HandleEitEvent(Schedule, EitEvent, TableID, Version))
+ return true;
+ }
+ return false;
+}
+
+void cEpgHandlers::SetEventID(cEvent *Event, tEventID EventID)
+{
+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
+ if (eh->SetEventID(Event, EventID))
+ return;
+ }
+ Event->SetEventID(EventID);
+}
+
+void cEpgHandlers::SetTitle(cEvent *Event, const char *Title)
+{
+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
+ if (eh->SetTitle(Event, Title))
+ return;
+ }
+ Event->SetTitle(Title);
+}
+
+void cEpgHandlers::SetShortText(cEvent *Event, const char *ShortText)
+{
+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
+ if (eh->SetShortText(Event, ShortText))
+ return;
+ }
+ Event->SetShortText(ShortText);
+}
+
+void cEpgHandlers::SetDescription(cEvent *Event, const char *Description)
+{
+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
+ if (eh->SetDescription(Event, Description))
+ return;
+ }
+ Event->SetDescription(Description);
+}
+
+void cEpgHandlers::SetContents(cEvent *Event, uchar *Contents)
+{
+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
+ if (eh->SetContents(Event, Contents))
+ return;
+ }
+ Event->SetContents(Contents);
+}
+
+void cEpgHandlers::SetParentalRating(cEvent *Event, int ParentalRating)
+{
+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
+ if (eh->SetParentalRating(Event, ParentalRating))
+ return;
+ }
+ Event->SetParentalRating(ParentalRating);
+}
+
+void cEpgHandlers::SetStartTime(cEvent *Event, time_t StartTime)
+{
+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
+ if (eh->SetStartTime(Event, StartTime))
+ return;
+ }
+ Event->SetStartTime(StartTime);
+}
+
+void cEpgHandlers::SetDuration(cEvent *Event, int Duration)
+{
+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
+ if (eh->SetDuration(Event, Duration))
+ return;
+ }
+ Event->SetDuration(Duration);
+}
+
+void cEpgHandlers::SetVps(cEvent *Event, time_t Vps)
+{
+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
+ if (eh->SetVps(Event, Vps))
+ return;
+ }
+ Event->SetVps(Vps);
+}
+
+void cEpgHandlers::FixEpgBugs(cEvent *Event)
+{
+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
+ if (eh->FixEpgBugs(Event))
+ return;
+ }
+ Event->FixEpgBugs();
+}
+
+void cEpgHandlers::HandleEvent(cEvent *Event)
+{
+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
+ if (eh->HandleEvent(Event))
+ break;
+ }
+}
+
+void cEpgHandlers::SortSchedule(cSchedule *Schedule)
+{
+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
+ if (eh->SortSchedule(Schedule))
+ return;
+ }
+ Schedule->Sort();
+}
+
+void cEpgHandlers::DropOutdated(cSchedule *Schedule, time_t SegmentStart, time_t SegmentEnd, uchar TableID, uchar Version)
+{
+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
+ if (eh->DropOutdated(Schedule, SegmentStart, SegmentEnd, TableID, Version))
+ return;
+ }
+ Schedule->DropOutdated(SegmentStart, SegmentEnd, TableID, Version);
+}