summaryrefslogtreecommitdiff
path: root/pages/ibox.ecpp
diff options
context:
space:
mode:
Diffstat (limited to 'pages/ibox.ecpp')
-rw-r--r--pages/ibox.ecpp177
1 files changed, 177 insertions, 0 deletions
diff --git a/pages/ibox.ecpp b/pages/ibox.ecpp
new file mode 100644
index 0000000..badd690
--- /dev/null
+++ b/pages/ibox.ecpp
@@ -0,0 +1,177 @@
+<%pre>
+#include <vdr/plugin.h>
+#include <vdr/config.h>
+#include <vdr/recording.h>
+#include <vdr/channels.h>
+#include <vdr/menu.h>
+#include <vdr/device.h>
+
+#include "exception.h"
+#include "tools.h"
+#include "epg_events.h"
+
+using namespace vdrlive;
+using namespace std;
+
+</%pre>
+<%args>
+ int update;
+</%args>
+<%cpp>
+ EpgEvents epgEvents;
+ string EMPTY_STR;
+ tChannelID prev_chan;
+ tChannelID next_chan;
+
+ reply.setContentType( "application/xml" );
+
+ if (cReplayControl::NowReplaying()) {
+ cThreadLock RecordingsLock(&Recordings);
+ cRecording *Recording = Recordings.GetByName(cReplayControl::NowReplaying());
+ if (Recording) {
+ const cRecordingInfo* info = Recording->Info();
+ if (info) {
+ EpgEventPtr epgEvent(new EpgEvent("recording",
+ Recording->Name(),
+ info->Title() ? info->Title() : Recording->Name(),
+ info->ShortText() ? info->ShortText() : "",
+ info->Description() ? info->Description() : "",
+ Recording->start,
+ Recording->start));
+ epgEvents.push_back(epgEvent);
+ }
+ }
+ }
+ else {
+ string CHANNEL_STR("channel");
+ ReadLock channelsLock( Channels );
+
+ if (cDevice::CurrentChannel()) {
+ cChannel* Channel = Channels.GetByNumber(cDevice::CurrentChannel());
+
+ cChannel* tmp = Channels.GetByNumber(Channels.GetPrevNormal(cDevice::CurrentChannel()));
+ if (tmp)
+ prev_chan = tmp->GetChannelID();
+ tmp = Channels.GetByNumber(Channels.GetNextNormal(cDevice::CurrentChannel()));
+ if (tmp)
+ next_chan = tmp->GetChannelID();
+
+ string chanName(Channel->Name());
+ cSchedulesLock schedulesLock;
+ const cSchedules* Schedules = cSchedules::Schedules(schedulesLock);
+ const cSchedule *Schedule = Schedules->GetSchedule(Channel);
+
+ if (Schedule) {
+ const cEvent *Event = Schedule->GetPresentEvent();
+ if (Event) {
+ EpgEventPtr epgEvent(new EpgEvent(CHANNEL_STR,
+ Event,
+ Channel->Name()));
+ epgEvents.push_back(epgEvent);
+ }
+ else {
+ string noInfo(tr("no epg info for current event!"));
+ EpgEventPtr epgEvent(new EpgEvent(CHANNEL_STR,
+ chanName,
+ noInfo,
+ EMPTY_STR, EMPTY_STR,
+ time(0),
+ time(0)));
+ epgEvents.push_back(epgEvent);
+ }
+ }
+ else {
+ string noInfo(tr("no epg info for current channel!"));
+ EpgEventPtr epgEvent(new EpgEvent(CHANNEL_STR,
+ Channel->Name(),
+ noInfo,
+ EMPTY_STR, EMPTY_STR,
+ time(0),
+ time(0)));
+ epgEvents.push_back(epgEvent);
+ }
+ }
+ else {
+ string chanName(tr("no current channel!"));
+ EpgEventPtr epgEvent(new EpgEvent(CHANNEL_STR,
+ chanName,
+ chanName,
+ EMPTY_STR, EMPTY_STR,
+ time(0),
+ time(0)));
+ epgEvents.push_back(epgEvent);
+ }
+ }
+ if (epgEvents.size() == 0) {
+ string ERROR_STR("error");
+ string noInfo(tr("error retrieving status info!"));
+ string chanName(tr("no current channel!"));
+ EpgEventPtr epgEvent(new EpgEvent(ERROR_STR,
+ chanName,
+ noInfo,
+ EMPTY_STR, EMPTY_STR,
+ time(0),
+ time(0)));
+ epgEvents.push_back(epgEvent);
+ }
+ for (vector<EpgEventPtr>::iterator i = epgEvents.begin(); i != epgEvents.end(); ++i) {
+ EpgEventPtr epg = *i;
+ if (prev_chan.Valid() && next_chan.Valid())
+ {
+</%cpp>
+<& xmlresponse update=(update) type=(epg->Id()) caption=(epg->Caption()) currentTime=(epg->CurrentTime(tr("%I:%M:%S %p"))) duration=(epg->StartTime(tr("%I:%M %p")) + string(" - ") + epg->EndTime(tr("%I:%M %p"))) title=(epg->Title()) elapsed=(epg->Elapsed()) prev_chan=(prev_chan) next_chan=(next_chan) &>
+<%cpp>
+ }
+ else if (prev_chan.Valid()) {
+</%cpp>
+<& xmlresponse update=(update) type=(epg->Id()) caption=(epg->Caption()) currentTime=(epg->CurrentTime(tr("%I:%M:%S %p"))) duration=(epg->StartTime(tr("%I:%M %p")) + string(" - ") + epg->EndTime(tr("%I:%M %p"))) title=(epg->Title()) elapsed=(epg->Elapsed()) prev_chan=(prev_chan) &>
+<%cpp>
+ }
+ else if (next_chan.Valid()) {
+</%cpp>
+<& xmlresponse update=(update) type=(epg->Id()) caption=(epg->Caption()) currentTime=(epg->CurrentTime(tr("%I:%M:%S %p"))) duration=(epg->StartTime(tr("%I:%M %p")) + string(" - ") + epg->EndTime(tr("%I:%M %p"))) title=(epg->Title()) elapsed=(epg->Elapsed()) next_chan=(next_chan) &>
+<%cpp>
+ }
+ else {
+</%cpp>
+<& xmlresponse update=(update) type=(epg->Id()) caption=(epg->Caption()) currentTime=(epg->CurrentTime(tr("%I:%M:%S %p"))) duration=(epg->StartTime(tr("%I:%M %p")) + string(" - ") + epg->EndTime(tr("%I:%M %p"))) title=(epg->Title()) elapsed=(epg->Elapsed()) &>
+<%cpp>
+ }
+ break;
+ }
+</%cpp>
+
+<%def xmlresponse>
+<%args>
+ int update;
+ string type;
+ string currentTime;
+ string caption;
+ string title;
+ string duration;
+ int elapsed;
+ string prev_chan;
+ string next_chan;
+</%args>
+<?xml version="1.0"?>
+<service>
+ <request name="ibox">
+ <param name="update"><$ update $></param>
+ </request>
+ <response>1</response>
+ <error></error>
+ <values>
+ <update><$ update $></update>
+ <epginfo>
+ <type><$ type $></type>
+ <caption><$ caption $></caption>
+ <timenow><$ currentTime $></timenow>
+ <name><$ title $></name>
+ <duration><$ duration $></duration>
+ <elapsed><$ elapsed $></elapsed>
+ <nextchan><$ next_chan $></nextchan>
+ <prevchan><$ prev_chan $></prevchan>
+ </epginfo>
+ </values>
+</service>
+</%def>