From f1c00d2081871d67ad7cf210405ba3ab764c6ddf Mon Sep 17 00:00:00 2001 From: Chris Tallon Date: Mon, 8 Apr 2013 18:54:54 +0100 Subject: [PATCH] Stop a recording timer from a recording point of view --- handler.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ handler.h | 1 + 2 files changed, 60 insertions(+) diff --git a/handler.c b/handler.c index 9d955fc..c3c1a20 100644 --- a/handler.c +++ b/handler.c @@ -71,6 +71,7 @@ int jsonserver_request_handler(struct mg_connection *conn) else if (!strcmp(wvrequest, "recinfo")) success = jsonserver_recinfo(js, postData); else if (!strcmp(wvrequest, "recdel")) success = jsonserver_recdel(js, postData); else if (!strcmp(wvrequest, "recmove")) success = jsonserver_recmove(js, postData); + else if (!strcmp(wvrequest, "recstop")) success = jsonserver_recstop(js, postData); else if (!strcmp(wvrequest, "channellist")) success = jsonserver_channellist(js); else if (!strcmp(wvrequest, "channelschedule")) success = jsonserver_channelschedule(js, postData); else if (!strcmp(wvrequest, "timerlist")) success = jsonserver_timerlist(js); @@ -241,6 +242,64 @@ bool jsonserver_recinfo(Json::Value& js, const char* postData) return true; } +bool jsonserver_recstop(Json::Value& js, const char* postData) +{ + Log* log = Log::getInstance(); + log->log("JSONServer", Log::DEBUG, "recstop"); + + char reqfilename[1000]; + int mgv1 = mg_get_var(postData, strlen(postData), "filename", reqfilename, 1000); + if (mgv1 == -1) + { + log->log("JSONServer", Log::ERR, "Could not decode filename"); + js["Result"] = false; + js["Error"] = "Could not decode filename"; + return true; + } + + log->log("JSONServer", Log::DEBUG, "%s", reqfilename); + + cRecordings Recordings; + Recordings.Load(); // probably have to do this + cRecording *recording = Recordings.GetByName(reqfilename); + + if (!recording) + { + log->log("JSONServer", Log::ERR, "recstop found no recording"); + js["Result"] = false; + return true; + } + + cRecordControl *rc = cRecordControls::GetRecordControl(recording->FileName()); + if (!rc) + { + log->log("JSONServer", Log::ERR, "recstop - not currently recording"); + js["Result"] = false; + return true; + } + + if (Timers.BeingEdited()) + { + log->log("JSONServer", Log::ERR, "recstop - timers being edited elsewhere"); + js["Result"] = false; + return true; + } + + cTimer* timer = rc->Timer(); + if (!timer) + { + log->log("JSONServer", Log::ERR, "recstop - timer not found"); + js["Result"] = false; + return true; + } + + timer->ClrFlags(tfActive); + Timers.SetModified(); + + js["Result"] = true; + return true; +} + bool jsonserver_recdel(Json::Value& js, const char* postData) { Log* log = Log::getInstance(); diff --git a/handler.h b/handler.h index e58993a..6cdd1ed 100644 --- a/handler.h +++ b/handler.h @@ -10,6 +10,7 @@ bool jsonserver_reclist(Json::Value& js); bool jsonserver_recinfo(Json::Value& js, const char* postData); bool jsonserver_recdel(Json::Value& js, const char* postData); bool jsonserver_recmove(Json::Value& js, const char* postData); +bool jsonserver_recstop(Json::Value& js, const char* postData); bool jsonserver_channellist(Json::Value& js); bool jsonserver_channelschedule(Json::Value& js, const char* postData); bool jsonserver_timerlist(Json::Value& js); -- 2.39.2