Added Begin/EndSegmentTransfer() to the EPG handler interface

This commit is contained in:
Klaus Schmidinger 2013-08-23 10:54:49 +02:00
parent 9492231058
commit f0537ea0f1
5 changed files with 31 additions and 3 deletions

View File

@ -2550,6 +2550,7 @@ J
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

View File

@ -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).

4
eit.c
View File

@ -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 ------------------------------------------------------------------

18
epg.c
View File

@ -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;
}
}

10
epg.h
View File

@ -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;