diff options
-rw-r--r-- | CONTRIBUTORS | 1 | ||||
-rw-r--r-- | HISTORY | 4 | ||||
-rw-r--r-- | eit.c | 9 | ||||
-rw-r--r-- | epg.c | 9 | ||||
-rw-r--r-- | epg.h | 7 |
5 files changed, 21 insertions, 9 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index dac5059f..e489cfca 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -2618,6 +2618,7 @@ Jörg Wendel <vdr-ml@jwendel.de> 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 + for making cEpgHandlers::BeginSegmentTransfer() boolean Peter Pinnau <vdr@unterbrecher.de> for reporting that 'uint32_t' requires including stdint.h in font.h on some systems @@ -8925,8 +8925,10 @@ Video Disk Recorder Revision History - Now stopping any ongoing recordings before stopping the plugins, to avoid a crash when stopping VDR while recording. -2017-03-30: Version 2.3.4 +2017-03-31: Version 2.3.4 - The functionality of HandleRemoteModifications(), which synchronizes changes to timers between peer VDR machines, has been moved to timers.[ch] and renamed to HandleRemoteTimerModifications(). It now also handles deleting remote timers. +- The function cEpgHandlers::BeginSegmentTransfer() is now boolean (thanks to + Jörg Wendel). See the description in epg.h for the meaning of the return value. @@ -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 4.1 2015/08/23 10:43:36 kls Exp $ + * $Id: eit.c 4.2 2017/03/31 15:16:46 kls Exp $ */ #include "eit.h" @@ -67,8 +67,13 @@ cEIT::cEIT(cSectionSyncerHash &SectionSyncerHash, int Source, u_char Tid, const return; } + if (!EpgHandlers.BeginSegmentTransfer(Channel)) { + SchedulesStateKey.Remove(false); + ChannelsStateKey.Remove(false); + return; + } + bool ChannelsModified = false; - EpgHandlers.BeginSegmentTransfer(Channel); bool handledExternally = EpgHandlers.HandledExternally(Channel); cSchedule *pSchedule = (cSchedule *)Schedules->GetSchedule(Channel, true); @@ -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 4.2 2015/09/10 10:58:19 kls Exp $ + * $Id: epg.c 4.3 2017/03/31 15:16:46 kls Exp $ */ #include "epg.h" @@ -1527,12 +1527,13 @@ void cEpgHandlers::DropOutdated(cSchedule *Schedule, time_t SegmentStart, time_t Schedule->DropOutdated(SegmentStart, SegmentEnd, TableID, Version); } -void cEpgHandlers::BeginSegmentTransfer(const cChannel *Channel) +bool cEpgHandlers::BeginSegmentTransfer(const cChannel *Channel) { for (cEpgHandler *eh = First(); eh; eh = Next(eh)) { - if (eh->BeginSegmentTransfer(Channel, false)) - return; + if (!eh->BeginSegmentTransfer(Channel, false)) + return false; } + return true; } void cEpgHandlers::EndSegmentTransfer(bool Modified) @@ -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 4.1 2015/08/09 11:25:04 kls Exp $ + * $Id: epg.h 4.2 2017/03/31 15:24:35 kls Exp $ */ #ifndef __EPG_H @@ -284,6 +284,9 @@ public: virtual bool BeginSegmentTransfer(const cChannel *Channel, bool Dummy) { return false; } // TODO remove obsolete Dummy ///< Called directly after IgnoreChannel() before any other handler method is called. ///< Designed to give handlers the possibility to prepare a database transaction. + ///< If any EPG handler returns false in this function, it is assumed that + ///< the EPG for the given Channel has to be handled later due to some transaction problems, + ///> therefore the processing will aborted. ///< Dummy is for backward compatibility and may be removed in a future version. virtual bool EndSegmentTransfer(bool Modified, bool Dummy) { return false; } // TODO remove obsolete Dummy ///< Called after the segment data has been processed. @@ -311,7 +314,7 @@ 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 BeginSegmentTransfer(const cChannel *Channel); void EndSegmentTransfer(bool Modified); }; |