summaryrefslogtreecommitdiff
path: root/zappilotosd.c
diff options
context:
space:
mode:
Diffstat (limited to 'zappilotosd.c')
-rw-r--r--zappilotosd.c164
1 files changed, 149 insertions, 15 deletions
diff --git a/zappilotosd.c b/zappilotosd.c
index 20ccc9a..eb5036a 100644
--- a/zappilotosd.c
+++ b/zappilotosd.c
@@ -13,6 +13,19 @@
extern int PilotChannelNumber;
+// Data structure for service "Epgsearch-switchtimer-v1.0"
+struct Epgsearch_switchtimer_v1_0
+{
+ // in
+ const cEvent* event;
+ int mode; // mode (0=query existance, 1=add/modify, 2=delete)
+ // in/out
+ int switchMinsBefore;
+ int announceOnly;
+ // out
+ bool success; // result
+};
+
cZappilotOsd::cZappilotOsd(void):cOsdObject(true)
{
osd = cOsdProvider::NewOsd(0, 0);
@@ -79,6 +92,77 @@ static int CompareEventTime(const void *p1, const void *p2)
}
+void cZappilotOsd::AddDelSwitchTimer(const cEvent *event)
+{
+ bool SwitchTimerExits = false;
+ if (config.pEPGSearch && event)
+ {
+ Epgsearch_switchtimer_v1_0* serviceData = new Epgsearch_switchtimer_v1_0;
+ serviceData->event = event;
+ serviceData->mode = 0;
+ if (config.pEPGSearch->Service("Epgsearch-switchtimer-v1.0", serviceData))
+ {
+ SwitchTimerExits=serviceData->success;
+ delete serviceData;
+ }
+ else
+ {
+ esyslog("[ZapPilot] EPGSearch does not support Epgsearch-switchtimer-v1.0 service!");
+ delete serviceData;
+
+ }
+ if (!SwitchTimerExits)
+ {
+ serviceData = new Epgsearch_switchtimer_v1_0;
+ serviceData->event = event;
+ serviceData->mode = 1;
+ serviceData->switchMinsBefore = config.switchminsbefore;
+ serviceData->announceOnly = 0;
+ if (config.pEPGSearch->Service("Epgsearch-switchtimer-v1.0", serviceData))
+ {
+ if (serviceData->success)
+ {
+ Skins.Message(mtInfo, tr("Switch timer added!"));
+ delete serviceData;
+ }
+ }
+ else
+ {
+ esyslog("[ZapPilot] EPGSearch does not support Epgsearch-switchtimer-v1.0 service!");
+ delete serviceData;
+ return;
+ }
+ }
+ else
+ {
+ serviceData = new Epgsearch_switchtimer_v1_0;
+ serviceData->event = event;
+ serviceData->mode = 2;
+ serviceData->switchMinsBefore = 1;
+ serviceData->announceOnly = false;
+ if (config.pEPGSearch->Service("Epgsearch-switchtimer-v1.0", serviceData))
+ {
+ if (serviceData->success)
+ {
+ Skins.Message(mtInfo, tr("Switch timer deleted!"));
+ delete serviceData;
+ }
+ }
+ else
+ {
+ esyslog("[ZapPilot] EPGSearch does not support Epgsearch-switchtimer-v1.0 service!");
+ delete serviceData;
+ return;
+ }
+ }
+ }
+ else
+ {
+ esyslog("[ZapPilot] EPGSearch does not exist; switch timer is not possible!");
+ }
+}
+
+
void cZappilotOsd::UpdateEPGInfo(int NowNextPrev)
{
// Start to reset all previous info
@@ -238,12 +322,13 @@ eOSState cZappilotOsd::ProcessKey(eKeys Key)
return osEnd;
}
case k0:
- if (number == 0)
+ {
+ if (number == 0 && config.switchtimer)
{
- // keep the "Toggle channels" function working
- //cRemote::Put(Key);
+ AddDelSwitchTimer(Present);
return osContinue;
}
+ }
case k1 ... k9:
if (number >= 0)
{
@@ -430,21 +515,70 @@ eOSState cZappilotOsd::ProcessKey(eKeys Key)
case kYellow|k_Repeat:
case kYellow:
{
- // Scroll back in time
- UpdateEPGInfo(3);
- DrawMenu(0,0);
- return osContinue;
+ if (!config.fastbrowse)
+ {
+ // Scroll back in time
+ UpdateEPGInfo(3);
+ DrawMenu(0,0);
+ return osContinue;
+ break;
+ }
}
- break;
case kBlue|k_Repeat:
case kBlue:
- {
- // Scroll back in time
- UpdateEPGInfo(2);
- DrawMenu(0,0);
- return osContinue;
- }
- break;
+ if (!config.fastbrowse)
+ {
+ // Scroll back in time
+ UpdateEPGInfo(2);
+ DrawMenu(0,0);
+ return osContinue;
+ break;
+ }
+ else
+ {
+ if (group < 0)
+ {
+ cChannel *channel = Channels.GetByNumber(PilotChannelNumber);
+ if (channel)
+ group = channel->Index();
+ }
+ if (group >= 0)
+ {
+ int SaveGroup = group;
+ if (NORMALKEY(Key) == kBlue)
+ {
+ group = Channels.GetNextGroup(group);
+ }
+ else
+ {
+ group = Channels.GetPrevGroup(group < 1 ? 1 : group);
+ }
+ if (group < 0)
+ group = SaveGroup;
+ cChannel *channel = Channels.Get(group);
+ if (channel)
+ {
+ //DisplayChannel(channel);
+ if (!channel->GroupSep())
+ group = -1;
+ else
+ {
+ const char *groupName;
+ groupName = channel->Name();
+ channel = (cChannel *)channel->Next();
+ while (channel->GroupSep())
+ {
+ channel = (cChannel *)channel->Next();
+ }
+ PilotChannelNumber = channel->Number();
+ UpdateEPGInfo(1);
+ DrawMenu(-16,1);
+ }
+ }
+ }
+ lastTime = cTimeMs::Now();
+ break;
+ }
default:
return state;
};