diff options
author | louis <louis.braun@gmx.de> | 2015-06-26 14:47:29 +0200 |
---|---|---|
committer | louis <louis.braun@gmx.de> | 2015-06-26 14:47:29 +0200 |
commit | 4d4f81b6e35d9fdee68c169d0d569e178050a475 (patch) | |
tree | c34603636cf4639f2f427659887d2457c81b7681 /tvguidengosd.c | |
parent | b234e73ec89687589769b398febbec2a0123c58f (diff) | |
download | vdr-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.c | 44 |
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; |