add a radiomode background picture (mvi file.. changable in
[enigma2.git] / lib / python / Components / Converter / RdsInfo.py
diff --git a/lib/python/Components/Converter/RdsInfo.py b/lib/python/Components/Converter/RdsInfo.py
new file mode 100644 (file)
index 0000000..3a7b2be
--- /dev/null
@@ -0,0 +1,53 @@
+from enigma import iRdsDecoder, iPlayableService
+from Components.Converter.Converter import Converter
+from Components.Element import cached
+
+class RdsInfo(Converter, object):
+       RASS_INTERACTIVE_AVAILABLE = 0
+       RTP_TEXT_CHANGED = 1
+       RADIO_TEXT_CHANGED = 2
+
+       def __init__(self, type):
+               Converter.__init__(self, type)
+               self.type = {
+                               "RadioText": self.RADIO_TEXT_CHANGED,
+                               "RtpText": self.RTP_TEXT_CHANGED,
+                               "RasInteractiveAvailable": self.RASS_INTERACTIVE_AVAILABLE
+                       }[type]
+
+               self.interesting_events = {
+                               self.RADIO_TEXT_CHANGED: [iPlayableService.evUpdatedRadioText],
+                               self.RTP_TEXT_CHANGED: [iPlayableService.evUpdatedRtpText],
+                               self.RASS_INTERACTIVE_AVAILABLE: [iPlayableService.evUpdatedRassInteractivePicMask]
+                       }[self.type]
+
+       @cached
+       def getText(self):
+               decoder = self.source.decoder
+               text = ""
+               if decoder:
+                       if self.type == self.RADIO_TEXT_CHANGED:
+                               text = decoder.getText(iRdsDecoder.RadioText)
+                       elif self.type == self.RTP_TEXT_CHANGED:
+                               text = decoder.getText(iRdsDecoder.RtpText)
+                       else:
+                               print "unknown RdsInfo Converter type", self.type
+               return text
+
+       text = property(getText)
+
+       @cached
+       def getBoolean(self):
+               decoder = self.source.decoder
+               if self.type == self.RASS_INTERACTIVE_AVAILABLE:
+                       mask = decoder and decoder.getRassInteractiveMask()
+                       return (mask and mask[0] & 1 and True) or False
+               elif self.type == self.RADIO_TEXT_CHANGED:
+                       return (len(decoder.getText(iRdsDecoder.RadioText)) and True) or False
+               elif self.type == self.RTP_TEXT_CHANGED:
+                       return (len(decoder.getText(iRdsDecoder.RtpText)) and True) or False
+       boolean = property(getBoolean)
+
+       def changed(self, what):
+               if what[0] != self.CHANGED_SPECIFIC or what[1] in self.interesting_events:
+                       Converter.changed(self, what)