X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/5c27251fa08566a00d124aaf2c02249995dac9cf..08e972ae07f60852a888c93199319444e8c06714:/lib/python/Components/EventInfo.py diff --git a/lib/python/Components/EventInfo.py b/lib/python/Components/EventInfo.py index 6f6d07ff..69487b5f 100644 --- a/lib/python/Components/EventInfo.py +++ b/lib/python/Components/EventInfo.py @@ -1,6 +1,6 @@ from PerServiceDisplay import * from time import strftime -from time import localtime +from time import localtime, time from enigma import iServiceInformationPtr, eServiceEventPtr @@ -11,16 +11,20 @@ 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 evStopService - # note that evStopService will be called once to establish a known state + # listen to evUpdatedEventInfo and evEnd + # note that evEnd will be called once to establish a known state self.now_or_next = now_or_next PerServiceDisplay.__init__(self, navcore, { - pNavigation.evUpdatedEventInfo: self.ourEvent, - pNavigation.evStopService: self.stopEvent + iPlayableService.evUpdatedEventInfo: self.ourEvent, + iPlayableService.evEnd: self.stopEvent }) + + if now_or_next in [self.Now_Remaining]: + self.enablePolling() def ourEvent(self): info = iServiceInformationPtr() @@ -31,14 +35,39 @@ class EventInfo(PerServiceDisplay): if info is not None: ev = info.getEvent(self.now_or_next & 1) if ev is not None: - if (self.Now_Duration <= self.now_or_next <= self.Next_Duration): - self.setText("%d min" % (ev.getDuration() / 60)) - if (self.Now_StartTime <= self.now_or_next <= self.Next_StartTime): - self.setText(strftime("%H:%M", localtime(ev.getBeginTime()))) - if (self.Now <= self.now_or_next <= self.Next): - self.setText(ev.getEventName()) + self.update(ev) + + def update(self, ev): + 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)) + elif self.now_or_next in [self.Now_StartTime, self.Next_StartTime]: + self.setText(strftime("%H:%M", localtime(ev.getBeginTime()))) + 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]); + + def poll(self): + self.ourEvent() +class EventInfoProgress(PerServiceDisplayProgress, EventInfo): + def __init__(self, navcore, now_or_next): + self.now_or_next = now_or_next + PerServiceDisplayProgress.__init__(self, navcore, + { + iPlayableService.evUpdatedEventInfo: self.ourEvent, + iPlayableService.evEnd: self.stopEvent + }) + + def update(self, ev): + self.g.setRange(0, ev.getDuration()) + progress = int(time() - ev.getBeginTime()) + + self.setValue(progress) + + def stopEvent(self): + self.setValue(0)