diff options
author | louis <louis.braun@gmx.de> | 2013-07-20 13:46:26 +0200 |
---|---|---|
committer | louis <louis.braun@gmx.de> | 2013-07-20 13:46:26 +0200 |
commit | 34f8460e254e2eb7fae1aafcf7c94ca2c3c38b02 (patch) | |
tree | 4de3005a27c4f6e584c9c1d2bdff2de97ff65911 /recmanager.c | |
parent | 9f351151edaf8195446b591ab9ac1d43f038c7ca (diff) | |
download | vdr-plugin-tvguide-34f8460e254e2eb7fae1aafcf7c94ca2c3c38b02.tar.gz vdr-plugin-tvguide-34f8460e254e2eb7fae1aafcf7c94ca2c3c38b02.tar.bz2 |
Added remotetimers support
Diffstat (limited to 'recmanager.c')
-rw-r--r-- | recmanager.c | 139 |
1 files changed, 129 insertions, 10 deletions
diff --git a/recmanager.c b/recmanager.c index b1f21fb..59eddcb 100644 --- a/recmanager.c +++ b/recmanager.c @@ -30,33 +30,120 @@ void cRecManager::SetEPGSearchPlugin(void) { } } +bool cRecManager::RefreshRemoteTimers(void) { + cString errorMsg; + if (!pRemoteTimers->Service("RemoteTimers::RefreshTimers-v1.0", &errorMsg)) { + esyslog("tvguide: %s", *errorMsg); + return false; + } + return true; +} + +bool cRecManager::CheckEventForTimer(const cEvent *event) { + bool hasTimer = false; + + if (tvguideConfig.useRemoteTimers && pRemoteTimers) { + RemoteTimers_GetMatch_v1_0 rtMatch; + rtMatch.event = event; + pRemoteTimers->Service("RemoteTimers::GetMatch-v1.0", &rtMatch); + if (rtMatch.timerMatch == tmFull) + hasTimer = true; + } else + hasTimer = event->HasTimer(); + + return hasTimer; +} + +cTimer *cRecManager::GetTimerForEvent(const cEvent *event) { + cTimer *timer = NULL; + if (tvguideConfig.useRemoteTimers && pRemoteTimers) { + RemoteTimers_GetMatch_v1_0 rtMatch; + rtMatch.event = event; + pRemoteTimers->Service("RemoteTimers::GetMatch-v1.0", &rtMatch); + timer = rtMatch.timer; + } else + timer = Timers.GetMatch(event); + return timer; +} + cTimer *cRecManager::createTimer(const cEvent *event, std::string path) { + cTimer *timer = NULL; + if (tvguideConfig.useRemoteTimers && pRemoteTimers) { + timer = createRemoteTimer(event, path); + } else { + timer = createLocalTimer(event, path); + } + return timer; +} + +cTimer *cRecManager::createLocalTimer(const cEvent *event, std::string path) { cTimer *timer = new cTimer(event); - Timers.Add(timer); + cTimer *t = Timers.GetTimer(timer); + if (t) { + t->OnOff(); + t->SetEventFromSchedule(); + delete timer; + timer = t; + isyslog("timer %s reactivated", *t->ToDescr()); + } else { + Timers.Add(timer); + isyslog("timer %s added (active)", *timer->ToDescr()); + } + SetTimerPath(timer, path); Timers.SetModified(); + return timer; +} + +cTimer *cRecManager::createRemoteTimer(const cEvent *event, std::string path) { + cTimer *t = new cTimer(event); + SetTimerPath(t, path); + RemoteTimers_Timer_v1_0 rt; + rt.timer = t; + pRemoteTimers->Service("RemoteTimers::GetTimer-v1.0", &rt.timer); + if (rt.timer) { + rt.timer->OnOff(); + if (!pRemoteTimers->Service("RemoteTimers::ModTimer-v1.0", &rt)) + rt.timer = NULL; + } else { + rt.timer = t; + if (!pRemoteTimers->Service("RemoteTimers::NewTimer-v1.0", &rt)) + isyslog("%s", *rt.errorMsg); + } + RefreshRemoteTimers(); + return rt.timer; +} + +void cRecManager::SetTimerPath(cTimer *timer, std::string path) { if (path.size() > 0) { std::replace(path.begin(), path.end(), '/', '~'); cString newFileName = cString::sprintf("%s~%s", path.c_str(), timer->File()); timer->SetFile(*newFileName); } - isyslog("timer %s added (active)", *timer->ToDescr()); - return timer; } -void cRecManager::DeleteTimer(const cEvent *event) { - cTimer *t = Timers.GetMatch(event); +void cRecManager::DeleteTimer(int timerID) { + cTimer *t = Timers.Get(timerID); if (!t) return; DeleteTimer(t); } -void cRecManager::DeleteTimer(int timerID) { - cTimer *t = Timers.Get(timerID); +void cRecManager::DeleteTimer(const cEvent *event) { + if (tvguideConfig.useRemoteTimers && pRemoteTimers) { + DeleteRemoteTimer(event); + } else { + DeleteLocalTimer(event); + } +} + +void cRecManager::DeleteLocalTimer(const cEvent *event) { + cTimer *t = Timers.GetMatch(event); if (!t) return; DeleteTimer(t); } + void cRecManager::DeleteTimer(cTimer *timer) { if (timer->Recording()) { timer->Skip(); @@ -67,6 +154,20 @@ void cRecManager::DeleteTimer(cTimer *timer) { Timers.SetModified(); } +void cRecManager::DeleteRemoteTimer(const cEvent *event) { + RemoteTimers_GetMatch_v1_0 rtMatch; + rtMatch.event = event; + pRemoteTimers->Service("RemoteTimers::GetMatch-v1.0", &rtMatch); + if (rtMatch.timer) { + RemoteTimers_Timer_v1_0 rt; + rt.timer = rtMatch.timer; + isyslog("remotetimer %s deleted", *rt.timer->ToDescr()); + if (!pRemoteTimers->Service("RemoteTimers::DelTimer-v1.0", &rt)) + isyslog("remotetimer error"); + RefreshRemoteTimers(); + } +} + void cRecManager::SaveTimer(cTimer *timer, cRecMenu *menu) { if (!timer) return; @@ -90,7 +191,15 @@ void cRecManager::SaveTimer(cTimer *timer, cRecMenu *menu) { timer->SetFlags(tfActive); timer->SetEventFromSchedule(); - Timers.SetModified(); + if (tvguideConfig.useRemoteTimers && pRemoteTimers) { + RemoteTimers_Timer_v1_0 rt; + rt.timer = timer; + if (!pRemoteTimers->Service("RemoteTimers::ModTimer-v1.0", &rt)) + rt.timer = NULL; + RefreshRemoteTimers(); + } else { + Timers.SetModified(); + } } bool cRecManager::IsRecorded(const cEvent *event) { @@ -227,8 +336,18 @@ cTimer *cRecManager::CreateSeriesTimer(cRecMenu *menu, std::string path) { else seriesTimer->SetFlags(tfNone); seriesTimer->SetEventFromSchedule(); - Timers.Add(seriesTimer); - Timers.SetModified(); + + if (tvguideConfig.useRemoteTimers && pRemoteTimers) { + RemoteTimers_Timer_v1_0 rt; + rt.timer = seriesTimer; + if (!pRemoteTimers->Service("RemoteTimers::NewTimer-v1.0", &rt)) + isyslog("%s", *rt.errorMsg); + RefreshRemoteTimers(); + seriesTimer = NULL; + } else { + Timers.Add(seriesTimer); + Timers.SetModified(); + } return seriesTimer; } |