diff options
author | kamel5 <vdr.kamel5 (at) gmx (dot) net> | 2020-02-12 13:14:17 +0100 |
---|---|---|
committer | kamel5 <vdr.kamel5 (at) gmx (dot) net> | 2020-02-17 15:51:51 +0100 |
commit | 5d9ed1439a8e46becf90fbd00189d655cb5efcfb (patch) | |
tree | 17ca0fa6a7822bc21745662672c693025ebe3f1f /recmanager.c | |
parent | 66a0c15aea3a37967310abfd3b34629808d02f84 (diff) | |
download | vdr-plugin-tvguide-5d9ed1439a8e46becf90fbd00189d655cb5efcfb.tar.gz vdr-plugin-tvguide-5d9ed1439a8e46becf90fbd00189d655cb5efcfb.tar.bz2 |
Fixed a remote timer problem
Diffstat (limited to 'recmanager.c')
-rw-r--r-- | recmanager.c | 67 |
1 files changed, 46 insertions, 21 deletions
diff --git a/recmanager.c b/recmanager.c index 4ecdb66..18e38e9 100644 --- a/recmanager.c +++ b/recmanager.c @@ -96,10 +96,11 @@ cTimer *cRecManager::createTimer(const cEvent *event, std::string path) { cTimer *cRecManager::createLocalTimer(const cEvent *event, std::string path) { cTimer *timer = new cTimer(event); #if VDRVERSNUM >= 20301 - if (Setup.SVDRPPeering && *Setup.SVDRPDefaultHost) - ((cTimer*)timer)->SetRemote(Setup.SVDRPDefaultHost); LOCK_TIMERS_WRITE; cTimers* timers = Timers; + timers->SetExplicitModify(); + if (Setup.SVDRPPeering && *Setup.SVDRPDefaultHost) + timer->SetRemote(Setup.SVDRPDefaultHost); #else cTimers* timers = &Timers; #endif @@ -115,11 +116,20 @@ cTimer *cRecManager::createLocalTimer(const cEvent *event, std::string path) { timer = t; isyslog("timer %s reactivated", *t->ToDescr()); } else { + SetTimerPath(timer, event, path); timers->Add(timer); + timers->SetModified(); +#if VDRVERSNUM >= 20301 + if (!HandleRemoteTimerModifications(timer)) { + timers->Del(timer); + esyslog(tr("tvguide: RemoteTimerModifications failed")); + } else { + isyslog("timer %s added (active)", *timer->ToDescr()); + } +#else isyslog("timer %s added (active)", *timer->ToDescr()); +#endif } - SetTimerPath(timer, event, path); - timers->SetModified(); return timer; } @@ -204,6 +214,12 @@ void cRecManager::DeleteTimer(const cTimer *timer) { #if VDRVERSNUM >= 20301 LOCK_TIMERS_WRITE; cTimers* timers = Timers; + if (timer && timer->Remote() && !timer->Recording()) { + if (HandleRemoteTimerModifications(NULL, (cTimer*)timer)) { + timers->Del((cTimer*)timer); + } + timers->SetModified(); + } cTimer* t = timers->GetTimer(timer); #else cTimers* timers = &Timers; @@ -238,24 +254,33 @@ void cRecManager::DeleteRemoteTimer(const cEvent *event) { } } -void cRecManager::SaveTimer(const cTimer *t, cTimer newTimerSettings) { +void cRecManager::SaveTimer(const cTimer *t, cTimer *newTimerSettings) { if (!t) return; #if VDRVERSNUM >= 20301 LOCK_TIMERS_WRITE; - cTimer *timer = Timers->GetTimer(t); + cTimers* timers = Timers; + timers->SetExplicitModify(); + if (t && t->Remote()) { + if (!HandleRemoteTimerModifications(newTimerSettings, (cTimer *)t)) { + esyslog(tr("tvguide: RemoteTimerModifications failed")); + } + } #else - cTimer *timer = Timers.GetTimer((cTimer*)t); + cTimers* timers = &Timers; #endif - - bool active = newTimerSettings.HasFlags(tfActive); - int prio = newTimerSettings.Priority(); - int lifetime = newTimerSettings.Lifetime(); - time_t day = newTimerSettings.Day(); - int start = newTimerSettings.Start(); - int stop = newTimerSettings.Stop(); - std::string fileName = newTimerSettings.File(); + cTimer *timer = timers->GetTimer(t); + if (!timer) { + return; + } + bool active = newTimerSettings->HasFlags(tfActive); + int prio = newTimerSettings->Priority(); + int lifetime = newTimerSettings->Lifetime(); + time_t day = newTimerSettings->Day(); + int start = newTimerSettings->Start(); + int stop = newTimerSettings->Stop(); + std::string fileName = newTimerSettings->File(); timer->SetDay(day); timer->SetStart(start); @@ -264,10 +289,10 @@ void cRecManager::SaveTimer(const cTimer *t, cTimer newTimerSettings) { timer->SetLifetime(lifetime); timer->SetFile(fileName.c_str()); - if (timer->HasFlags(tfActive) && !active) - timer->ClrFlags(tfActive); - else if (!timer->HasFlags(tfActive) && active) - timer->SetFlags(tfActive); + if (active) + timer->SetFlags(tfActive); + else + timer->ClrFlags(tfActive); #if VDRVERSNUM < 20300 timer->SetEventFromSchedule(); @@ -280,9 +305,9 @@ void cRecManager::SaveTimer(const cTimer *t, cTimer newTimerSettings) { RefreshRemoteTimers(); } else { #if VDRVERSNUM >= 20301 - Timers->SetModified(); + timers->SetModified(); #else - Timers.SetModified(); + timers.SetModified(); #endif } } |