summaryrefslogtreecommitdiff
path: root/displaymenu.c
diff options
context:
space:
mode:
Diffstat (limited to 'displaymenu.c')
-rw-r--r--displaymenu.c174
1 files changed, 127 insertions, 47 deletions
diff --git a/displaymenu.c b/displaymenu.c
index 2609191a..37972447 100644
--- a/displaymenu.c
+++ b/displaymenu.c
@@ -1,6 +1,7 @@
#include "displaymenu.h"
#include "services/scraper2vdr.h"
#include "services/epgsearch.h"
+#include "services/remotetimers.h"
#include <utility>
#include <fstream>
#include <iostream>
@@ -4222,74 +4223,153 @@ int cFlatDisplayMenu::DrawMainMenuWidgetActiveTimers(int wLeft, int wWidth, int
contentWidget.AddRect(cRect(0, ContentTop, wWidth, 3), Theme.Color(clrMenuEventTitleLine));
ContentTop += 6;
+ //check if remotetimers plugin is available
+ static cPlugin* pRemoteTimers = cPluginManager::GetPlugin("remotetimers");
+ cSchedulesLock SchedulesLock;
+ const cSchedules *Schedules = cSchedules::Schedules(SchedulesLock);
+
+ time_t now;
+ time(&now);
+ if( (Config.MainMenuWidgetActiveTimerShowRemoteActive || Config.MainMenuWidgetActiveTimerShowRemoteRecording) && pRemoteTimers && (now - remoteTimersLastRefresh) > Config.MainMenuWidgetActiveTimerShowRemoteRefreshTime ) {
+ remoteTimersLastRefresh = now;
+ cString errorMsg;
+ pRemoteTimers->Service("RemoteTimers::RefreshTimers-v1.0", &errorMsg);
+ }
+
// look for timers
- int numRec = 0, numActive = 0;
+ cVector<const cTimer *> timerRec;
+ cVector<const cTimer *> timerActive;
+ cVector<const cTimer *> timerRemoteRec;
+ cVector<const cTimer *> timerRemoteActive;
+
for(cTimer *ti = Timers.First(); ti; ti = Timers.Next(ti) ) {
if( ti->HasFlags(tfRecording) && Config.MainMenuWidgetActiveTimerShowRecording )
- numRec++;
- if( ti->HasFlags(tfActive) && Config.MainMenuWidgetActiveTimerShowActive )
- numActive++;
+ timerRec.Append(ti);
+ if( ti->HasFlags(tfActive) && !ti->HasFlags(tfRecording) && Config.MainMenuWidgetActiveTimerShowActive )
+ timerActive.Append(ti);
- if( numRec + numActive >= Config.MainMenuWidgetActiveTimerMaxCount )
+ if( timerRec.Size() + timerActive.Size() >= Config.MainMenuWidgetActiveTimerMaxCount )
break;
}
- if( (numRec == 0 && numActive == 0) && Config.MainMenuWidgetActiveTimerHideEmpty )
+ if( (Config.MainMenuWidgetActiveTimerShowRemoteActive || Config.MainMenuWidgetActiveTimerShowRemoteRecording) && pRemoteTimers &&
+ timerRec.Size() + timerActive.Size() < Config.MainMenuWidgetActiveTimerMaxCount ) {
+ cTimer* remoteTimer = NULL;
+ while( pRemoteTimers->Service("RemoteTimers::ForEach-v1.0", &remoteTimer) && remoteTimer != NULL ) {
+ remoteTimer->SetEventFromSchedule(Schedules); // make sure the event is current
+ if( remoteTimer->HasFlags(tfRecording) && Config.MainMenuWidgetActiveTimerShowRemoteRecording )
+ timerRemoteRec.Append(remoteTimer);
+ if( remoteTimer->HasFlags(tfActive) && !remoteTimer->HasFlags(tfRecording) && Config.MainMenuWidgetActiveTimerShowRemoteActive )
+ timerRemoteActive.Append(remoteTimer);
+ }
+ }
+
+ if( (timerRec.Size() == 0 && timerActive.Size() == 0 && timerRemoteRec.Size() == 0 && timerRemoteActive.Size() == 0) && Config.MainMenuWidgetActiveTimerHideEmpty )
return 0;
- else if( numRec == 0 && numActive == 0 ) {
+ else if( timerRec.Size() == 0 && timerActive.Size() == 0 && timerRemoteRec.Size() == 0 && timerRemoteActive.Size() == 0 ) {
contentWidget.AddText(tr("no active/recording timer"), false, cRect(marginItem, ContentTop, wWidth - marginItem*2, fontSmlHeight),
Theme.Color(clrMenuEventFontInfo), Theme.Color(clrMenuEventBg), fontSml, wWidth - marginItem*2);
} else {
int count = -1;
+ int remotecount = -1;
// first recording timer
if( Config.MainMenuWidgetActiveTimerShowRecording ) {
- for(cTimer *ti = Timers.First(); ti; ti = Timers.Next(ti)) {
- if( ti->HasFlags(tfRecording) ) {
- count++;
- if( ContentTop + marginItem > menuPixmap->ViewPort().Height() )
- break;
- if( count >= Config.MainMenuWidgetActiveTimerMaxCount )
- break;
- const cChannel *Channel = ti->Channel();
- //const cEvent *Event = Timer->Event();
- std::stringstream strTimer;
- strTimer << count+1 << ": ";
- if( Channel )
- strTimer << Channel->Name() << " - ";
- else
- strTimer << tr("Unknown") << " - ";
- strTimer << ti->File();
+ for(int i = 0; i < timerRec.Size(); i++) {
+ count++;
+ if( ContentTop + marginItem > menuPixmap->ViewPort().Height() )
+ break;
+ if( count >= Config.MainMenuWidgetActiveTimerMaxCount )
+ break;
+ const cChannel *Channel = (timerRec[i])->Channel();
+ //const cEvent *Event = Timer->Event();
+ std::stringstream strTimer;
+ if( (Config.MainMenuWidgetActiveTimerShowRemoteActive || Config.MainMenuWidgetActiveTimerShowRemoteRecording) && pRemoteTimers &&
+ (timerRemoteRec.Size() > 0 || timerRemoteActive.Size() > 0) )
+ strTimer << "L";
+ strTimer << count+1 << ": ";
+ if( Channel )
+ strTimer << Channel->Name() << " - ";
+ else
+ strTimer << tr("Unknown") << " - ";
+ strTimer << (timerRec[i])->File();
- contentWidget.AddText(strTimer.str().c_str(), false, cRect(marginItem, ContentTop, wWidth - marginItem*2, fontSmlHeight),
- Theme.Color(clrTopBarRecordingActiveFg), Theme.Color(clrMenuEventBg), fontSml, wWidth - marginItem*2);
+ contentWidget.AddText(strTimer.str().c_str(), false, cRect(marginItem, ContentTop, wWidth - marginItem*2, fontSmlHeight),
+ Theme.Color(clrTopBarRecordingActiveFg), Theme.Color(clrMenuEventBg), fontSml, wWidth - marginItem*2);
- ContentTop += fontSmlHeight;
- }
+ ContentTop += fontSmlHeight;
}
}
if( Config.MainMenuWidgetActiveTimerShowActive ) {
- for(cTimer *ti = Timers.First(); ti; ti = Timers.Next(ti)) {
- if( ti->HasFlags(tfActive) && !ti->HasFlags(tfRecording) ) {
- count++;
- if( ContentTop + marginItem > menuPixmap->ViewPort().Height() )
- break;
- if( count >= Config.MainMenuWidgetActiveTimerMaxCount )
- break;
+ for(int i = 0; i < timerActive.Size(); i++) {
+ count++;
+ if( ContentTop + marginItem > menuPixmap->ViewPort().Height() )
+ break;
+ if( count >= Config.MainMenuWidgetActiveTimerMaxCount )
+ break;
+
+ const cChannel *Channel = (timerActive[i])->Channel();
+ //const cEvent *Event = Timer->Event();
+ std::stringstream strTimer;
+ if( (Config.MainMenuWidgetActiveTimerShowRemoteActive || Config.MainMenuWidgetActiveTimerShowRemoteRecording) && pRemoteTimers &&
+ (timerRemoteRec.Size() > 0 || timerRemoteActive.Size() > 0) )
+ strTimer << "L";
+ strTimer << count+1 << ": ";
+ if( Channel )
+ strTimer << Channel->Name() << " - ";
+ else
+ strTimer << tr("Unknown") << " - ";
+ strTimer << (timerActive[i])->File();
- const cChannel *Channel = ti->Channel();
- //const cEvent *Event = Timer->Event();
- std::stringstream strTimer;
- strTimer << count+1 << ": ";
- if( Channel )
- strTimer << Channel->Name() << " - ";
- else
- strTimer << tr("Unknown") << " - ";
- strTimer << ti->File();
+ contentWidget.AddText(strTimer.str().c_str(), false, cRect(marginItem, ContentTop, wWidth - marginItem*2, fontSmlHeight),
+ Theme.Color(clrMenuEventFontInfo), Theme.Color(clrMenuEventBg), fontSml, wWidth - marginItem*2);
- contentWidget.AddText(strTimer.str().c_str(), false, cRect(marginItem, ContentTop, wWidth - marginItem*2, fontSmlHeight),
- Theme.Color(clrMenuEventFontInfo), Theme.Color(clrMenuEventBg), fontSml, wWidth - marginItem*2);
+ ContentTop += fontSmlHeight;
+ }
+ }
+ if( Config.MainMenuWidgetActiveTimerShowRemoteRecording ) {
+ for(int i = 0; i < timerRemoteRec.Size(); i++) {
+ remotecount++;
+ if( ContentTop + marginItem > menuPixmap->ViewPort().Height() )
+ break;
+ if( count + remotecount >= Config.MainMenuWidgetActiveTimerMaxCount )
+ break;
+ const cChannel *Channel = (timerRemoteRec[i])->Channel();
+ //const cEvent *Event = Timer->Event();
+ std::stringstream strTimer;
+ strTimer << "R" << remotecount+1 << ": ";
+ if( Channel )
+ strTimer << Channel->Name() << " - ";
+ else
+ strTimer << tr("Unknown") << " - ";
+ strTimer << (timerRemoteRec[i])->File();
- ContentTop += fontSmlHeight;
- }
+ contentWidget.AddText(strTimer.str().c_str(), false, cRect(marginItem, ContentTop, wWidth - marginItem*2, fontSmlHeight),
+ Theme.Color(clrTopBarRecordingActiveFg), Theme.Color(clrMenuEventBg), fontSml, wWidth - marginItem*2);
+
+ ContentTop += fontSmlHeight;
+ }
+ }
+ if( Config.MainMenuWidgetActiveTimerShowRemoteActive ) {
+ for(int i = 0; i < timerRemoteActive.Size(); i++) {
+ remotecount++;
+ if( ContentTop + marginItem > menuPixmap->ViewPort().Height() )
+ break;
+ if( count + remotecount >= Config.MainMenuWidgetActiveTimerMaxCount )
+ break;
+
+ const cChannel *Channel = (timerRemoteActive[i])->Channel();
+ //const cEvent *Event = Timer->Event();
+ std::stringstream strTimer;
+ strTimer << "R" << remotecount+1 << ": ";
+ if( Channel )
+ strTimer << Channel->Name() << " - ";
+ else
+ strTimer << tr("Unknown") << " - ";
+ strTimer << (timerRemoteActive[i])->File();
+
+ contentWidget.AddText(strTimer.str().c_str(), false, cRect(marginItem, ContentTop, wWidth - marginItem*2, fontSmlHeight),
+ Theme.Color(clrMenuEventFontInfo), Theme.Color(clrMenuEventBg), fontSml, wWidth - marginItem*2);
+
+ ContentTop += fontSmlHeight;
}
}
}