X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/9829ed5d56e162f9aa8d76b5644c273350f548b8..92554c8325411acd3acaec7c15be420f180907c4:/lib/python/Components/Converter/ServicePosition.py diff --git a/lib/python/Components/Converter/ServicePosition.py b/lib/python/Components/Converter/ServicePosition.py index 94d71222..56a6db67 100644 --- a/lib/python/Components/Converter/ServicePosition.py +++ b/lib/python/Components/Converter/ServicePosition.py @@ -1,17 +1,26 @@ from Converter import Converter from Poll import Poll from enigma import iPlayableService -from Components.Element import cached +from Components.Element import cached, ElementError class ServicePosition(Converter, Poll, object): - TYPE_LENGTH = 0, - TYPE_POSITION = 1, - TYPE_REMAINING = 2, + TYPE_LENGTH = 0 + TYPE_POSITION = 1 + TYPE_REMAINING = 2 TYPE_GAUGE = 3 - + def __init__(self, type): Poll.__init__(self) Converter.__init__(self, type) + + args = type.split(',') + type = args.pop(0) + + self.negate = 'Negate' in args + self.detailed = 'Detailed' in args + self.showHours = 'ShowHours' in args + self.showNoSeconds = 'ShowNoSeconds' in args + if type == "Length": self.type = self.TYPE_LENGTH elif type == "Position": @@ -20,14 +29,22 @@ class ServicePosition(Converter, Poll, object): self.type = self.TYPE_REMAINING elif type == "Gauge": self.type = self.TYPE_GAUGE + else: + raise ElementError("type must be {Length|Position|Remaining|Gauge} with optional arguments {Negate|Detailed|ShowHours|ShowNoSeconds} for ServicePosition converter") + + if self.detailed: + self.poll_interval = 100 + elif self.type == self.TYPE_LENGTH: + self.poll_interval = 2000 + else: + self.poll_interval = 500 + + self.poll_enabled = True - self.poll_interval = 500 - self.poll_enabled = self.type != self.TYPE_LENGTH - def getSeek(self): s = self.source.service return s and s.seek() - + @cached def getPosition(self): seek = self.getSeek() @@ -37,7 +54,7 @@ class ServicePosition(Converter, Poll, object): if pos[0]: return 0 return pos[1] - + @cached def getLength(self): seek = self.getSeek() @@ -47,13 +64,13 @@ class ServicePosition(Converter, Poll, object): if length[0]: return 0 return length[1] - + @cached def getCutlist(self): service = self.source.service cue = service and service.cueSheet() return cue and cue.getCutList() - + @cached def getText(self): seek = self.getSeek() @@ -66,26 +83,56 @@ class ServicePosition(Converter, Poll, object): l = self.position elif self.type == self.TYPE_REMAINING: l = self.length - self.position - - l /= 90000 - + + if not self.detailed: + l /= 90000 + + if self.negate: l = -l + if l > 0: sign = "" else: l = -l sign = "-" - - return sign + "%d:%02d" % (l/60, l%60) + + if not self.detailed: + if self.showHours: + if self.showNoSeconds: + return sign + "%d:%02d" % (l/3600, l%3600/60) + else: + return sign + "%d:%02d:%02d" % (l/3600, l%3600/60, l%60) + else: + if self.showNoSeconds: + return sign + "%d" % (l/60) + else: + return sign + "%d:%02d" % (l/60, l%60) + else: + if self.showHours: + return sign + "%d:%02d:%02d:%03d" % ((l/3600/90000), (l/90000)%3600/60, (l/90000)%60, (l%90000)/90) + else: + return sign + "%d:%02d:%03d" % ((l/60/90000), (l/90000)%60, (l%90000)/90) + + # range/value are for the Progress renderer + range = 10000 + + @cached + def getValue(self): + pos = self.position + len = self.length + if pos is None or len is None or len <= 0: + return None + return pos * 10000 / len position = property(getPosition) length = property(getLength) cutlist = property(getCutlist) text = property(getText) - + value = property(getValue) + def changed(self, what): - cutlist_refresh = what[0] != self.CHANGED_SPECIFIC or what[1] in [iPlayableService.evCuesheetChanged] - time_refresh = what[0] == self.CHANGED_POLL or what[0] == self.CHANGED_SPECIFIC and what[1] in [iPlayableService.evCuesheetChanged] - + cutlist_refresh = what[0] != self.CHANGED_SPECIFIC or what[1] in (iPlayableService.evCuesheetChanged,) + time_refresh = what[0] == self.CHANGED_POLL or what[0] == self.CHANGED_SPECIFIC and what[1] in (iPlayableService.evCuesheetChanged,) + if cutlist_refresh: if self.type == self.TYPE_GAUGE: self.downstream_elements.cutlist_changed()