1 from Components.Converter.Converter import Converter
2 from enigma import iServiceInformation, iPlayableService
3 from Components.Element import cached
5 class ServiceInfo(Converter, object):
10 SUBSERVICES_AVAILABLE = 4
14 def __init__(self, type):
15 Converter.__init__(self, type)
16 self.type, self.interesting_events = {
17 "HasTelext": (self.HAS_TELETEXT, (iPlayableService.evUpdatedInfo,)),
18 "IsMultichannel": (self.IS_MULTICHANNEL, (iPlayableService.evUpdatedInfo,)),
19 "IsCrypted": (self.IS_CRYPTED, (iPlayableService.evUpdatedInfo,)),
20 "IsWidescreen": (self.IS_WIDESCREEN, (iPlayableService.evVideoSizeChanged,)),
21 "SubservicesAvailable": (self.SUBSERVICES_AVAILABLE, (iPlayableService.evUpdatedEventInfo,)),
22 "VideoWidth": (self.XRES, (iPlayableService.evVideoSizeChanged,)),
23 "VideoHeight": (self.YRES, (iPlayableService.evVideoSizeChanged,)),
26 def getServiceInfoString(self, info, what):
27 v = info.getInfo(what)
31 return info.getInfoString(what)
36 service = self.source.service
37 info = service and service.info()
41 if self.type == self.HAS_TELETEXT:
42 tpid = info.getInfo(iServiceInformation.sTXTPID)
44 elif self.type == self.IS_MULTICHANNEL:
45 # FIXME. but currently iAudioTrackInfo doesn't provide more information.
46 audio = service.audioTracks()
48 n = audio.getNumberOfTracks()
51 i = audio.getTrackInfo(idx)
52 description = i.getDescription();
53 if "AC3" in description or "DTS" in description:
57 elif self.type == self.IS_CRYPTED:
58 return info.getInfo(iServiceInformation.sIsCrypted) == 1
59 elif self.type == self.IS_WIDESCREEN:
60 return info.getInfo(iServiceInformation.sAspect) in (3, 4, 7, 8, 0xB, 0xC, 0xF, 0x10)
61 elif self.type == self.SUBSERVICES_AVAILABLE:
62 subservices = service.subServices()
63 return subservices and subservices.getNumberOfSubservices() > 0
65 boolean = property(getBoolean)
69 service = self.source.service
70 info = service and service.info()
74 if self.type == self.XRES:
75 return self.getServiceInfoString(info, iServiceInformation.sVideoWidth)
76 if self.type == self.YRES:
77 return self.getServiceInfoString(info, iServiceInformation.sVideoHeight)
80 text = property(getText)
84 service = self.source.service
85 info = service and service.info()
89 if self.type == self.XRES:
90 return info.getInfo(iServiceInformation.sVideoWidth)
91 if self.type == self.YRES:
92 return info.getInfo(iServiceInformation.sVideoHeight)
96 value = property(getValue)
98 def changed(self, what):
99 if what[0] != self.CHANGED_SPECIFIC or what[1] in self.interesting_events:
100 Converter.changed(self, what)