1 from Converter import Converter
3 from enigma import iPlayableService
4 from Components.Element import cached
6 class ServicePosition(Converter, Poll, object):
12 def __init__(self, type):
14 Converter.__init__(self, type)
16 args = type.split(',')
19 self.negate = 'Negate' in args
20 self.detailed = 'Detailed' in args
21 self.showHours = 'ShowHours' in args
24 self.poll_interval = 100
26 self.poll_interval = 500
29 self.type = self.TYPE_LENGTH
30 elif type == "Position":
31 self.type = self.TYPE_POSITION
32 elif type == "Remaining":
33 self.type = self.TYPE_REMAINING
35 self.type = self.TYPE_GAUGE
37 raise "type must be {Length|Position|Remaining|Gauge} with optional arguments {Negate|Detailed|ShowHours}"
39 self.poll_enabled = self.type != self.TYPE_LENGTH
42 s = self.source.service
46 def getPosition(self):
50 pos = seek.getPlayPosition()
60 length = seek.getLength()
67 service = self.source.service
68 cue = service and service.cueSheet()
69 return cue and cue.getCutList()
77 if self.type == self.TYPE_LENGTH:
79 elif self.type == self.TYPE_POSITION:
81 elif self.type == self.TYPE_REMAINING:
82 l = self.length - self.position
87 if self.negate: l = -l
97 return sign + "%d:%02d:%02d" % (l/3600, l%3600/60, l%60)
99 return sign + "%d:%02d" % (l/60, l%60)
102 return sign + "%d:%02d:%02d:%03d" % ((l/3600/90000), (l/90000)%3600/60, (l/90000)%60, (l%90000)/90)
104 return sign + "%d:%02d:%03d" % ((l/60/90000), (l/90000)%60, (l%90000)/90)
106 # range/value are for the Progress renderer
113 if pos is None or len is None or len <= 0:
115 return pos * 10000 / len
117 position = property(getPosition)
118 length = property(getLength)
119 cutlist = property(getCutlist)
120 text = property(getText)
121 value = property(getValue)
123 def changed(self, what):
124 cutlist_refresh = what[0] != self.CHANGED_SPECIFIC or what[1] in [iPlayableService.evCuesheetChanged]
125 time_refresh = what[0] == self.CHANGED_POLL or what[0] == self.CHANGED_SPECIFIC and what[1] in [iPlayableService.evCuesheetChanged]
128 if self.type == self.TYPE_GAUGE:
129 self.downstream_elements.cutlist_changed()
132 self.downstream_elements.changed(what)