summaryrefslogtreecommitdiff
path: root/tvguidengosd.c
diff options
context:
space:
mode:
authorlouis <louis.braun@gmx.de>2015-06-26 14:47:29 +0200
committerlouis <louis.braun@gmx.de>2015-06-26 14:47:29 +0200
commit4d4f81b6e35d9fdee68c169d0d569e178050a475 (patch)
treec34603636cf4639f2f427659887d2457c81b7681 /tvguidengosd.c
parentb234e73ec89687589769b398febbec2a0123c58f (diff)
downloadvdr-plugin-tvguideng-4d4f81b6e35d9fdee68c169d0d569e178050a475.tar.gz
vdr-plugin-tvguideng-4d4f81b6e35d9fdee68c169d0d569e178050a475.tar.bz2
added optional intelligent channel switch mode
Diffstat (limited to 'tvguidengosd.c')
-rw-r--r--tvguidengosd.c44
1 files changed, 34 insertions, 10 deletions
diff --git a/tvguidengosd.c b/tvguidengosd.c
index f6cc8d3..7e521d9 100644
--- a/tvguidengosd.c
+++ b/tvguidengosd.c
@@ -113,7 +113,7 @@ eOSState cTVGuideOSD::ProcessKey(eKeys Key) {
CloseDetailedView();
break;
case kBlue:
- state = ChannelSwitch();
+ state = ChannelSwitch(detailView->GetEvent());
break;
case kRed:
CloseDetailedView();
@@ -399,7 +399,7 @@ void cTVGuideOSD::KeyYellow(void) {
eOSState cTVGuideOSD::KeyBlue(const cEvent *e) {
if (config.blueKeyMode == eBlueKeySwitch) {
- return ChannelSwitch();
+ return ChannelSwitch(e);
} else if (config.blueKeyMode == eBlueKeyEPG) {
DetailView(e);
} else if (config.blueKeyMode == eBlueKeyFavorites) {
@@ -412,25 +412,49 @@ eOSState cTVGuideOSD::KeyOk(const cEvent *e) {
if (config.blueKeyMode == eBlueKeySwitch) {
DetailView(e);
} else if (config.blueKeyMode == eBlueKeyEPG) {
- return ChannelSwitch();
+ return ChannelSwitch(e);
} else if (config.blueKeyMode == eBlueKeyFavorites) {
DetailView(e);
}
return osContinue;
}
-eOSState cTVGuideOSD::ChannelSwitch(void) {
- const cChannel *currentChannel = epgGrid->GetCurrentChannel();
- if (!currentChannel) {
- return osContinue;
+eOSState cTVGuideOSD::ChannelSwitch(const cEvent *e) {
+ bool running = false;
+ if (e) {
+ time_t now = time(0);
+ if (((e->StartTime() - 5*60) <= now) && (e->EndTime() >= now))
+ running = true;
}
- cDevice::PrimaryDevice()->SwitchChannel(currentChannel, true);
- if (config.closeOnSwitch) {
- return osEnd;
+ if (running || !config.intelligentSwitch) {
+ const cChannel *currentChannel = epgGrid->GetCurrentChannel();
+ if (!currentChannel) {
+ return osContinue;
+ }
+ cDevice::PrimaryDevice()->SwitchChannel(currentChannel, true);
+ if (config.closeOnSwitch) {
+ return osEnd;
+ }
+ } else {
+ CreateSwitchTimer(e);
+ epgGrid->SetTimers();
+ epgGrid->DrawGrid();
+ epgGrid->Flush();
}
return osContinue;
}
+void cTVGuideOSD::CreateSwitchTimer(const cEvent *e) {
+ if (!e)
+ return;
+ cSwitchTimer st;
+ st.switchMinsBefore = 2;
+ st.announceOnly = 0;
+ cRecManager recManager;
+ recManager.SetEPGSearchPlugin();
+ recManager.CreateSwitchTimer(e, st);
+}
+
void cTVGuideOSD::DetailView(const cEvent *e) {
if (!e)
return;