from PerServiceDisplay import * from time import strftime from time import localtime, time from enigma import iServiceInformationPtr, eServiceEventPtr class EventInfo(PerServiceDisplay): Now = 0 Next = 1 Now_Duration = 2 Next_Duration = 3 Now_StartTime = 4 Next_StartTime = 5 Now_Remaining = 6 def __init__(self, navcore, now_or_next): # 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, { iPlayableService.evUpdatedEventInfo: self.ourEvent, iPlayableService.evEnd: self.stopEvent }) if now_or_next in [self.Now_Remaining]: self.enablePolling() def ourEvent(self): info = iServiceInformationPtr() service = self.navcore.getCurrentService() if service != None: info = service.info() if info is not None: ev = info.getEvent(self.now_or_next & 1) if ev is not None: 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( ("", "", "", "", "--:--", "--:--", "")[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)