From 46b309e01e60898de5b9a216e43bcf7338663803 Mon Sep 17 00:00:00 2001 From: Chris Tallon Date: Sat, 4 May 2013 18:03:30 +0100 Subject: [PATCH] Get channel schedule event information call --- handler.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++ handler.h | 1 + jsonserver.c | 2 +- 3 files changed, 79 insertions(+), 1 deletion(-) diff --git a/handler.c b/handler.c index 2078805..dcbb965 100644 --- a/handler.c +++ b/handler.c @@ -74,6 +74,7 @@ int jsonserver_request_handler(struct mg_connection *conn) 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, "getscheduleevent")) success = jsonserver_getscheduleevent(js, postData); else if (!strcmp(wvrequest, "timerlist")) success = jsonserver_timerlist(js); else if (!strcmp(wvrequest, "timerdel")) success = jsonserver_timerdel(js, postData); else if (!strcmp(wvrequest, "timerset")) success = jsonserver_timerset(js, postData); @@ -691,6 +692,82 @@ bool jsonserver_channelschedule(Json::Value& js, const char* postData) return true; } +bool jsonserver_getscheduleevent(Json::Value& js, const char* postData) +{ + Log* log = Log::getInstance(); + log->log("JSONServer", Log::DEBUG, "getscheduleevent '%s'", postData); + + char sChannelNumber[15]; int mgv1 = mg_get_var(postData, strlen(postData), "channelnumber", sChannelNumber, 15); + char sEventID[15]; int mgv2 = mg_get_var(postData, strlen(postData), "eventid", sEventID, 15); + + if ( (mgv1 == -1) || (mgv2 == -1) ) + { + log->log("JSONServer", Log::ERR, "request mgvs: %i %i", mgv1, mgv2); + js["Result"] = false; + js["Error"] = "Bad request parameters"; + return true; + } + + int channelNumber = atoi(sChannelNumber); + int eventID = atoi(sEventID); + + cChannel* channel = NULL; + for (channel = Channels.First(); channel; channel = Channels.Next(channel)) + { + if (channel->GroupSep()) continue; + if (channel->Number() == channelNumber) break; + } + + if (!channel) + { + log->log("JSONServer", Log::ERR, "Could not find requested channel: %i", channelNumber); + js["Result"] = false; + js["Error"] = "Could not find channel"; + return true; + } + + cSchedulesLock MutexLock; + const cSchedules *Schedules = cSchedules::Schedules(MutexLock); + if (!Schedules) + { + log->log("JSONServer", Log::ERR, "Could not find requested channel: %i", channelNumber); + js["Result"] = false; + js["Error"] = "Internal schedules error (1)"; + return true; + } + const cSchedule *Schedule = Schedules->GetSchedule(channel->GetChannelID()); + if (!Schedule) + { + log->log("JSONServer", Log::ERR, "Could not find requested channel: %i", channelNumber); + js["Result"] = false; + js["Error"] = "Internal schedules error (2)"; + return true; + } + + cEvent* event = Schedule->GetEvent(eventID); + if (!event) + { + log->log("JSONServer", Log::ERR, "Could not find requested event: %i", eventID); + js["Result"] = false; + js["Error"] = "Internal schedules error (3)"; + return true; + } + + Json::Value oneEvent; + oneEvent["ID"] = event->EventID(); + oneEvent["Time"] = (Json::UInt)event->StartTime(); + oneEvent["Duration"] = event->Duration(); + oneEvent["Title"] = event->Title() ? event->Title() : ""; + oneEvent["ShortText"] = event->ShortText() ? event->ShortText() : ""; + oneEvent["Description"] = event->Description() ? event->Description() : ""; + oneEvent["HasTimer"] = event->HasTimer(); + oneEvent["RunningStatus"] = event->RunningStatus(); + + js["Result"] = true; + js["Event"] = oneEvent; + return true; +} + bool jsonserver_timerlist(Json::Value& js) { Log* log = Log::getInstance(); diff --git a/handler.h b/handler.h index 6cdd1ed..c54d84c 100644 --- a/handler.h +++ b/handler.h @@ -13,6 +13,7 @@ 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_getscheduleevent(Json::Value& js, const char* postData); bool jsonserver_timerlist(Json::Value& js); bool jsonserver_timerdel(Json::Value& js, const char* postData); bool jsonserver_timerset(Json::Value& js, const char* postData); diff --git a/jsonserver.c b/jsonserver.c index cd4013a..9ee9caf 100644 --- a/jsonserver.c +++ b/jsonserver.c @@ -100,7 +100,7 @@ bool cPluginJsonserver::Start(void) char* configFile; asprintf(&configFile, "%s/jsonserver.conf", configDir); - dsyslog(configFile); + dsyslog("%s", configFile); log = new Log(); -- 2.39.2