summaryrefslogtreecommitdiff
path: root/recmanager.c
diff options
context:
space:
mode:
authorlouis <louis.braun@gmx.de>2013-07-20 13:46:26 +0200
committerlouis <louis.braun@gmx.de>2013-07-20 13:46:26 +0200
commit34f8460e254e2eb7fae1aafcf7c94ca2c3c38b02 (patch)
tree4de3005a27c4f6e584c9c1d2bdff2de97ff65911 /recmanager.c
parent9f351151edaf8195446b591ab9ac1d43f038c7ca (diff)
downloadvdr-plugin-tvguide-34f8460e254e2eb7fae1aafcf7c94ca2c3c38b02.tar.gz
vdr-plugin-tvguide-34f8460e254e2eb7fae1aafcf7c94ca2c3c38b02.tar.bz2
Added remotetimers support
Diffstat (limited to 'recmanager.c')
-rw-r--r--recmanager.c139
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;
}