some minor speedups using caches and more selective updating
[enigma2.git] / lib / python / Components / Sources / EventInfo.py
1 from Components.PerServiceDisplay import PerServiceBase
2 from Tools.Event import Event
3 from enigma import iPlayableService
4 from Source import Source
5
6 from time import time
7
8 class EventInfo(PerServiceBase, Source, object):
9         NOW = 0
10         NEXT = 1
11         
12         def __init__(self, navcore, now_or_next):
13                 Source.__init__(self)
14                 PerServiceBase.__init__(self, navcore, 
15                         { 
16                                 iPlayableService.evStart: self.gotEvent,
17                                 iPlayableService.evUpdatedEventInfo: self.gotEvent,
18                                 iPlayableService.evEnd: self.gotEvent
19                         }, with_event=True)
20                 
21                 self.now_or_next = now_or_next
22                 
23         def getEvent(self):
24                 if self.cache is None:
25                         service = self.navcore.getCurrentService()
26                         info = service and service.info()
27                         self.cache = (True, info and info.getEvent(self.now_or_next)) # we always store a tuple for negative caching
28                 
29                 return self.cache[1]
30
31         event = property(getEvent)
32
33         def gotEvent(self, what):
34                 if what in [iPlayableService.evStart, iPlayableService.evEnd]:
35                         self.changed((self.CHANGED_CLEAR,))
36                 else:
37                         self.changed((self.CHANGED_ALL,))