summaryrefslogtreecommitdiff
path: root/responsememblk.c
diff options
context:
space:
mode:
authorthlo <smarttv640@gmail.com>2013-07-25 20:37:31 +0200
committerthlo <smarttv640@gmail.com>2013-07-25 20:37:31 +0200
commitfc96324fc266bef30027332d47f34dd09a2f3b66 (patch)
treefa0c0a115b560eabc7d1bde50432261b3bc1717a /responsememblk.c
parent66d5e7f95f2f1c3c51bd73f86466a8bd2f16fbc7 (diff)
downloadvdr-plugin-smarttvweb-fc96324fc266bef30027332d47f34dd09a2f3b66.tar.gz
vdr-plugin-smarttvweb-fc96324fc266bef30027332d47f34dd09a2f3b66.tar.bz2
Allow HTTP access to Video Dir. LocalTime fix. Adding Timers. Cleanups. Update is isServing to prevent shutdown.
Diffstat (limited to 'responsememblk.c')
-rw-r--r--responsememblk.c81
1 files changed, 59 insertions, 22 deletions
diff --git a/responsememblk.c b/responsememblk.c
index cb90599..a2c8636 100644
--- a/responsememblk.c
+++ b/responsememblk.c
@@ -744,6 +744,7 @@ void cResponseMemBlk::writeMPD(double duration, int bitrate, float seg_dur, int
sendHeaders(200, "OK", NULL, "application/x-mpegURL", mResponseMessage->size(), -1);
}
+
void cResponseMemBlk::receiveAddTimerReq() {
if (isHeadRequest())
return ;
@@ -754,6 +755,7 @@ void cResponseMemBlk::receiveAddTimerReq() {
mRequest->parseQueryLine(&avps);
//guid=<guid>&evid=<event_id>
+ // evid is optional. If not present, the plugin looks up the current event id for the channel
// later
//guid=<guid>&wd=<weekdays>&dy=<day>&st=<start>&sp=<stop>&f=<url_enc_filename>
@@ -825,20 +827,15 @@ void cResponseMemBlk::receiveAddTimerReq() {
return;
}
- if (ev_id == 0) {
- // no event id -> not implemented
- sendError(501, "Not Implemented", NULL, "001 Not Implemented. evid shall be present.");
- return ;
- }
+ const cEvent *ev = NULL;
- // have an event id
cSchedulesLock * lock = new cSchedulesLock(false, 500);
const cSchedules *schedules = cSchedules::Schedules(*lock);
-
+
const cSchedule *schedule = schedules->GetSchedule(chan_id);
if (schedule == NULL) {
*(mLog->log())<< DEBUGPREFIX
- << " ERROR: Schedule is zero for guid= " << guid
+ << "ERROR: Schedule is zero for guid= " << guid
<< endl;
delete mResponseMessage;
delete lock;
@@ -846,22 +843,64 @@ void cResponseMemBlk::receiveAddTimerReq() {
sendError(500, "Internal Server Error", NULL, "001 Schedule is zero.");
return;
}
+
+ if (ev_id == 0) {
+ // no event id: Use the current running event
+
+ time_t now = time(NULL);
+ for(cEvent* e = schedule->Events()->First(); e; e = schedule->Events()->Next(e)) {
+ if ( (e->StartTime() <= now) && (e->EndTime() > now)) {
+ ev = e;
+
+ } else if (e->StartTime() > now + 3600) {
+ break;
+ }
+ }
+
+ if (ev == NULL) {
+ *(mLog->log())<< DEBUGPREFIX
+ << "ERROR: Event is zero for guid= " << guid
+ << endl;
+ delete mResponseMessage;
+ delete lock;
+
+ mResponseMessage = NULL;
+ sendError(500, "Internal Server Error", NULL, "002 Event is zero.");
+ return;
+ }
+ }
+
+ else {
+ // have an event id
- // time_t now = time(NULL);
- const cEvent *ev = schedule->GetEvent(ev_id);
-
- if (ev == NULL) {
+ ev = schedule->GetEvent(ev_id);
+
+ if (ev == NULL) {
+ *(mLog->log())<< DEBUGPREFIX
+ << " ERROR: Event not found for guid= " << guid
+ << " and ev_id= " << ev_id
+ << endl;
+ delete mResponseMessage;
+ delete lock;
+ mResponseMessage = NULL;
+ sendError(500, "Internal Server Error", NULL, "002 Event is zero.");
+ return;
+ }
+ }
+
+ if (Timers.GetMatch(ev) != NULL) {
*(mLog->log())<< DEBUGPREFIX
- << "ERROR: Event not found for guid= " << guid
+ << " WARING: Timer already created guid= " << guid
<< " and ev_id= " << ev_id
<< endl;
- delete mResponseMessage;
- delete lock;
- mResponseMessage = NULL;
- sendError(500, "Internal Server Error", NULL, "002 Event is zero.");
- return;
+
+ delete mResponseMessage;
+ delete lock;
+ mResponseMessage = NULL;
+ sendError(400, "Bad Request", NULL, "014 Timer already defined.");
+ return;
}
-
+
// now, create a new timer
if (ev->Title() == NULL) {
*(mLog->log())<< DEBUGPREFIX
@@ -910,9 +949,6 @@ void cResponseMemBlk::receiveAddTimerReq() {
sendHeaders(200, "OK", NULL, "application/xml", mResponseMessage->size(), -1);
return;
-
-
-
}
void cResponseMemBlk::receiveDelTimerReq() {
@@ -2025,6 +2061,7 @@ int cResponseMemBlk::sendRecordingsXml(struct stat *statbuf) {
<< " Active Timer: " << ti->File()
<< " Start= " << ti->StartTime()
<< " Duration= " << (ti->StopTime() - ti->StartTime())
+ << " Now= " << now
<< endl;
act_rec.push_back(sTimerEntry(ti->File(), ti->StartTime(), (ti->StopTime() - ti->StartTime())));
}