diff options
author | Jochen Dolze <vdr@dolze.de> | 2017-03-13 18:44:47 +0100 |
---|---|---|
committer | Jochen Dolze <vdr@dolze.de> | 2017-03-13 18:44:47 +0100 |
commit | 05bd94edbff42a5cc688b129706abeb1d31dba10 (patch) | |
tree | 4beeda1b823beffe4c82a9ed264e57ec5a7a64e7 /xmltv2vdr.cpp | |
parent | b48e0bec3c87531c872da028d4fb87c65f3e050e (diff) | |
download | vdr-plugin-xmltv2vdr-05bd94edbff42a5cc688b129706abeb1d31dba10.tar.gz vdr-plugin-xmltv2vdr-05bd94edbff42a5cc688b129706abeb1d31dba10.tar.bz2 |
Added compatibility for VDR >= 2.3.1
Diffstat (limited to 'xmltv2vdr.cpp')
-rw-r--r-- | xmltv2vdr.cpp | 113 |
1 files changed, 86 insertions, 27 deletions
diff --git a/xmltv2vdr.cpp b/xmltv2vdr.cpp index 893c465..1b810ff 100644 --- a/xmltv2vdr.cpp +++ b/xmltv2vdr.cpp @@ -596,10 +596,10 @@ bool cEPGHandler::IgnoreChannel(const cChannel* Channel) return maps->IgnoreChannel(Channel); } -bool cEPGHandler::check4proc(cEvent *event, cTimer **timer, cEPGMapping **map) +bool cEPGHandler::check4proc(cEvent *event, char **timerdescr, cEPGMapping **map) { if (map) *map=NULL; - if (timer) *timer=NULL; + if (timerdescr) *timerdescr=NULL; if (!event) return false; if (now>(event->StartTime()+event->Duration())) return false; // event in the past? if (!maps) return false; @@ -610,19 +610,29 @@ bool cEPGHandler::check4proc(cEvent *event, cTimer **timer, cEPGMapping **map) { if (!epall) return false; if (!event->ShortText()) return false; - if (!timer) return false; + if (!timerdescr) return false; #if VDRVERSNUM <= 10732 int TimerMatch = tmNone; #else eTimerMatch TimerMatch = tmNone; #endif - *timer=Timers.GetMatch(event,&TimerMatch); - if (!*timer) return false; - if (TimerMatch!=tmFull) + +#if VDRVERSNUM>=20301 + cStateKey StateKey; + if (const cTimers *Timers=cTimers::GetTimersRead(StateKey)) { - *timer=NULL; - return false; + const cTimer *Timer=Timers->GetMatch(event,&TimerMatch); + if ((Timer) && (TimerMatch==tmFull)) + { + *timerdescr=strdup(Timer->ToDescr()); + } + StateKey.Remove(); } +#else + cTimer *timer=Timers.GetMatch(event,&TimerMatch); + if ((!timer) || (TimerMatch!=tmFull)) return false; + *timerdescr=strdup(timer->ToDescr()); +#endif } if (map) *map=t_map; return true; @@ -649,45 +659,70 @@ bool cEPGHandler::SetShortText(cEvent* Event, const char* ShortText) bool cEPGHandler::SetDescription(cEvent* Event, const char* Description) { - cTimer *timer; - if (!check4proc(Event,&timer,NULL)) return false; + //cTimer *timer; + char *timerdescr; + if (!check4proc(Event,&timerdescr,NULL)) + { + if (timerdescr) free(timerdescr); + return false; + } if (import.WasChanged(Event)) { // ok we already changed this event! - if (!Description) return true; // prevent setting nothing to description + if (!Description) + { + if (timerdescr) free(timerdescr); + return true; // prevent setting nothing to description + } int len=strlen(Description); - if (!len) return true; // prevent setting nothing to description + if (!len) + { + if (timerdescr) free(timerdescr); + return true; // prevent setting nothing to description + } if (!strcasestr(Event->Description(),Description)) { // eit description changed -> set it - tsyslog("{%5i} %schanging descr of '%s'",Event->EventID(),timer ? "*" : "", + tsyslog("{%5i} %schanging descr of '%s'",Event->EventID(),timerdescr ? "*" : "", Event->Title()); + if (timerdescr) free(timerdescr); return false; } #ifdef VDRDEBUG - tsyslog("{%5i} %salready seen descr '%s'",Event->EventID(),timer ? "*" : "", + tsyslog("{%5i} %salready seen descr '%s'",Event->EventID(),timerdescr ? "*" : "", Event->Title()); #endif + if (timerdescr) free(timerdescr); return true; } - tsyslog("{%5i} %ssetting descr of '%s'",Event->EventID(),timer ? "*" : "", + tsyslog("{%5i} %ssetting descr of '%s'",Event->EventID(),timerdescr ? "*" : "", Event->Title()); + if (timerdescr) free(timerdescr); return false; } bool cEPGHandler::HandleEvent(cEvent* Event) { - cTimer *timer; + //cTimer *timer; + char *timerdescr; cEPGMapping *map; - if (!check4proc(Event,&timer,&map)) return false; + if (!check4proc(Event,&timerdescr,&map)) + { + if (timerdescr) free(timerdescr); + return false; + } int Flags=0; const char *ChannelID=strdup(*Event->ChannelID().ToString()); - if (!ChannelID) return false; + if (!ChannelID) + { + if (timerdescr) free(timerdescr); + return false; + } - if (timer) + if (timerdescr) { Flags=USE_SEASON; } @@ -704,16 +739,19 @@ bool cEPGHandler::HandleEvent(cEvent* Event) if (!epall) { free((void*)ChannelID); + if (timerdescr) free(timerdescr); return false; } - if (!timer) + if (!timerdescr) { free((void*)ChannelID); + if (timerdescr) free(timerdescr); return false; } if (db && sqlite3_errcode(db)!=SQLITE_OK) { free((void*)ChannelID); + if (timerdescr) free(timerdescr); return false; } @@ -726,11 +764,12 @@ bool cEPGHandler::HandleEvent(cEvent* Event) if (!xevent) { free((void*)ChannelID); + if (timerdescr) free(timerdescr); return false; } else { - tsyslog("{%5i} *adding '%s'/'%s' (%s)",Event->EventID(),xevent->Title(),xevent->ShortText(),*timer->ToDescr()); + tsyslog("{%5i} *adding '%s'/'%s' (%s)",Event->EventID(),xevent->Title(),xevent->ShortText(),timerdescr); } } else @@ -738,6 +777,7 @@ bool cEPGHandler::HandleEvent(cEvent* Event) source=sources->GetSource(xevent->Source()); } free((void*)ChannelID); + if (timerdescr) free(timerdescr); if (!source) { tsyslog("no source for %s",xevent->Source()); @@ -813,19 +853,29 @@ void cEPGTimer::Action() { if (!import.DBExists()) return; // no database? -> exit immediately +#if VDRVERSNUM<20301 cSchedulesLock schedulesLock(true,10); // wait 10ms for lock! const cSchedules *schedules = cSchedules::Schedules(schedulesLock); if (!schedules) return; if (Timers.BeingEdited()) return; Timers.IncBeingEdited(); +#endif sqlite3 *db=NULL; cEPGSource *source=sources->GetSource(EITSOURCE); bool useeptext=((epall & EPLIST_USE_STEXTITLE)==EPLIST_USE_STEXTITLE); int Flags=USE_SEASON; if (useeptext) Flags|=(USE_SHORTTEXT|OPT_SEASON_STEXTITLE); + +#if VDRVERSNUM<20301 for (cTimer *Timer = Timers.First(); Timer; Timer = Timers.Next(Timer)) +#else + cStateKey StateKey; + if (const cTimers *Timers=cTimers::GetTimersRead(StateKey)) + { + for (const cTimer *Timer=Timers->First(); Timer; Timer=Timers->Next(Timer)) +#endif { if (Timer->Recording()) continue; // to late ;) cEvent *event=(cEvent *) Timer->Event(); @@ -873,12 +923,19 @@ void cEPGTimer::Action() import.PutEvent(source,db,NULL,event,xevent,Flags); delete xevent; } - if (db) - { - import.Commit(source,db); - sqlite3_close(db); - } - Timers.DecBeingEdited(); +#if VDRVERSNUM>=20301 + StateKey.Remove(); +} +#endif +if (db) +{ + import.Commit(source,db); + sqlite3_close(db); +} + +#if VDRVERSNUM<20301 +Timers.DecBeingEdited(); +#endif } // ------------------------------------------------------------- @@ -969,9 +1026,11 @@ void cHouseKeeping::Action() if (!global->DBExists()) return; +#if APIVERSNUM<20301 cSchedulesLock schedulesLock(true,10); // wait 10ms for lock! const cSchedules *schedules = cSchedules::Schedules(schedulesLock); if (!schedules) return; +#endif sqlite3 *db=NULL; if (sqlite3_open_v2(global->EPGFile(),&db,SQLITE_OPEN_READWRITE,NULL)==SQLITE_OK) |