diff options
Diffstat (limited to 'patches')
-rw-r--r-- | patches/pre-vdr-2.1.x--epghandler-segment-transfer.patch | 65 | ||||
-rw-r--r-- | patches/vdr-1.7.27-to-epghandler-of-1.7.31.patch | 219 | ||||
-rw-r--r-- | patches/vdr-1.7.28-epghandledexternally.diff | 118 | ||||
-rw-r--r-- | patches/vdr-1.7.29-epgIsUpdate.diff | 52 | ||||
-rw-r--r-- | patches/vdr-2.2.0-aux.patch | 79 | ||||
-rw-r--r-- | patches/vdr-2.3.1.patch | 11 | ||||
-rw-r--r-- | patches/vdr-2.3.2-aux.patch | 79 |
7 files changed, 158 insertions, 465 deletions
diff --git a/patches/pre-vdr-2.1.x--epghandler-segment-transfer.patch b/patches/pre-vdr-2.1.x--epghandler-segment-transfer.patch deleted file mode 100644 index 8374a66..0000000 --- a/patches/pre-vdr-2.1.x--epghandler-segment-transfer.patch +++ /dev/null @@ -1,65 +0,0 @@ ---- ../vdr-2.0.2.plain//eit.c 2012-12-04 12:10:10.000000000 +0100 -+++ eit.c 2013-05-22 16:49:37.635027462 +0200 -@@ -46,6 +46,8 @@ - return; - } - -+ EpgHandlers.BeginSegmentTransfer(channel, OnlyRunningStatus); -+ - bool handledExternally = EpgHandlers.HandledExternally(channel); - cSchedule *pSchedule = (cSchedule *)Schedules->GetSchedule(channel, true); - -@@ -310,6 +312,7 @@ - Schedules->SetModified(pSchedule); - } - Channels.Unlock(); -+ EpgHandlers.EndSegmentTransfer(Modified, OnlyRunningStatus); - } - - // --- cTDT ------------------------------------------------------------------ ---- ../vdr-2.0.2.plain//epg.c 2013-02-17 15:12:07.000000000 +0100 -+++ epg.c 2013-05-22 16:50:29.043029281 +0200 -@@ -1537,3 +1537,19 @@ - } - 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; -+ } -+} ---- ../vdr-2.0.2.plain//epg.h 2012-09-24 14:53:53.000000000 +0200 -+++ epg.h 2013-05-22 16:50:16.867028850 +0200 -@@ -273,6 +273,12 @@ - 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 called -+ ///< designed to give handlers the ossibility to prepare a transaction -+ virtual bool EndSegmentTransfer(bool Modified, bool OnlyRunningStatus) { return false; } -+ ///< called at last after the segment data is processed -+ ///< at this oint handlers should close/commt/rollback their transactions - }; - - class cEpgHandlers : public cList<cEpgHandler> { -@@ -295,6 +301,8 @@ - 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; diff --git a/patches/vdr-1.7.27-to-epghandler-of-1.7.31.patch b/patches/vdr-1.7.27-to-epghandler-of-1.7.31.patch deleted file mode 100644 index 7be1802..0000000 --- a/patches/vdr-1.7.27-to-epghandler-of-1.7.31.patch +++ /dev/null @@ -1,219 +0,0 @@ ---- /home/wendel/vdr-1.7.27.plain//eit.c 2012-03-14 11:11:15.000000000 +0100 -+++ eit.c 2012-10-01 09:38:51.526839349 +0200 -@@ -45,6 +45,7 @@ - return; - } - -+ bool handledExternally = EpgHandlers.HandledExternally(channel); - cSchedule *pSchedule = (cSchedule *)Schedules->GetSchedule(channel, true); - - bool Empty = true; -@@ -70,14 +71,18 @@ - cEvent *newEvent = NULL; - cEvent *rEvent = NULL; - cEvent *pEvent = (cEvent *)pSchedule->GetEvent(SiEitEvent.getEventId(), StartTime); -- if (!pEvent) { -+ if (!pEvent || handledExternally) { - if (OnlyRunningStatus) - continue; -+ if (handledExternally) -+ if (!EpgHandlers.IsUpdate(SiEitEvent.getEventId(), StartTime, Tid, getVersionNumber())) -+ continue; - // If we don't have that event yet, we create a new one. - // Otherwise we copy the information into the existing event anyway, because the data might have changed. - pEvent = newEvent = new cEvent(SiEitEvent.getEventId()); - newEvent->SetStartTime(StartTime); - newEvent->SetDuration(Duration); -+ if (!handledExternally) - pSchedule->AddEvent(newEvent); - } - else { -@@ -290,6 +295,9 @@ - channel->SetLinkChannels(LinkChannels); - Modified = true; - EpgHandlers.HandleEvent(pEvent); -+ -+ if (handledExternally) -+ delete pEvent; - } - if (Tid == 0x4E) { - if (Empty && getSectionNumber() == 0) ---- /home/wendel/vdr-1.7.27.plain//epg.c 2012-03-10 14:14:27.000000000 +0100 -+++ epg.c 2012-10-01 09:41:35.010845128 +0200 -@@ -18,6 +18,7 @@ - #include "timers.h" - - #define RUNNINGSTATUSTIMEOUT 30 // seconds before the running status is considered unknown -+#define EPGDATAWRITEDELTA 600 // seconds between writing the epg.data file - - // --- tComponent ------------------------------------------------------------ - -@@ -1109,6 +1110,47 @@ - return false; - } - -+// --- cEpgDataWriter --------------------------------------------------------- -+ -+class cEpgDataWriter : public cThread { -+private: -+ cMutex mutex; -+protected: -+ virtual void Action(void); -+public: -+ cEpgDataWriter(void); -+ void Perform(void); -+ }; -+ -+cEpgDataWriter::cEpgDataWriter(void) -+:cThread("epg data writer") -+{ -+} -+ -+void cEpgDataWriter::Action(void) -+{ -+ SetPriority(19); -+ SetIOPriority(7); -+ Perform(); -+} -+ -+void cEpgDataWriter::Perform(void) -+{ -+ cMutexLock MutexLock(&mutex); // to make sure fore- and background calls don't cause parellel dumps! -+ { -+ cSchedulesLock SchedulesLock(true, 1000); -+ cSchedules *s = (cSchedules *)cSchedules::Schedules(SchedulesLock); -+ if (s) { -+ time_t now = time(NULL); -+ for (cSchedule *p = s->First(); p; p = s->Next(p)) -+ p->Cleanup(now); -+ } -+ } -+ cSchedules::Dump(); -+} -+ -+static cEpgDataWriter EpgDataWriter; -+ - // --- cSchedulesLock -------------------------------------------------------- - - cSchedulesLock::cSchedulesLock(bool WriteLock, int TimeoutMs) -@@ -1152,28 +1194,13 @@ - if (Force) - lastDump = 0; - time_t now = time(NULL); -- struct tm tm_r; -- struct tm *ptm = localtime_r(&now, &tm_r); -- if (now - lastCleanup > 3600) { -- isyslog("cleaning up schedules data"); -- cSchedulesLock SchedulesLock(true, 1000); -- cSchedules *s = (cSchedules *)Schedules(SchedulesLock); -- if (s) { -- for (cSchedule *p = s->First(); p; p = s->Next(p)) -- p->Cleanup(now); -- } -- lastCleanup = now; -- if (ptm->tm_hour == 5) -- ReportEpgBugFixStats(true); -- } -- if (epgDataFileName && now - lastDump > 600) { -- cSafeFile f(epgDataFileName); -- if (f.Open()) { -- Dump(f); -- f.Close(); -+ if (now - lastDump > EPGDATAWRITEDELTA) { -+ if (epgDataFileName) { -+ if (Force) -+ EpgDataWriter.Perform(); -+ else if (!EpgDataWriter.Active()) -+ EpgDataWriter.Start(); - } -- else -- LOG_ERROR; - lastDump = now; - } - } -@@ -1207,8 +1234,23 @@ - cSchedulesLock SchedulesLock; - cSchedules *s = (cSchedules *)Schedules(SchedulesLock); - if (s) { -+ cSafeFile *sf = NULL; -+ if (!f) { -+ sf = new cSafeFile(epgDataFileName); -+ if (sf->Open()) -+ f = *sf; -+ else { -+ LOG_ERROR; -+ delete sf; -+ return false; -+ } -+ } - for (cSchedule *p = s->First(); p; p = s->Next(p)) - p->Dump(f, Prefix, DumpMode, AtTime); -+ if (sf) { -+ sf->Close(); -+ delete sf; -+ } - return true; - } - return false; -@@ -1329,6 +1371,24 @@ - return true; - } - return false; -+} -+ -+bool cEpgHandlers::HandledExternally(const cChannel *Channel) -+{ -+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) { -+ if (eh->HandledExternally(Channel)) -+ return true; -+ } -+ return false; -+} -+ -+bool cEpgHandlers::IsUpdate(tEventID EventID, time_t StartTime, uchar TableID, uchar Version) -+{ -+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) { -+ if (eh->IsUpdate(EventID, StartTime, TableID, Version)) -+ return true; -+ } -+ return false; - } - - void cEpgHandlers::SetEventID(cEvent *Event, tEventID EventID) ---- /home/wendel/vdr-1.7.27.plain//epg.h 2012-03-10 14:50:10.000000000 +0100 -+++ epg.h 2012-10-01 09:43:28.162849134 +0200 -@@ -207,7 +207,7 @@ - static void Cleanup(bool Force = false); - static void ResetVersions(void); - static bool ClearAll(void); -- static bool Dump(FILE *f, const char *Prefix = "", eDumpMode DumpMode = dmAll, time_t AtTime = 0); -+ static bool Dump(FILE *f = NULL, const char *Prefix = "", eDumpMode DumpMode = dmAll, time_t AtTime = 0); - static bool Read(FILE *f = NULL); - cSchedule *AddSchedule(tChannelID ChannelID); - const cSchedule *GetSchedule(tChannelID ChannelID) const; -@@ -244,6 +244,16 @@ - ///< 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 HandledExternally(const cChannel *Channel) { return false; } -+ ///< If any EPG handler returns true in this function, it is assumed that -+ ///< the EPG for the given Channel is handled completely from some external -+ ///< source. Incoming EIT data is processed as usual, but any new EPG event -+ ///< will not be added to the respective schedule. It's up to the EPG -+ ///< handler to take care of this. -+ virtual bool IsUpdate(tEventID EventID, time_t StartTime, uchar TableID, uchar Version) { return false; } -+ ///< VDR can't perform the update check (version, tid) for external handled events -+ ///< therefore the handle have to take care. Otherwise the parsing of 'non' updates will -+ ///< take a lot of resources - 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; } -@@ -269,6 +279,8 @@ - public: - bool IgnoreChannel(const cChannel *Channel); - bool HandleEitEvent(cSchedule *Schedule, const SI::EIT::Event *EitEvent, uchar TableID, uchar Version); -+ bool HandledExternally(const cChannel *Channel); -+ bool IsUpdate(tEventID EventID, time_t StartTime, uchar TableID, uchar Version); - void SetEventID(cEvent *Event, tEventID EventID); - void SetTitle(cEvent *Event, const char *Title); - void SetShortText(cEvent *Event, const char *ShortText); diff --git a/patches/vdr-1.7.28-epghandledexternally.diff b/patches/vdr-1.7.28-epghandledexternally.diff deleted file mode 100644 index 52dfab6..0000000 --- a/patches/vdr-1.7.28-epghandledexternally.diff +++ /dev/null @@ -1,118 +0,0 @@ ---- ./eit.c 2012/06/02 14:05:22 2.17 -+++ ./eit.c 2012/06/04 10:10:11 -@@ -45,6 +45,7 @@ - return; - } - -+ bool handledExternally = EpgHandlers.HandledExternally(channel); - cSchedule *pSchedule = (cSchedule *)Schedules->GetSchedule(channel, true); - - bool Empty = true; -@@ -70,7 +71,7 @@ - cEvent *newEvent = NULL; - cEvent *rEvent = NULL; - cEvent *pEvent = (cEvent *)pSchedule->GetEvent(SiEitEvent.getEventId(), StartTime); -- if (!pEvent) { -+ if (!pEvent || handledExternally) { - if (OnlyRunningStatus) - continue; - // If we don't have that event yet, we create a new one. -@@ -78,7 +79,8 @@ - pEvent = newEvent = new cEvent(SiEitEvent.getEventId()); - newEvent->SetStartTime(StartTime); - newEvent->SetDuration(Duration); -- pSchedule->AddEvent(newEvent); -+ if (!handledExternally) -+ pSchedule->AddEvent(newEvent); - } - else { - // We have found an existing event, either through its event ID or its start time. -@@ -290,11 +292,8 @@ - channel->SetLinkChannels(LinkChannels); - Modified = true; - EpgHandlers.HandleEvent(pEvent); -- -- if (EpgHandlers.DeleteEvent(pEvent)) { -- pSchedule->DelEvent(pEvent); -- pEvent = NULL; -- } -+ if (handledExternally) -+ delete pEvent; - } - if (Tid == 0x4E) { - if (Empty && getSectionNumber() == 0) ---- ./epg.c 2012/06/02 14:08:12 2.14 -+++ ./epg.c 2012/06/04 10:06:22 -@@ -1331,6 +1331,15 @@ - return false; - } - -+bool cEpgHandlers::HandledExternally(const cChannel *Channel) -+{ -+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) { -+ if (eh->HandledExternally(Channel)) -+ return true; -+ } -+ return false; -+} -+ - void cEpgHandlers::SetEventID(cEvent *Event, tEventID EventID) - { - for (cEpgHandler *eh = First(); eh; eh = Next(eh)) { -@@ -1429,15 +1438,6 @@ - } - } - --bool cEpgHandlers::DeleteEvent(const cEvent *Event) --{ -- for (cEpgHandler *eh = First(); eh; eh = Next(eh)) { -- if (eh->DeleteEvent(Event)) -- return true; -- } -- return false; --} -- - void cEpgHandlers::SortSchedule(cSchedule *Schedule) - { - for (cEpgHandler *eh = First(); eh; eh = Next(eh)) { ---- ./epg.h 2012/06/02 14:07:51 2.10 -+++ ./epg.h 2012/06/04 10:05:21 -@@ -244,6 +244,12 @@ - ///< 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 HandledExternally(const cChannel *Channel) { return false; } -+ ///< If any EPG handler returns true in this function, it is assumed that -+ ///< the EPG for the given Channel is handled completely from some external -+ ///< source. Incoming EIT data is processed as usual, but any new EPG event -+ ///< will not be added to the respective schedule. It's up to the EPG -+ ///< handler to take care of this. - 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; } -@@ -258,9 +264,6 @@ - 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 DeleteEvent(const cEvent *Event) { return false; } -- ///< After the complete processing of the Event is finished, an EPG handler -- ///< can decide that this Event shall be deleted from its schedule. - 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; } -@@ -272,6 +275,7 @@ - public: - bool IgnoreChannel(const cChannel *Channel); - bool HandleEitEvent(cSchedule *Schedule, const SI::EIT::Event *EitEvent, uchar TableID, uchar Version); -+ bool HandledExternally(const cChannel *Channel); - void SetEventID(cEvent *Event, tEventID EventID); - void SetTitle(cEvent *Event, const char *Title); - void SetShortText(cEvent *Event, const char *ShortText); -@@ -283,7 +287,6 @@ - void SetVps(cEvent *Event, time_t Vps); - void FixEpgBugs(cEvent *Event); - void HandleEvent(cEvent *Event); -- bool DeleteEvent(const cEvent *Event); - void SortSchedule(cSchedule *Schedule); - void DropOutdated(cSchedule *Schedule, time_t SegmentStart, time_t SegmentEnd, uchar TableID, uchar Version); - }; diff --git a/patches/vdr-1.7.29-epgIsUpdate.diff b/patches/vdr-1.7.29-epgIsUpdate.diff deleted file mode 100644 index 61549ca..0000000 --- a/patches/vdr-1.7.29-epgIsUpdate.diff +++ /dev/null @@ -1,52 +0,0 @@ ---- ../vdr-1.7.29.plain//eit.c 2012-06-04 12:26:10.000000000 +0200 -+++ eit.c 2012-07-30 10:19:34.841894485 +0200 -@@ -74,6 +74,9 @@ - if (!pEvent || handledExternally) { - if (OnlyRunningStatus) - continue; -+ if (handledExternally) -+ if (!EpgHandlers.IsUpdate(SiEitEvent.getEventId(), StartTime, Tid, getVersionNumber())) -+ continue; - // If we don't have that event yet, we create a new one. - // Otherwise we copy the information into the existing event anyway, because the data might have changed. - pEvent = newEvent = new cEvent(SiEitEvent.getEventId()); ---- ../vdr-1.7.29.plain//epg.c 2012-06-04 12:26:10.000000000 +0200 -+++ epg.c 2012-07-30 10:21:51.153899306 +0200 -@@ -1340,6 +1340,15 @@ - return false; - } - -+bool cEpgHandlers::IsUpdate(tEventID EventID, time_t StartTime, uchar TableID, uchar Version) -+{ -+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) { -+ if (eh->IsUpdate(EventID, StartTime, TableID, Version)) -+ return true; -+ } -+ return false; -+} -+ - void cEpgHandlers::SetEventID(cEvent *Event, tEventID EventID) - { - for (cEpgHandler *eh = First(); eh; eh = Next(eh)) { ---- ../vdr-1.7.29.plain//epg.h 2012-06-04 12:26:10.000000000 +0200 -+++ epg.h 2012-07-30 10:20:15.705895929 +0200 -@@ -250,6 +250,10 @@ - ///< source. Incoming EIT data is processed as usual, but any new EPG event - ///< will not be added to the respective schedule. It's up to the EPG - ///< handler to take care of this. -+ virtual bool IsUpdate(tEventID EventID, time_t StartTime, uchar TableID, uchar Version) { return false; } -+ ///< VDR can't perform the update check (version, tid) for external handled events -+ ///< therefore the handle have to take care. Otherwise the parsing of 'non' updates will -+ ///< take a lot of resources - 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; } -@@ -277,6 +281,7 @@ - bool IgnoreChannel(const cChannel *Channel); - bool HandleEitEvent(cSchedule *Schedule, const SI::EIT::Event *EitEvent, uchar TableID, uchar Version); - bool HandledExternally(const cChannel *Channel); -+ bool IsUpdate(tEventID EventID, time_t StartTime, uchar TableID, uchar Version); - void SetEventID(cEvent *Event, tEventID EventID); - void SetTitle(cEvent *Event, const char *Title); - void SetShortText(cEvent *Event, const char *ShortText); - diff --git a/patches/vdr-2.2.0-aux.patch b/patches/vdr-2.2.0-aux.patch new file mode 100644 index 0000000..749fb49 --- /dev/null +++ b/patches/vdr-2.2.0-aux.patch @@ -0,0 +1,79 @@ +--- ../vdr-2.2.0.plain/epg.c 2013-12-28 12:33:08.000000000 +0100 ++++ epg.c 2017-03-22 16:21:34.266665706 +0100 +@@ -122,6 +122,7 @@ + shortText = NULL; + description = NULL; + components = NULL; ++ aux = NULL; + memset(contents, 0, sizeof(contents)); + parentalRating = 0; + startTime = 0; +@@ -135,6 +136,7 @@ + free(title); + free(shortText); + free(description); ++ free(aux); + delete components; + } + +@@ -235,6 +237,12 @@ + seen = time(NULL); + } + ++void cEvent::SetAux(const char *Aux) ++{ ++ free(aux); ++ aux = Aux ? strdup(Aux) : NULL; ++} ++ + cString cEvent::ToDescr(void) const + { + char vpsbuf[64] = ""; +@@ -458,6 +466,11 @@ + } + if (vps) + fprintf(f, "%sV %ld\n", Prefix, vps); ++ if (!isempty(aux)) { ++ strreplace(aux, '\n', '|'); ++ fprintf(f, "%s@ %s\n", Prefix, aux); ++ strreplace(aux, '|', '\n'); ++ } + if (!InfoOnly) + fprintf(f, "%se\n", Prefix); + } +@@ -496,6 +509,9 @@ + break; + case 'V': SetVps(atoi(t)); + break; ++ case '@': strreplace(t, '|', '\n'); ++ SetAux(t); ++ break; + default: esyslog("ERROR: unexpected tag while reading EPG data: %s", s); + return false; + } +--- ../vdr-2.2.0.plain/epg.h 2013-08-23 12:50:05.000000000 +0200 ++++ epg.h 2017-03-22 16:23:28.096287585 +0100 +@@ -87,6 +87,7 @@ + int duration; // Duration of this event in seconds + time_t vps; // Video Programming Service timestamp (VPS, aka "Programme Identification Label", PIL) + time_t seen; // When this event was last seen in the data stream ++ char *aux; + public: + cEvent(tEventID EventID); + ~cEvent(); +@@ -109,6 +110,7 @@ + time_t Vps(void) const { return vps; } + time_t Seen(void) const { return seen; } + bool SeenWithin(int Seconds) const { return time(NULL) - seen < Seconds; } ++ const char *Aux(void) const { return aux; } + bool HasTimer(void) const; + bool IsRunning(bool OrAboutToStart = false) const; + static const char *ContentToString(uchar Content); +@@ -131,6 +133,7 @@ + void SetDuration(int Duration); + void SetVps(time_t Vps); + void SetSeen(void); ++ void SetAux(const char *Aux); + cString ToDescr(void) const; + void Dump(FILE *f, const char *Prefix = "", bool InfoOnly = false) const; + bool Parse(char *s); diff --git a/patches/vdr-2.3.1.patch b/patches/vdr-2.3.1.patch deleted file mode 100644 index c37bb54..0000000 --- a/patches/vdr-2.3.1.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../vdr-2.3.2.plain/./epg.h 2015-08-09 13:25:04.000000000 +0200 -+++ ./epg.h 2017-02-08 14:42:26.304063928 +0100 -@@ -66,7 +66,7 @@ - - class cSchedule; - --typedef u_int16_t tEventID; -+typedef u_int32_t tEventID; - - class cEvent : public cListObject { - friend class cSchedule; diff --git a/patches/vdr-2.3.2-aux.patch b/patches/vdr-2.3.2-aux.patch new file mode 100644 index 0000000..fd3fe26 --- /dev/null +++ b/patches/vdr-2.3.2-aux.patch @@ -0,0 +1,79 @@ +--- ../vdr-2.3.2.plain//epg.c 2015-09-10 12:58:19.000000000 +0200 ++++ epg.c 2017-03-22 11:44:51.917258845 +0100 +@@ -124,6 +124,7 @@ + shortText = NULL; + description = NULL; + components = NULL; ++ aux = NULL; + memset(contents, 0, sizeof(contents)); + parentalRating = 0; + startTime = 0; +@@ -137,6 +138,7 @@ + free(title); + free(shortText); + free(description); ++ free(aux); + delete components; + } + +@@ -237,6 +239,12 @@ + seen = time(NULL); + } + ++void cEvent::SetAux(const char *Aux) ++{ ++ free(aux); ++ aux = Aux ? strdup(Aux) : NULL; ++} ++ + cString cEvent::ToDescr(void) const + { + char vpsbuf[64] = ""; +@@ -469,6 +477,11 @@ + } + if (vps) + fprintf(f, "%sV %ld\n", Prefix, vps); ++ if (!isempty(aux)) { ++ strreplace(aux, '\n', '|'); ++ fprintf(f, "%s@ %s\n", Prefix, aux); ++ strreplace(aux, '|', '\n'); ++ } + if (!InfoOnly) + fprintf(f, "%se\n", Prefix); + } +@@ -507,6 +520,9 @@ + break; + case 'V': SetVps(atoi(t)); + break; ++ case '@': strreplace(t, '|', '\n'); ++ SetAux(t); ++ break; + default: esyslog("ERROR: unexpected tag while reading EPG data: %s", s); + return false; + } +--- ../vdr-2.3.2.plain//epg.h 2015-08-09 13:25:04.000000000 +0200 ++++ epg.h 2017-03-22 11:33:19.319728545 +0100 +@@ -89,6 +89,7 @@ + int duration; // Duration of this event in seconds + time_t vps; // Video Programming Service timestamp (VPS, aka "Programme Identification Label", PIL) + time_t seen; // When this event was last seen in the data stream ++ char *aux; + public: + cEvent(tEventID EventID); + ~cEvent(); +@@ -111,6 +112,7 @@ + time_t Vps(void) const { return vps; } + time_t Seen(void) const { return seen; } + bool SeenWithin(int Seconds) const { return time(NULL) - seen < Seconds; } ++ const char *Aux(void) const { return aux; } + void IncNumTimers(void) const; + void DecNumTimers(void) const; + bool HasTimer(void) const { return numTimers > 0; } +@@ -135,6 +137,7 @@ + void SetDuration(int Duration); + void SetVps(time_t Vps); + void SetSeen(void); ++ void SetAux(const char *Aux); + cString ToDescr(void) const; + void Dump(FILE *f, const char *Prefix = "", bool InfoOnly = false) const; + bool Parse(char *s); |