diff options
-rw-r--r-- | CONTRIBUTORS | 1 | ||||
-rw-r--r-- | HISTORY | 1 | ||||
-rw-r--r-- | eit.c | 4 | ||||
-rw-r--r-- | epg.c | 18 | ||||
-rw-r--r-- | epg.h | 10 |
5 files changed, 31 insertions, 3 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 9840890e..f1628069 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -2550,6 +2550,7 @@ Jörg Wendel <vdr-ml@jwendel.de> for reporting that cPlugin::Active() was called too often for adding HandledExternally() to the EPG handler interface for adding IsUpdate() to the EPG handler interface + for adding Begin/EndSegmentTransfer() to the EPG handler interface Peter Pinnau <vdr@unterbrecher.de> for reporting that 'uint32_t' requires including stdint.h in font.h on some systems @@ -7884,3 +7884,4 @@ Video Disk Recorder Revision History Manfred Völkel and Oliver Endriss). - Reverted the change from version 1.5.7 that made all logging go to LOG_ERR (thanks to Christopher Reimer). +- Added Begin/EndSegmentTransfer() to the EPG handler interface (thanks to Jörg Wendel). @@ -8,7 +8,7 @@ * Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>. * Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg <marcel.wiesweg@gmx.de>. * - * $Id: eit.c 2.23 2012/12/04 11:10:10 kls Exp $ + * $Id: eit.c 3.1 2013/08/23 10:52:27 kls Exp $ */ #include "eit.h" @@ -46,6 +46,7 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bo return; } + EpgHandlers.BeginSegmentTransfer(channel, OnlyRunningStatus); bool handledExternally = EpgHandlers.HandledExternally(channel); cSchedule *pSchedule = (cSchedule *)Schedules->GetSchedule(channel, true); @@ -310,6 +311,7 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bo Schedules->SetModified(pSchedule); } Channels.Unlock(); + EpgHandlers.EndSegmentTransfer(Modified, OnlyRunningStatus); } // --- cTDT ------------------------------------------------------------------ @@ -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.23 2013/02/17 14:12:07 kls Exp $ + * $Id: epg.c 3.1 2013/08/23 10:46:33 kls Exp $ */ #include "epg.h" @@ -1537,3 +1537,19 @@ void cEpgHandlers::DropOutdated(cSchedule *Schedule, time_t SegmentStart, time_t } Schedule->DropOutdated(SegmentStart, SegmentEnd, TableID, Version); } + +void cEpgHandlers::BeginSegmentTransfer(const cChannel *Channel, bool OnlyRunningStatus) +{ + for (cEpgHandler *eh = First(); eh; eh = Next(eh)) { + if (eh->BeginSegmentTransfer(Channel, OnlyRunningStatus)) + return; + } +} + +void cEpgHandlers::EndSegmentTransfer(bool Modified, bool OnlyRunningStatus) +{ + for (cEpgHandler *eh = First(); eh; eh = Next(eh)) { + if (eh->EndSegmentTransfer(Modified, OnlyRunningStatus)) + return; + } +} @@ -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.h 2.15 2012/09/24 12:53:53 kls Exp $ + * $Id: epg.h 3.1 2013/08/23 10:50:05 kls Exp $ */ #ifndef __EPG_H @@ -273,6 +273,12 @@ public: 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. + virtual bool BeginSegmentTransfer(const cChannel *Channel, bool OnlyRunningStatus) { return false; } + ///< Called directly after IgnoreChannel() before any other handler method is called. + ///< Designed to give handlers the possibility to prepare a database transaction. + virtual bool EndSegmentTransfer(bool Modified, bool OnlyRunningStatus) { return false; } + ///< Called after the segment data has been processed. + ///< At this point handlers should close/commit/rollback any pending database transactions. }; class cEpgHandlers : public cList<cEpgHandler> { @@ -295,6 +301,8 @@ public: void HandleEvent(cEvent *Event); void SortSchedule(cSchedule *Schedule); void DropOutdated(cSchedule *Schedule, time_t SegmentStart, time_t SegmentEnd, uchar TableID, uchar Version); + void BeginSegmentTransfer(const cChannel *Channel, bool OnlyRunningStatus); + void EndSegmentTransfer(bool Modified, bool OnlyRunningStatus); }; extern cEpgHandlers EpgHandlers; |