display remaining time for next event
authorFelix Domke <tmbinc@elitedvb.net>
Mon, 13 Feb 2006 17:03:18 +0000 (17:03 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Mon, 13 Feb 2006 17:03:18 +0000 (17:03 +0000)
data/skin.xml
lib/python/Components/EventInfo.py
lib/python/Components/PerServiceDisplay.py
lib/python/Screens/InfoBarGenerics.py

index ecdfd9e..2726276 100644 (file)
                        <widget name="Event_Next_StartTime" position="210,98" size="60,22" font="Regular;20" backgroundColor="dark" />
                        <widget name="Event_Now" position="273,68" size="282,22" font="Regular;20" backgroundColor="dark" />
                        <widget name="Event_Next" position="273,98" size="282,22" font="Regular;20" backgroundColor="dark" />
-                       <widget name="Event_Now_Duration" position="555,68" size="150,26" font="Regular;22" backgroundColor="dark" />
-                       <widget name="Event_Next_Duration" position="555,98" size="150,26" font="Regular;22" backgroundColor="dark" />
+                       <widget name="Event_Now_Duration" position="555,68" size="100,26" font="Regular;22" backgroundColor="dark" halign="right" />
+                       <widget name="Event_Next_Duration" position="555,98" size="100,26" font="Regular;22" backgroundColor="dark" halign="right" />
                        <widget name="Now_ProgressBar" position="304,60" size="121,8" zPosition="1" />
 
                        <widget name="ButtonRed" pixmap="/usr/share/enigma2/button_red.png" position="210,132" size="27,12" />
index de16a17..69487b5 100644 (file)
@@ -11,6 +11,7 @@ class EventInfo(PerServiceDisplay):
        Next_Duration = 3
        Now_StartTime = 4
        Next_StartTime = 5
+       Now_Remaining = 6
        
        def __init__(self, navcore, now_or_next):
                # listen to evUpdatedEventInfo and evEnd
@@ -21,6 +22,9 @@ class EventInfo(PerServiceDisplay):
                                iPlayableService.evUpdatedEventInfo: self.ourEvent, 
                                iPlayableService.evEnd: self.stopEvent 
                        })
+               
+               if now_or_next in [self.Now_Remaining]:
+                       self.enablePolling()
 
        def ourEvent(self):
                info = iServiceInformationPtr()
@@ -33,20 +37,22 @@ class EventInfo(PerServiceDisplay):
                                if ev is not None:
                                        self.update(ev)
 
-
        def update(self, ev):
-               if (self.Now_Duration <= self.now_or_next <= self.Next_Duration):
+               if self.now_or_next == self.Now_Remaining and ev.getBeginTime() <= time() <= (ev.getBeginTime() + ev.getDuration()):
+                       self.setText("+%d min" % ((ev.getBeginTime() + ev.getDuration() - time()) / 60))
+               elif self.now_or_next in [self.Now_Duration, self.Next_Duration, self.Now_Remaining]:
                        self.setText("%d min" % (ev.getDuration() / 60))
-               if (self.Now_StartTime <= self.now_or_next <= self.Next_StartTime):
+               elif self.now_or_next in [self.Now_StartTime, self.Next_StartTime]:
                        self.setText(strftime("%H:%M", localtime(ev.getBeginTime())))
-               if (self.Now <= self.now_or_next <= self.Next):
+               elif self.now_or_next in [self.Now, self.Next]:
                        self.setText(ev.getEventName())         
 
        def stopEvent(self):
                self.setText(
-                       #(_("waiting for event data..."), "", "--:--",  "--:--", "--:--", "--:--")[self.now_or_next]);
-                       ("", "", "--:--",  "--:--", "--:--", "--:--")[self.now_or_next]);
+                       ("", "", "",  "", "--:--", "--:--", "")[self.now_or_next]);
 
+       def poll(self):
+               self.ourEvent()
 
 class EventInfoProgress(PerServiceDisplayProgress, EventInfo):
        def __init__(self, navcore, now_or_next):
index fe50105..23f6ecc 100644 (file)
@@ -3,7 +3,7 @@ from VariableText import *
 from VariableValue import *
 
 from enigma import iPlayableService
-from enigma import eLabel, eSlider
+from enigma import eLabel, eSlider, eTimer
 
 class PerServiceDisplay(GUIComponent, VariableText):
        """Mixin for building components which display something which changes on navigation events, for example "service name" """
@@ -14,7 +14,9 @@ class PerServiceDisplay(GUIComponent, VariableText):
                self.eventmap = eventmap
                self.navcore = navcore
                self.navcore.event.append(self.event)
-
+               self.poll_timer = eTimer()
+               self.poll_timer.timeout.get().append(self.poll)
+               
                # start with stopped state, so simulate that
                self.event(iPlayableService.evEnd)
 
@@ -29,6 +31,17 @@ class PerServiceDisplay(GUIComponent, VariableText):
                g = eLabel(parent)
                return g
 
+       def enablePolling(self, interval=60000):
+               if interval:
+                       self.poll_timer.start(interval)
+               else:
+                       self.poll_timer.stop()
+       
+       def disablePolling(self):
+               self.enablePolling(interval=0)
+
+       def poll(self):
+               pass
 
 class PerServiceDisplayProgress(GUIComponent, VariableValue, PerServiceDisplay):
        def __init__(self, navcore, eventmap):
@@ -46,4 +59,3 @@ class PerServiceDisplayProgress(GUIComponent, VariableValue, PerServiceDisplay):
                # by default, we use a label to display our data.
                self.g = eSlider(parent)
                return self.g
-       
\ No newline at end of file
index 1a8f88b..f05c4ea 100644 (file)
@@ -456,7 +456,7 @@ class InfoBarEvent:
                self["Event_Now"] = EventInfo(self.session.nav, EventInfo.Now)
                self["Event_Next"] = EventInfo(self.session.nav, EventInfo.Next)
 
-               self["Event_Now_Duration"] = EventInfo(self.session.nav, EventInfo.Now_Duration)
+               self["Event_Now_Duration"] = EventInfo(self.session.nav, EventInfo.Now_Remaining)
                self["Event_Next_Duration"] = EventInfo(self.session.nav, EventInfo.Next_Duration)
 
                self["Now_ProgressBar"] = EventInfoProgress(self.session.nav, EventInfo.Now)