class CryptoInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.active = False if int(config.usage.show_cryptoinfo.value) > 0: self.visible = True else: self.visible = False self.textvalue = "" self.poll_interval = 1000 self.poll_enabled = True self.ecmdata = GetEcmInfo() @cached def getText(self): if int(config.usage.show_cryptoinfo.value) < 1: self.visible = False return "" self.visible = True data = self.ecmdata.getEcmData() return data[0] text = property(getText)
class CryptoInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.active = False self.visible = config.usage.show_cryptoinfo.value self.textvalue = "" self.poll_interval = 1000 self.poll_enabled = True self.ecmdata = GetEcmInfo() @cached def getText(self): if not config.usage.show_cryptoinfo.value: self.visible = False data = '' else: self.visible = True if self.type == "VerboseInfo": data = self.ecmdata.getEcmData()[0] else: data = self.ecmdata.getInfo(self.type) return data text = property(getText)
class CryptoInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.active = False if int(config.usage.show_cryptoinfo.value) > 0: self.visible = True else: self.visible = False self.textvalue = "" self.poll_interval = 1000 self.poll_enabled = True self.ecmdata = GetEcmInfo() @cached def getText(self): if int(config.usage.show_cryptoinfo.value) < 1: self.visible = False data = '' else: self.visible = True if self.type == "VerboseInfo": data = self.ecmdata.getEcmData()[0] else: data = self.ecmdata.getInfo(self.type) return data text = property(getText)
class CryptoInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.active = False if int(config.usage.show_cryptoinfo.getValue()) > 0: self.visible = True else: self.visible = False self.textvalue = "" self.poll_interval = 1000 self.poll_enabled = True self.ecmdata = GetEcmInfo() @cached def getText(self): if int(config.usage.show_cryptoinfo.getValue()) < 1: self.visible = False return '' self.visible = True data = self.ecmdata.getEcmData() return data[0] text = property(getText)
class PliExtraInfo(Poll, Converter): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.info_fields = { # Field combinations accessible from skin "All": ( ( # config.usage.show_cryptoinfo.value <= 0 "ProviderName", "TransponderInfo", "TransponderName", "NewLine", "CryptoBar", "CryptoCurrentSource", "NewLine", "CryptoSpecial", "VideoCodec", "ResolutionString", ), ( # config.usage.show_cryptoinfo.value > 0 "ProviderName", "TransponderInfo", "TransponderName", "NewLine", "CryptoBar", "CryptoSpecial", "NewLine", "PIDInfo", "VideoCodec", "ResolutionString", ) ), "CryptoInfo": ( ( # config.usage.show_cryptoinfo.value <= 0 "CryptoBar", "CryptoCurrentSource", "CryptoSpecial", ), ( # config.usage.show_cryptoinfo.value > 0 "CryptoBar", "CryptoSpecial", ) ), "ServiceInfo": ( "ProviderName", "TunerSystem", "TransponderFrequency", "TransponderPolarization", "TransponderSymbolRate", "TransponderFEC", "TransponderModulation", "OrbitalPosition", "TransponderName", "VideoCodec", "ResolutionString", ), "TransponderInfo": ( ( # not feraw "StreamURLInfo", ), ( # feraw and "DVB-T" not in feraw.get("tuner_type", "") "TunerSystem", "TransponderFrequencyMHz", "TransponderPolarization", "TransponderSymbolRate", "TransponderFEC", "TransponderModulation", "OrbitalPosition", "TransponderInfoMisPls", ), ( # feraw and "DVB-T" in feraw.get("tuner_type", "") "TunerSystem", "TerrestrialChannelNumber", "TransponderFrequencyMHz", "TransponderPolarization", "TransponderSymbolRate", "TransponderFEC", "TransponderModulation", "OrbitalPosition", ) ), "TransponderInfo2line": ( "ProviderName", "TunerSystem", "TransponderName", "NewLine", "TransponderFrequencyMHz", "TransponderPolarization", "TransponderSymbolRate", "TransponderModulationFEC", ), "User": (), } self.ca_table = ( ("CryptoCaidSecaAvailable", "S", False), ("CryptoCaidViaAvailable", "V", False), ("CryptoCaidIrdetoAvailable", "I", False), ("CryptoCaidNDSAvailable", "Nd", False), ("CryptoCaidConaxAvailable", "Co", False), ("CryptoCaidCryptoWAvailable", "Cw", False), ("CryptoCaidPowerVUAvailable", "P", False), ("CryptoCaidBetaAvailable", "B", False), ("CryptoCaidNagraAvailable", "N", False), ("CryptoCaidBissAvailable", "Bi", False), ("CryptoCaidDre3Available", "D3", False), ("CryptoCaidDreAvailable", "D", False), ("CryptoCaidBulCrypt1Available", "B1", False), ("CryptoCaidBulCrypt2Available", "B2", False), ("CryptoCaidVerimatrixAvailable", "Vm", False), ("CryptoCaidTandbergAvailable", "TB", False), ("CryptoCaidSecaSelected", "S", True), ("CryptoCaidViaSelected", "V", True), ("CryptoCaidIrdetoSelected", "I", True), ("CryptoCaidNDSSelected", "Nd", True), ("CryptoCaidConaxSelected", "Co", True), ("CryptoCaidCryptoWSelected", "Cw", True), ("CryptoCaidPowerVUSelected", "P", True), ("CryptoCaidBetaSelected", "B", True), ("CryptoCaidNagraSelected", "N", True), ("CryptoCaidBissSelected", "Bi", True), ("CryptoCaidDre3Selected", "D3", True), ("CryptoCaidDreSelected", "D", True), ("CryptoCaidBulCrypt1Selected", "B1", True), ("CryptoCaidBulCrypt2Selected", "B2", True), ("CryptoCaidVerimatrixSelected", "Vm", True), ("CryptoCaidTandbergSelected", "TB", True), ) self.type = self.type.split(',') if self.type[0] == "User": self.info_fields[self.type[0]] = tuple(self.type[1:]) self.type = self.type[0] self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None self.recursionCheck = set() def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = "" self.current_caid = "0" self.current_provid = "0" self.current_ecmpid = "0" def createCryptoBar(self, info): res = "" available_caids = info.getInfoObject(iServiceInformation.sCAIDs) colors = parameters.get("PliExtraInfoColors", (0x0000FF00, 0x00FFFF00, 0x007F7F7F, 0x00FFFFFF)) # "found", "not found", "available", "default" colors for caid_entry in caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): color = "\c%08x" % colors[0] # green else: color = "\c%08x" % colors[2] # grey try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int(caid_entry[1], 16): color = "\c%08x" % colors[1] # yellow except: pass if color != "\c%08x" % colors[2] or caid_entry[4]: if res: res += " " res += color + caid_entry[3] res += "\c%08x" % colors[3] # white (this acts like a color "reset" for following strings return res def createCryptoSpecial(self, info): caid_name = "FTA" try: for caid_entry in caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ":%04x:%04x:%04x:%04x" % (int(self.current_caid, 16), int(self.current_provid, 16), info.getInfo(iServiceInformation.sSID), int(self.current_ecmpid, 16)) except: pass return "" def createResolution(self, info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return "" yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ("i", "p", " ")[info.getInfo(iServiceInformation.sProgressive)] fps = (info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000 if not fps: try: if os.path.exists("/proc/stb/vmpeg/0/framerate"): print("[PliExtraInfo] Read /proc/stb/vmpeg/0/framerate") fps = (int(open("/proc/stb/vmpeg/0/framerate", "r").read()) + 500) / 1000 elif os.path.exists("/proc/stb/vmpeg/0/fallback_framerate"): print("[PliExtraInfo] Read /proc/stb/vmpeg/0/fallback_framerate") fps = (int(open("/proc/stb/vmpeg/0/fallback_framerate", "r").read()) + 0) / 1000 except: print("[PliExtraInfo] Read framerate failed.") if not mode: try: print("[PliExtraInfo] Read /proc/stb/vmpeg/0/progressive") mod = int(open("/proc/stb/vmpeg/0/progressive", "r").read()) if mod == 1: mode = "p" else: mode = "i" except: print("[PliExtraInfo] Read /proc/stb/vmpeg/0/progressive failed.") return "%sx%s%s%s" % (xres, yres, mode, fps) def createGamma(self, info): return gamma_data.get(info.getInfo(iServiceInformation.sGamma), "") def createVideoCodec(self, info): return codec_data.get(info.getInfo(iServiceInformation.sVideoType), _("N/A")) def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) tsid = info.getInfo(iServiceInformation.sTSID) onid = info.getInfo(iServiceInformation.sONID) if vpid < 0: vpid = 0 if apid < 0: apid = 0 if pcrpid < 0: pcrpid = 0 if sidpid < 0: sidpid = 0 if tsid < 0: tsid = 0 if onid < 0: onid = 0 return "%d-%d:%05d:%04d:%04d:%04d" % (onid, tsid, sidpid, vpid, apid, pcrpid) def createInfoString(self, fieldGroup, fedata, feraw, info): if fieldGroup in self.recursionCheck: return _("?%s-recursive?") % fieldGroup self.recursionCheck.add(fieldGroup) fields = self.info_fields[fieldGroup] if fields and isinstance(fields[0], (tuple, list)): if fieldGroup == "TransponderInfo": fields = fields[feraw and int("DVB-T" in feraw.get("tuner_type", "")) + 1 or 0] else: fields = fields[int(config.usage.show_cryptoinfo.value) > 0] ret = "" vals = [] for field in fields: val = None if field == "CryptoCurrentSource": self.getCryptoInfo(info) vals.append(self.current_source) elif field == "StreamURLInfo": val = self.createStreamURLInfo(info) elif field == "TransponderModulationFEC": val = self.createModulation(fedata) + '-' + self.createFEC(fedata, feraw) elif field == "TransponderName": val = self.createTransponderName(feraw) elif field == "ProviderName": val = self.createProviderName(info) elif field in ("NewLine", "NL"): ret += " ".join(vals) + "\n" vals = [] else: val = self.getTextByType(field) if val: vals.append(val) return ret + " ".join(vals) def createStreamURLInfo(self, info): refstr = info.getInfoString(iServiceInformation.sServiceref) if "%3a//" in refstr.lower(): return refstr.split(":")[10].replace("%3a", ":").replace("%3A", ":") return "" def createFrequency(self, feraw): frequency = feraw.get("frequency") if frequency: if "DVB-T" in feraw.get("tuner_type"): return "%d %s" % (int(frequency / 1000000. + 0.5), _("MHz")) else: return str(int(frequency / 1000 + 0.5)) return "" def createChannelNumber(self, fedata, feraw): return "DVB-T" in feraw.get("tuner_type", "") and fedata.get("channel") or "" def createSymbolRate(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type", ""): bandwidth = fedata.get("bandwidth") if bandwidth: return bandwidth else: symbolrate = fedata.get("symbol_rate") if symbolrate: return str(symbolrate / 1000) return "" def createPolarization(self, fedata): return fedata.get("polarization_abbreviation") or "" def createFEC(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type", ""): code_rate_lp = fedata.get("code_rate_lp") code_rate_hp = fedata.get("code_rate_hp") guard_interval = fedata.get("guard_interval") if code_rate_lp and code_rate_hp and guard_interval: return code_rate_lp + "-" + code_rate_hp + "-" + guard_interval else: fec = fedata.get("fec_inner") if fec: return fec return "" def createModulation(self, fedata): if fedata.get("tuner_type") == _("Terrestrial"): constellation = fedata.get("constellation") if constellation: return constellation else: modulation = fedata.get("modulation") if modulation: return modulation return "" def createTunerType(self, feraw): return feraw.get("tuner_type") or "" def createTunerSystem(self, fedata): return fedata.get("system") or "" def createOrbPos(self, feraw): orbpos = feraw.get("orbital_position") if orbpos: if orbpos > 1800: return _("%.1f° W") % ((3600 - orbpos) / 10.0) elif orbpos > 0: return _("%.1f° E") % (orbpos / 10.0) return "" def createOrbPosOrTunerSystem(self, fedata, feraw): orbpos = self.createOrbPos(feraw) if orbpos is not "": return orbpos return self.createTunerSystem(fedata) def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) def createMisPls(self, fedata): tmp = "" if fedata.get("is_id"): if fedata.get("is_id") > -1: tmp = "MIS %d" % fedata.get("is_id") if fedata.get("pls_code"): if fedata.get("pls_code") > 0: tmp = addspace(tmp) + "%s %d" % (fedata.get("pls_mode"), fedata.get("pls_code")) if fedata.get("t2mi_plp_id"): if fedata.get("t2mi_plp_id") > -1: tmp = addspace(tmp) + "T2MI %d PID %d" % (fedata.get("t2mi_plp_id"), fedata.get("t2mi_pid")) return tmp @cached def getText(self): self.recursionCheck.clear() return self.getTextByType(self.type) def getTextByType(self, textType): service = self.source.service if service is None: return "" info = service and service.info() if not info: return "" if textType == "CryptoBar": self.getCryptoInfo(info) return self.createCryptoBar(info) if textType == "CryptoSpecial": self.getCryptoInfo(info) return self.createCryptoSpecial(info) if textType == "Resolution": return self.createResolution(info) if textType == "ResolutionString": return addspace(self.createResolution(info)) + self.createGamma(info) if textType == "VideoCodec": return self.createVideoCodec(info) if textType == "Gamma": return self.createGamma(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll(config.usage.infobar_frontend_source.value == "settings") if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw if not feraw: feraw = info.getInfoObject(iServiceInformation.sTransponderData) fedata = ConvertToHumanReadable(feraw) else: fedata = self.fedata if textType in self.info_fields: return self.createInfoString(textType, fedata, feraw, info) if textType == "PIDInfo": return self.createPIDInfo(info) if textType == "ServiceRef": return self.createServiceRef(info) if not feraw: return "" if textType == "TransponderFrequency": return self.createFrequency(feraw) if textType == "TransponderFrequencyMHz": return self.createFrequency(fedata) if textType == "TransponderSymbolRate": return self.createSymbolRate(fedata, feraw) if textType == "TransponderPolarization": return self.createPolarization(fedata) if textType == "TransponderFEC": return self.createFEC(fedata, feraw) if textType == "TransponderModulation": return self.createModulation(fedata) if textType == "OrbitalPosition": return self.createOrbPos(feraw) if textType == "TunerType": return self.createTunerType(feraw) if textType == "TunerSystem": return self.createTunerSystem(fedata) if textType == "OrbitalPositionOrTunerSystem": return self.createOrbPosOrTunerSystem(fedata, feraw) if textType == "TerrestrialChannelNumber": return self.createChannelNumber(fedata, feraw) if textType == "TransponderInfoMisPls": return self.createMisPls(fedata) return _("?%s?") % textType text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in caid_data: if caid_entry[3] == request_caid: if request_selected: if int(caid_entry[0], 16) <= int(current_caid, 16) <= int(caid_entry[1], 16): return True else: # request available try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int(caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what)
class BLExtraInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.caid_data = (('0x100', '0x1ff', 'Seca', 'S', True), ('0x500', '0x5ff', 'Via', 'V', True), ('0x600', '0x6ff', 'Irdeto', 'I', True), ('0x900', '0x9ff', 'NDS', 'Nd', True), ('0xb00', '0xbff', 'Conax', 'Co', True), ('0xd00', '0xdff', 'CryptoW', 'Cw', True), ('0xe00', '0xeff', 'PowerVU', 'P', False), ('0x1700', '0x17ff', 'Beta', 'B', True), ('0x1800', '0x18ff', 'Nagra', 'N', True), ('0x2600', '0x2600', 'Biss', 'Bi', False), ('0x4ae0', '0x4ae1', 'Dre', 'D', False), ('0x4aee', '0x4aee', 'BulCrypt', 'B1', False), ('0x5581', '0x5581', 'BulCrypt', 'B2', False)) self.ca_table = (('CryptoCaidSecaAvailable', 'S', False), ('CryptoCaidViaAvailable', 'V', False), ('CryptoCaidIrdetoAvailable', 'I', False), ('CryptoCaidNDSAvailable', 'Nd', False), ('CryptoCaidConaxAvailable', 'Co', False), ('CryptoCaidCryptoWAvailable', 'Cw', False), ('CryptoCaidPowerVUAvailable', 'P', False), ('CryptoCaidBetaAvailable', 'B', False), ('CryptoCaidNagraAvailable', 'N', False), ('CryptoCaidBissAvailable', 'Bi', False), ('CryptoCaidDreAvailable', 'D', False), ('CryptoCaidBulCrypt1Available', 'B1', False), ('CryptoCaidBulCrypt2Available', 'B2', False), ('CryptoCaidSecaSelected', 'S', True), ('CryptoCaidViaSelected', 'V', True), ('CryptoCaidIrdetoSelected', 'I', True), ('CryptoCaidNDSSelected', 'Nd', True), ('CryptoCaidConaxSelected', 'Co', True), ('CryptoCaidCryptoWSelected', 'Cw', True), ('CryptoCaidPowerVUSelected', 'P', True), ('CryptoCaidBetaSelected', 'B', True), ('CryptoCaidNagraSelected', 'N', True), ('CryptoCaidBissSelected', 'Bi', True), ('CryptoCaidDreSelected', 'D', True), ('CryptoCaidBulCrypt1Selected', 'B1', True), ('CryptoCaidBulCrypt2Selected', 'B2', True)) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None return def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = '' self.current_caid = '0' self.current_provid = '0' self.current_ecmpid = '0' def createCryptoBar(self, info): res = '' available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int( self.current_caid, 16) <= int(caid_entry[1], 16): color = '\\c0000??00' else: color = '\\c007?7?7?' try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int( caid_entry[1], 16): color = '\\c00????00' except: pass if color != '\\c007?7?7?' or caid_entry[4]: if res: res += ' ' res += color + caid_entry[3] res += '\\c00??????' return res def createCryptoSeca(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0x100', 16) and int( self.current_caid, 16) <= int('0x1ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if caid >= int('0x100', 16) and caid <= int('0x1ff', 16): color = '\\c00eeee00' except: pass res = color + 'S' res += '\\c00??????' return res def createCryptoVia(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0x500', 16) and int( self.current_caid, 16) <= int('0x5ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if caid >= int('0x500', 16) and caid <= int('0x5ff', 16): color = '\\c00eeee00' except: pass res = color + 'V' res += '\\c00??????' return res def createCryptoIrdeto(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0x600', 16) and int( self.current_caid, 16) <= int('0x6ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if caid >= int('0x600', 16) and caid <= int('0x6ff', 16): color = '\\c00eeee00' except: pass res = color + 'I' res += '\\c00??????' return res def createCryptoNDS(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0x900', 16) and int( self.current_caid, 16) <= int('0x9ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if caid >= int('0x900', 16) and caid <= int('0x9ff', 16): color = '\\c00eeee00' except: pass res = color + 'NDS' res += '\\c00??????' return res def createCryptoConax(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0xb00', 16) and int( self.current_caid, 16) <= int('0xbff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if caid >= int('0xb00', 16) and caid <= int('0xbff', 16): color = '\\c00eeee00' except: pass res = color + 'CO' res += '\\c00??????' return res def createCryptoCryptoW(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0xd00', 16) and int( self.current_caid, 16) <= int('0xdff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if caid >= int('0xd00', 16) and caid <= int('0xdff', 16): color = '\\c00eeee00' except: pass res = color + 'CW' res += '\\c00??????' return res def createCryptoPowerVU(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0xe00', 16) and int( self.current_caid, 16) <= int('0xeff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if caid >= int('0xe00', 16) and caid <= int('0xeff', 16): color = '\\c00eeee00' except: pass res = color + 'P' res += '\\c00??????' return res def createCryptoBeta(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0x1700', 16) and int( self.current_caid, 16) <= int('0x17ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if caid >= int('0x1700', 16) and caid <= int('0x17ff', 16): color = '\\c00eeee00' except: pass res = color + 'B' res += '\\c00??????' return res def createCryptoNagra(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0x1800', 16) and int( self.current_caid, 16) <= int('0x18ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if caid >= int('0x1800', 16) and caid <= int('0x18ff', 16): color = '\\c00eeee00' except: pass res = color + 'N' res += '\\c00??????' return res def createCryptoBiss(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0x2600', 16) and int( self.current_caid, 16) <= int('0x26ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if caid >= int('0x2600', 16) and caid <= int('0x26ff', 16): color = '\\c00eeee00' except: pass res = color + 'BI' res += '\\c00??????' return res def createCryptoDre(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0x4ae0', 16) and int( self.current_caid, 16) <= int('0x4ae1', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if caid >= int('0x4ae0', 16) and caid <= int('0x4ae1', 16): color = '\\c00eeee00' except: pass res = color + 'DC' res += '\\c00??????' return res def createCryptoSpecial(self, info): caid_name = 'FTA' try: for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int( self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ':%04x:%04x:%04x:%04x' % ( int(self.current_caid, 16), int(self.current_provid, 16), info.getInfo( iServiceInformation.sSID), int(self.current_ecmpid, 16)) except: pass return '' def createResolution(self, info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return '' yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ('i', 'p', '')[info.getInfo(iServiceInformation.sProgressive)] fps = str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) return str(xres) + 'x' + str(yres) + mode + fps def createVideoCodec(self, info): return ('MPEG2', 'MPEG4', 'MPEG1', 'MPEG4-II', 'VC1', 'VC1-SM', '')[info.getInfo(iServiceInformation.sVideoType)] def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) if vpid < 0: vpid = 0 if apid < 0: apid = 0 if pcrpid < 0: pcrpid = 0 if sidpid < 0: sidpid = 0 return 'Pids:%04d:%04d:%04d:%05d' % (vpid, apid, pcrpid, sidpid) def createTransponderInfo(self, fedata, feraw): return addspace(self.createTunerSystem(fedata)) + addspace( self.createFrequency(fedata)) + addspace( self.createPolarization(fedata) ) + addspace(self.createSymbolRate(fedata)) + addspace( self.createFEC(fedata)) + addspace( self.createModulation(fedata)) + self.createOrbPos(feraw) def createFrequency(self, fedata): frequency = fedata.get('frequency') if frequency: return str(frequency / 1000) return '' def createSymbolRate(self, fedata): symbolrate = fedata.get('symbol_rate') if symbolrate: return str(symbolrate / 1000) return '' def createPolarization(self, fedata): polarization = fedata.get('polarization_abbreviation') if polarization: return polarization return '' def createFEC(self, fedata): fec = fedata.get('fec_inner') if fec: return fec return '' def createModulation(self, fedata): modulation = fedata.get('modulation') if modulation: return modulation return '' def createTunerType(self, feraw): tunertype = feraw.get('tuner_type') if tunertype: return tunertype return '' def createTunerSystem(self, fedata): tunersystem = fedata.get('system') if tunersystem: return tunersystem return '' def createOrbPos(self, feraw): orbpos = feraw.get('orbital_position') if orbpos > 1800: return str(float(3600 - orbpos) / 10.0) + '\xc2\xb0 W' if orbpos > 0: return str(float(orbpos) / 10.0) + '\xc2\xb0 E' return '' def createOrbPosOrTunerSystem(self, fedata, feraw): orbpos = self.createOrbPos(feraw) if orbpos is not '': return orbpos return self.createTunerSystem(fedata) def createTransponderName(self, feraw): orb_pos = '' orbpos = feraw.get('orbital_position') if orbpos > 1800: if orbpos == 3590: orb_pos = 'Thor/Intelsat' elif orbpos == 3560: orb_pos = 'Amos (4' elif orbpos == 3550: orb_pos = 'Atlantic Bird' elif orbpos == 3530: orb_pos = 'Nilesat/Atlantic Bird' elif orbpos == 3520: orb_pos = 'Atlantic Bird' elif orbpos == 3475: orb_pos = 'Atlantic Bird' elif orbpos == 3460: orb_pos = 'Express' elif orbpos == 3450: orb_pos = 'Telstar' elif orbpos == 3420: orb_pos = 'Intelsat' elif orbpos == 3380: orb_pos = 'Nss' elif orbpos == 3355: orb_pos = 'Intelsat' elif orbpos == 3325: orb_pos = 'Intelsat' elif orbpos == 3300: orb_pos = 'Hispasat' elif orbpos == 3285: orb_pos = 'Intelsat' elif orbpos == 3170: orb_pos = 'Intelsat' elif orbpos == 3150: orb_pos = 'Intelsat' elif orbpos == 3070: orb_pos = 'Intelsat' elif orbpos == 3045: orb_pos = 'Intelsat' elif orbpos == 3020: orb_pos = 'Intelsat 9' elif orbpos == 2990: orb_pos = 'Amazonas' elif orbpos == 2900: orb_pos = 'Star One' elif orbpos == 2880: orb_pos = 'AMC 6 (72' elif orbpos == 2875: orb_pos = 'Echostar 6' elif orbpos == 2860: orb_pos = 'Horizons' elif orbpos == 2810: orb_pos = 'AMC5' elif orbpos == 2780: orb_pos = 'NIMIQ 4' elif orbpos == 2690: orb_pos = 'NIMIQ 1' elif orbpos == 3592: orb_pos = 'Thor/Intelsat' elif orbpos == 2985: orb_pos = 'Echostar 3,12' elif orbpos == 2830: orb_pos = 'Echostar 8' elif orbpos == 2630: orb_pos = 'Galaxy 19' elif orbpos == 2500: orb_pos = 'Echostar 10,11' elif orbpos == 2502: orb_pos = 'DirectTV 5' elif orbpos == 2410: orb_pos = 'Echostar 7 Anik F3' elif orbpos == 2391: orb_pos = 'Galaxy 23' elif orbpos == 2390: orb_pos = 'Echostar 9' elif orbpos == 2412: orb_pos = 'DirectTV 7S' elif orbpos == 2310: orb_pos = 'Galaxy 27' elif orbpos == 2311: orb_pos = 'Ciel 2' elif orbpos == 2120: orb_pos = 'Echostar 2' else: orb_pos = str(float(3600 - orbpos) / 10.0) + 'W' elif orbpos > 0: if orbpos == 192: orb_pos = 'Astra 1F' elif orbpos == 130: orb_pos = 'Hot Bird 6,7A,8' elif orbpos == 235: orb_pos = 'Astra 1E' elif orbpos == 1100: orb_pos = 'BSat 1A,2A' elif orbpos == 1101: orb_pos = 'N-Sat 110' elif orbpos == 1131: orb_pos = 'KoreaSat 5' elif orbpos == 1440: orb_pos = 'SuperBird 7,C2' elif orbpos == 1006: orb_pos = 'AsiaSat 2' elif orbpos == 1030: orb_pos = 'Express A2' elif orbpos == 1056: orb_pos = 'Asiasat 3S' elif orbpos == 1082: orb_pos = 'NSS 11' elif orbpos == 881: orb_pos = 'ST1' elif orbpos == 900: orb_pos = 'Yamal 201' elif orbpos == 917: orb_pos = 'Mesat' elif orbpos == 950: orb_pos = 'Insat 4B' elif orbpos == 951: orb_pos = 'NSS 6' elif orbpos == 765: orb_pos = 'Telestar' elif orbpos == 785: orb_pos = 'ThaiCom 5' elif orbpos == 800: orb_pos = 'Express' elif orbpos == 830: orb_pos = 'Insat 4A' elif orbpos == 850: orb_pos = 'Intelsat 709' elif orbpos == 750: orb_pos = 'Abs' elif orbpos == 720: orb_pos = 'Intelsat' elif orbpos == 705: orb_pos = 'Eutelsat W5' elif orbpos == 685: orb_pos = 'Intelsat' elif orbpos == 620: orb_pos = 'Intelsat 902' elif orbpos == 600: orb_pos = 'Intelsat 904' elif orbpos == 570: orb_pos = 'Nss' elif orbpos == 530: orb_pos = 'Express AM22' elif orbpos == 480: orb_pos = 'Eutelsat 2F2' elif orbpos == 450: orb_pos = 'Intelsat' elif orbpos == 420: orb_pos = 'Turksat 2A' elif orbpos == 400: orb_pos = 'Express AM1' elif orbpos == 390: orb_pos = 'Hellas Sat 2' elif orbpos == 380: orb_pos = 'Paksat 1' elif orbpos == 360: orb_pos = 'Eutelsat Sesat' elif orbpos == 335: orb_pos = 'Astra 1M' elif orbpos == 330: orb_pos = 'Eurobird 3' elif orbpos == 328: orb_pos = 'Galaxy 11' elif orbpos == 315: orb_pos = 'Astra 5A' elif orbpos == 310: orb_pos = 'Turksat' elif orbpos == 305: orb_pos = 'Arabsat' elif orbpos == 285: orb_pos = 'Eurobird 1' elif orbpos == 284: orb_pos = 'Eurobird/Astra' elif orbpos == 282: orb_pos = 'Eurobird/Astra' elif orbpos == 1220: orb_pos = 'AsiaSat' elif orbpos == 1380: orb_pos = 'Telstar 18' elif orbpos == 260: orb_pos = 'Badr 3/4' elif orbpos == 255: orb_pos = 'Eurobird 2' elif orbpos == 215: orb_pos = 'Eutelsat' elif orbpos == 216: orb_pos = 'Eutelsat W6' elif orbpos == 210: orb_pos = 'AfriStar 1' elif orbpos == 160: orb_pos = 'Eutelsat W2' elif orbpos == 100: orb_pos = 'Eutelsat W1' elif orbpos == 90: orb_pos = 'Eurobird 9' elif orbpos == 70: orb_pos = 'Eutelsat W3A' elif orbpos == 50: orb_pos = 'Sirius 4' elif orbpos == 48: orb_pos = 'Sirius 4' elif orbpos == 30: orb_pos = 'Telecom 2' else: orb_pos = str(float(orbpos) / 10.0) + 'E' return orb_pos def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) @cached def getText(self): service = self.source.service if service is None: return '' info = service and service.info() if not info: return '' if self.type == 'CryptoInfo': self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.getValue()) > 0: return addspace(self.createCryptoBar( info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace( self.current_source) + self.createCryptoSpecial(info) if self.type == 'CryptoBar': if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoBar(info) else: return '' if self.type == 'CryptoSeca': if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoSeca(info) else: return '' if self.type == 'CryptoVia': if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoVia(info) else: return '' if self.type == 'CryptoIrdeto': if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoIrdeto(info) else: return '' if self.type == 'CryptoNDS': if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoNDS(info) else: return '' if self.type == 'CryptoConax': if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoConax(info) else: return '' if self.type == 'CryptoCryptoW': if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoCryptoW(info) else: return '' if self.type == 'CryptoBeta': if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoBeta(info) else: return '' if self.type == 'CryptoNagra': if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoNagra(info) else: return '' if self.type == 'CryptoBiss': if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoBiss(info) else: return '' if self.type == 'CryptoDre': if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoDre(info) else: return '' if self.type == 'CryptoSpecial': if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoSpecial(info) else: return '' if self.type == 'ResolutionString': return self.createResolution(info) elif self.type == 'VideoCodec': return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll(True) if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw fedata = self.fedata if not feraw or not fedata: return '' if self.type == 'All': self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.getValue()) > 0: return addspace( self.createProviderName(info) ) + self.createTransponderInfo( fedata, feraw) + '\n' + addspace( self.createCryptoBar(info)) + addspace( self.createCryptoSpecial(info)) + '\n' + addspace( self.createPIDInfo(info)) + addspace( self.createVideoCodec( info)) + self.createResolution(info) else: return addspace(self.createProviderName( info)) + self.createTransponderInfo( fedata, feraw) + '\n' + addspace(self.createCryptoBar( info)) + self.current_source + '\n' + addspace( self.createCryptoSpecial(info)) + addspace( self.createVideoCodec( info)) + self.createResolution(info) if self.type == 'ServiceInfo': return addspace(self.createProviderName(info)) + addspace( self.createTunerSystem(fedata)) + addspace( self.createFrequency(fedata)) + addspace( self.createPolarization(fedata)) + addspace( self.createSymbolRate(fedata)) + addspace( self.createFEC(fedata)) + addspace( self.createModulation(fedata)) + addspace( self.createOrbPos(feraw)) + addspace( self.createVideoCodec(info) ) + self.createResolution(info) elif self.type == 'TransponderInfo2line': return addspace(self.createProviderName(info)) + addspace( self.createTunerSystem(fedata)) + addspace( self.createTransponderName(feraw) ) + '\n' + self.createFrequency( fedata) + addspace(' MHz') + addspace( self.createPolarization(fedata)) + addspace( self.createSymbolRate(fedata) ) + self.createModulation(fedata) + '-' + addspace( self.createFEC(fedata)) elif self.type == 'TransponderInfo': return self.createTransponderInfo(fedata, feraw) elif self.type == 'TransponderFrequency': return self.createFrequency(fedata) elif self.type == 'TransponderSymbolRate': return self.createSymbolRate(fedata) elif self.type == 'TransponderPolarization': return self.createPolarization(fedata) elif self.type == 'TransponderFEC': return self.createFEC(fedata) elif self.type == 'TransponderModulation': return self.createModulation(fedata) elif self.type == 'OrbitalPosition': return self.createOrbPos(feraw) elif self.type == 'TunerType': return self.createTunerType(feraw) elif self.type == 'TunerSystem': return self.createTunerSystem(fedata) elif self.type == 'OrbitalPositionOrTunerSystem': return self.createOrbPosOrTunerSystem(fedata, feraw) elif self.type == 'PIDInfo': return self.createPIDInfo(info) else: return _('invalid type') text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False else: request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if caid_entry[3] == request_caid: if request_selected: if int(current_caid, 16) >= int(caid_entry[0], 16) and int( current_caid, 16) <= int(caid_entry[1], 16): return True else: try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int( caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what) return
class PliExInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.caid_data = ( ( "0x100", "0x1ff", "Seca", "S", True ), ( "0x500", "0x5ff", "Via", "V", True ), ( "0x600", "0x6ff", "Irdeto", "I", True ), ( "0x900", "0x9ff", "NDS", "Nd", True ), ( "0xb00", "0xbff", "Conax", "Co", True ), ( "0xd00", "0xdff", "CryptoW", "Cw", True ), ( "0xe00", "0xeff", "PowerVU", "P", True ), ("0x1700", "0x17ff", "Beta", "B", True ), ("0x1800", "0x18ff", "Nagra", "N", True ), ("0x2600", "0x2600", "Biss", "Bi", True ), ("0x2700", "0x2700", "Exset", "Ex", True ), ("0x4ae0", "0x4ae1", "Dre", "D", True ), ("0x4aee", "0x4aee", "BulCrypt", "B1", False ), ("0x5581", "0x5581", "BulCrypt", "B2", False ) ) self.ca_table = ( ("CryptoCaidSecaAvailable", "S", False), ("CryptoCaidViaAvailable", "V", False), ("CryptoCaidIrdetoAvailable", "I", False), ("CryptoCaidNDSAvailable", "Nd", False), ("CryptoCaidConaxAvailable", "Co", False), ("CryptoCaidCryptoWAvailable", "Cw", False), ("CryptoCaidPowerVUAvailable", "P", False), ("CryptoCaidBetaAvailable", "B", False), ("CryptoCaidNagraAvailable", "N", False), ("CryptoCaidExsetAvailable", "Ex", False), ("CryptoCaidBissAvailable", "Bi", False), ("CryptoCaidDreAvailable", "D", False), ("CryptoCaidBulCrypt1Available","B1", False), ("CryptoCaidBulCrypt2Available","B2", False), ("CryptoCaidSecaSelected", "S", True), ("CryptoCaidViaSelected", "V", True), ("CryptoCaidIrdetoSelected", "I", True), ("CryptoCaidNDSSelected", "Nd", True), ("CryptoCaidConaxSelected", "Co", True), ("CryptoCaidCryptoWSelected", "Cw", True), ("CryptoCaidPowerVUSelected", "P", True), ("CryptoCaidBetaSelected", "B", True), ("CryptoCaidNagraSelected", "N", True), ("CryptoCaidBissSelected", "Bi", True), ("CryptoCaidExsetSelected", "Ex", True), ("CryptoCaidDreSelected", "D", True), ("CryptoCaidBulCrypt1Selected", "B1", True), ("CryptoCaidBulCrypt2Selected", "B2", True), ) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None def getCryptoInfo(self, info): if (info.getInfo(iServiceInformation.sIsCrypted) == 1): data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = "" self.current_caid = "0" self.current_provid = "0" self.current_ecmpid = "0" def createCryptoBar(self, info): res = "" available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int(self.current_caid, 16) <= int(caid_entry[1], 16): color="\c0000??00" else: color = "\c007?7?7?" try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int(caid_entry[1], 16): color="\c00????00" except: pass if color != "\c007?7?7?" or caid_entry[4]: if res: res += " " res += color + caid_entry[3] res += "\c00??????" return res def createCryptoSpecial(self, info): caid_name = "FTA" try: for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int(self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ":%04x:%04x:%04x:%04x" % (int(self.current_caid,16), int(self.current_provid,16), info.getInfo(iServiceInformation.sSID), int(self.current_ecmpid,16)) except: pass return "" def createResolution(self, info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return "" yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ("i", "p", "")[info.getInfo(iServiceInformation.sProgressive)] fps = str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) return str(xres) + "x" + str(yres) + mode + fps def createVideoCodec(self, info): return ("MPEG2", "MPEG4", "MPEG1", "MPEG4-II", "VC1", "VC1-SM", "")[info.getInfo(iServiceInformation.sVideoType)] def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) if vpid < 0 : vpid = 0 if apid < 0 : apid = 0 if pcrpid < 0 : pcrpid = 0 if sidpid < 0 : sidpid = 0 return "Pids:%04d:%04d:%04d:%05d" % (vpid, apid, pcrpid, sidpid) def createTransponderInfo(self, fedata, feraw): return addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) \ + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) \ + self.createOrbPos(feraw) def createFrequency(self, feraw): frequency = feraw.get("frequency") if frequency: if "DVB-T" in feraw.get("tuner_type"): return str(int(frequency / 1000000 + 0.5)) else: return str(int(frequency / 1000 + 0.5)) return "" def createSymbolRate(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): bandwidth = fedata.get("bandwidth") if bandwidth: return bandwidth else: symbolrate = fedata.get("symbol_rate") if symbolrate: return str(symbolrate / 1000) return "" def createPolarization(self, fedata): polarization = fedata.get("polarization_abbreviation") if polarization: return polarization return "" def createFEC(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): code_rate_lp = fedata.get("code_rate_lp") code_rate_hp = fedata.get("code_rate_hp") if code_rate_lp and code_rate_hp: return code_rate_lp + "-" + code_rate_hp else: fec = fedata.get("fec_inner") if fec: return fec return "" def createModulation(self, fedata): if fedata.get("tuner_type") == _("Terrestrial"): constellation = fedata.get("constellation") if constellation: return constellation else: modulation = fedata.get("modulation") if modulation: return modulation return "" def createTunerType(self, feraw): tunertype = feraw.get("tuner_type") if tunertype: return tunertype return "" def createTunerSystem(self, fedata): tunersystem = fedata.get("system") if tunersystem: return tunersystem return "" def createOrbPos(self, feraw): orbpos = feraw.get("orbital_position") if orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "\xc2\xb0 W" elif orbpos > 0: return str((float(orbpos)) / 10.0) + "\xc2\xb0 E" return "" def createOrbPosOrTunerSystem(self, fedata,feraw): orbpos = self.createOrbPos(feraw) if orbpos is not "": return orbpos return self.createTunerSystem(fedata) def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) @cached def getText(self): service = self.source.service if service is None: return "" info = service and service.info() if not info: return "" if self.type == "CryptoInfo": self.getCryptoInfo(info) if config.usage.show_cryptoinfo.value: return addspace(self.createCryptoBar(info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace(self.current_source) + self.createCryptoSpecial(info) if self.type == "CryptoBar": self.getCryptoInfo(info) return self.createCryptoBar(info) if self.type == "CryptoSpecial": self.getCryptoInfo(info) return self.createCryptoSpecial(info) if self.type == "ResolutionString": return self.createResolution(info) if self.type == "VideoCodec": return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll(False) if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw fedata = self.fedata if not feraw or not fedata: return "" if self.type == "All": self.getCryptoInfo(info) if config.usage.show_cryptoinfo.value: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata,feraw) + "\n" \ + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + "\n" \ + addspace(self.createPIDInfo(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata,feraw) + "\n" \ + addspace(self.createCryptoBar(info)) + self.current_source + "\n" \ + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "ServiceInfo": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) \ + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) \ + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "TransponderInfo": return self.createTransponderInfo(fedata,feraw) if self.type == "TransponderFrequency": return self.createFrequency(feraw) if self.type == "TransponderSymbolRate": return self.createSymbolRate(fedata, feraw) if self.type == "TransponderPolarization": return self.createPolarization(fedata) if self.type == "TransponderFEC": return self.createFEC(fedata, feraw) if self.type == "TransponderModulation": return self.createModulation(fedata) if self.type == "OrbitalPosition": return self.createOrbPos(feraw) if self.type == "TunerType": return self.createTunerType(feraw) if self.type == "TunerSystem": return self.createTunerSystem(fedata) if self.type == "OrbitalPositionOrTunerSystem": return self.createOrbPosOrTunerSystem(fedata,feraw) if self.type == "PIDInfo": return self.createPIDInfo(info) return _("invalid type") text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if caid_entry[3] == request_caid: if(request_selected): if int(current_caid, 16) >= int(caid_entry[0], 16) and int(current_caid, 16) <= int(caid_entry[1], 16): return True else: # request available try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int(caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what)
class PliExtraInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.caid_data = (("0x100", "0x1ff", "Seca", "S", True), ("0x500", "0x5ff", "Via", "V", True), ("0x600", "0x6ff", "Irdeto", "I", True), ("0x900", "0x9ff", "NDS", "Nd", True), ("0xb00", "0xbff", "Conax", "Co", True), ("0xd00", "0xdff", "CryptoW", "Cw", True), ("0xe00", "0xeff", "PowerVU", "P", False), ("0x1700", "0x17ff", "Beta", "B", True), ("0x1800", "0x18ff", "Nagra", "N", True), ("0x2600", "0x2600", "Biss", "Bi", False), ("0x4ae0", "0x4ae1", "Dre", "D", False), ("0x4aee", "0x4aee", "BulCrypt", "B1", False), ("0x5581", "0x5581", "BulCrypt", "B2", False)) self.ca_table = ( ("CryptoCaidSecaAvailable", "S", False), ("CryptoCaidViaAvailable", "V", False), ("CryptoCaidIrdetoAvailable", "I", False), ("CryptoCaidNDSAvailable", "Nd", False), ("CryptoCaidConaxAvailable", "Co", False), ("CryptoCaidCryptoWAvailable", "Cw", False), ("CryptoCaidPowerVUAvailable", "P", False), ("CryptoCaidBetaAvailable", "B", False), ("CryptoCaidNagraAvailable", "N", False), ("CryptoCaidBissAvailable", "Bi", False), ("CryptoCaidDreAvailable", "D", False), ("CryptoCaidBulCrypt1Available", "B1", False), ("CryptoCaidBulCrypt2Available", "B2", False), ("CryptoCaidSecaSelected", "S", True), ("CryptoCaidViaSelected", "V", True), ("CryptoCaidIrdetoSelected", "I", True), ("CryptoCaidNDSSelected", "Nd", True), ("CryptoCaidConaxSelected", "Co", True), ("CryptoCaidCryptoWSelected", "Cw", True), ("CryptoCaidPowerVUSelected", "P", True), ("CryptoCaidBetaSelected", "B", True), ("CryptoCaidNagraSelected", "N", True), ("CryptoCaidBissSelected", "Bi", True), ("CryptoCaidDreSelected", "D", True), ("CryptoCaidBulCrypt1Selected", "B1", True), ("CryptoCaidBulCrypt2Selected", "B2", True), ) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None def getCryptoInfo(self, info): if (info.getInfo(iServiceInformation.sIsCrypted) == 1): data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = "" self.current_caid = "0" self.current_provid = "0" self.current_ecmpid = "0" def createCryptoBar(self, info): res = "" available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int( self.current_caid, 16) <= int(caid_entry[1], 16): color = "\c0000??00" else: color = "\c007?7?7?" try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int( caid_entry[1], 16): color = "\c00????00" except: pass if color != "\c007?7?7?" or caid_entry[4]: if res: res += " " res += color + caid_entry[3] res += "\c00??????" return res def createCryptoSpecial(self, info): caid_name = "FTA" try: for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int( self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ":%04x:%04x:%04x:%04x" % ( int(self.current_caid, 16), int(self.current_provid, 16), info.getInfo( iServiceInformation.sSID), int(self.current_ecmpid, 16)) except: pass return "" def createResolution(self, info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return "" yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ("i", "p", "")[info.getInfo(iServiceInformation.sProgressive)] fps = str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) return str(xres) + "x" + str(yres) + mode + fps def createVideoCodec(self, info): return ("MPEG2", "MPEG4", "MPEG1", "MPEG4-II", "VC1", "VC1-SM", "")[info.getInfo(iServiceInformation.sVideoType)] def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) if vpid < 0: vpid = 0 if apid < 0: apid = 0 if pcrpid < 0: pcrpid = 0 if sidpid < 0: sidpid = 0 return "Pids:%04d:%04d:%04d:%05d" % (vpid, apid, pcrpid, sidpid) def createTransponderInfo(self, fedata, feraw): return addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata)) \ + addspace(self.createSymbolRate(fedata)) + addspace(self.createFEC(fedata)) + addspace(self.createModulation(fedata)) \ + self.createOrbPos(feraw) def createFrequency(self, fedata): frequency = fedata.get("frequency") if frequency: return str(frequency / 1000) return "" def createSymbolRate(self, fedata): symbolrate = fedata.get("symbol_rate") if symbolrate: return str(symbolrate / 1000) return "" def createPolarization(self, fedata): polarization = fedata.get("polarization_abbreviation") if polarization: return polarization return "" def createFEC(self, fedata): fec = fedata.get("fec_inner") if fec: return fec return "" def createModulation(self, fedata): modulation = fedata.get("modulation") if modulation: return modulation return "" def createTunerType(self, feraw): tunertype = feraw.get("tuner_type") if tunertype: return tunertype return "" def createTunerSystem(self, fedata): tunersystem = fedata.get("system") if tunersystem: return tunersystem return "" def createOrbPos(self, feraw): orbpos = feraw.get("orbital_position") if orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "\xc2\xb0 W" elif orbpos > 0: return str((float(orbpos)) / 10.0) + "\xc2\xb0 E" return "" def createOrbPosOrTunerSystem(self, fedata, feraw): orbpos = self.createOrbPos(feraw) if orbpos is not "": return orbpos return self.createTunerSystem(fedata) def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) @cached def getText(self): service = self.source.service if service is None: return "" info = service and service.info() if not info: return "" if self.type == "CryptoInfo": self.getCryptoInfo(info) # iq - [ # if config.usage.show_cryptoinfo.value: if config.usage.show_cryptoinfo.value != "off": # ] return addspace(self.createCryptoBar( info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace( self.current_source) + self.createCryptoSpecial(info) if self.type == "CryptoBar": self.getCryptoInfo(info) return self.createCryptoBar(info) if self.type == "CryptoSpecial": self.getCryptoInfo(info) return self.createCryptoSpecial(info) if self.type == "ResolutionString": return self.createResolution(info) if self.type == "VideoCodec": return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll(False) if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw fedata = self.fedata if not feraw or not fedata: return "" if self.type == "All": self.getCryptoInfo(info) # iq - [ # if config.usage.show_cryptoinfo.value: if config.usage.show_cryptoinfo.value != "off": # ] return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata,feraw) + "\n" \ + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + "\n" \ + addspace(self.createPIDInfo(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata,feraw) + "\n" \ + addspace(self.createCryptoBar(info)) + self.current_source + "\n" \ + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "ServiceInfo": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata)) \ + addspace(self.createSymbolRate(fedata)) + addspace(self.createFEC(fedata)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) \ + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "TransponderInfo": return self.createTransponderInfo(fedata, feraw) if self.type == "TransponderFrequency": return self.createFrequency(fedata) if self.type == "TransponderSymbolRate": return self.createSymbolRate(fedata) if self.type == "TransponderPolarization": return self.createPolarization(fedata) if self.type == "TransponderFEC": return self.createFEC(fedata) if self.type == "TransponderModulation": return self.createModulation(fedata) if self.type == "OrbitalPosition": return self.createOrbPos(feraw) if self.type == "TunerType": return self.createTunerType(feraw) if self.type == "TunerSystem": return self.createTunerSystem(fedata) if self.type == "OrbitalPositionOrTunerSystem": return self.createOrbPosOrTunerSystem(fedata, feraw) if self.type == "PIDInfo": return self.createPIDInfo(info) return _("invalid type") text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if caid_entry[3] == request_caid: if (request_selected): if int(current_caid, 16) >= int(caid_entry[0], 16) and int( current_caid, 16) <= int(caid_entry[1], 16): return True else: # request available try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int( caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what)
class BhExtraInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.caid_data = (('0x1700', '0x17ff', 'Beta', 'B', True), ('0x600', '0x6ff', 'Irdeto', 'I', True), ('0x100', '0x1ff', 'Seca', 'S', True), ('0x500', '0x5ff', 'Via', 'V', True), ('0x1800', '0x18ff', 'Nagra', 'N', True), ('0xd00', '0xdff', 'CryptoW', 'CW', True), ('0x900', '0x9ff', 'NDS', 'ND', True), ('0xb00', '0xbff', 'Conax', 'CO', True), ('0x4ae0', '0x4ae1', 'Dre', 'DC', True), ('0x5581', '0x5581', 'BulCrypt', 'BU', True), ('0x2600', '0x2600', 'Biss', 'BI', True), ('0xe00', '0xeff', 'PowerVU', 'PV', True), ('0x4aee', '0x4aee', 'BulCrypt', 'BU', False)) self.ca_table = (('CryptoCaidBetaAvailable', 'B', False), ('CryptoCaidIrdetoAvailable', 'I', False), ('CryptoCaidSecaAvailable', 'S', False), ('CryptoCaidViaAvailable', 'V', False), ('CryptoCaidNagraAvailable', 'N', False), ('CryptoCaidCryptoWAvailable', 'CW', False), ('CryptoCaidNDSAvailable', 'ND', False), ('CryptoCaidConaxAvailable', 'CO', False), ('CryptoCaidDreAvailable', 'DC', False), ('CryptoCaidBulCrypt2Available', 'BU', False), ('CryptoCaidBissAvailable', 'BI', False), ('CryptoCaidPowerVUAvailable', 'PV', False), ('CryptoCaidBulCrypt1Available', 'BU', False), ('CryptoCaidBetaSelected', 'B', True), ('CryptoCaidIrdetoSelected', 'I', True), ('CryptoCaidSecaSelected', 'S', True), ('CryptoCaidViaSelected', 'V', True), ('CryptoCaidNagraSelected', 'N', True), ('CryptoCaidCryptoWSelected', 'CW', True), ('CryptoCaidNDSSelected', 'ND', True), ('CryptoCaidConaxSelected', 'CO', True), ('CryptoCaidDreSelected', 'DC', True), ('CryptoCaidBulCrypt2Selected', 'BU', True), ('CryptoCaidBissSelected', 'BI', True), ('CryptoCaidPowerVUSelected', 'PV', True), ('CryptoCaidBulCrypt1Selected', 'BU', True)) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None return def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = '' self.current_caid = '0' self.current_provid = '0' self.current_ecmpid = '0' def createCryptoBar(self, info): res = '' available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int(self.current_caid, 16) <= int(caid_entry[1], 16): color = '\\c0000??00' else: color = '\\c007?7?7?' try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int(caid_entry[1], 16): color = '\\c00????00' except: pass if color != '\\c007?7?7?' or caid_entry[4]: if res: res += ' ' res += color + caid_entry[3] res += '\\c00??????' return res def createCryptoSpecial(self, info): caid_name = 'Free To Air' try: for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int(self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ':%04x:%04x:%04x:%04x' % (int(self.current_caid, 16), int(self.current_provid, 16), info.getInfo(iServiceInformation.sSID), int(self.current_ecmpid, 16)) except: pass return '' def createResolution(self, info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return '' yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ('i', 'p', ' ')[info.getInfo(iServiceInformation.sProgressive)] fps = str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) return str(xres) + 'x' + str(yres) + mode + fps def createVideoCodec(self, info): return ('MPEG2', 'MPEG4', 'MPEG1', 'MPEG4-II', 'VC1', 'VC1-SM', '')[info.getInfo(iServiceInformation.sVideoType)] def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) tsid = info.getInfo(iServiceInformation.sTSID) onid = info.getInfo(iServiceInformation.sONID) if vpid < 0: vpid = 0 if apid < 0: apid = 0 if pcrpid < 0: pcrpid = 0 if sidpid < 0: sidpid = 0 if tsid < 0: tsid = 0 if onid < 0: onid = 0 return '%d-%d:%05d:%04d:%04d:%04d' % (onid, tsid, sidpid, vpid, apid, pcrpid) def createTransponderInfo(self, fedata, feraw): if 'DVB-T' in feraw.get('tuner_type'): tmp = addspace(self.createChannelNumber(fedata, feraw)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) else: tmp = addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) return addspace(self.createTunerSystem(fedata)) + tmp + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) def createFrequency(self, feraw): frequency = feraw.get('frequency') if frequency: if 'DVB-T' in feraw.get('tuner_type'): return str(int(frequency / 1000000.0 + 0.5)) else: return str(int(frequency / 1000 + 0.5)) return '' def createChannelNumber(self, fedata, feraw): return 'DVB-T' in feraw.get('tuner_type') and fedata.get('channel') or '' def createSymbolRate(self, fedata, feraw): if 'DVB-T' in feraw.get('tuner_type'): bandwidth = fedata.get('bandwidth') if bandwidth: return bandwidth else: symbolrate = fedata.get('symbol_rate') if symbolrate: return str(symbolrate / 1000) return '' def createPolarization(self, fedata): return fedata.get('polarization_abbreviation') or '' def createFEC(self, fedata, feraw): if 'DVB-T' in feraw.get('tuner_type'): code_rate_lp = fedata.get('code_rate_lp') code_rate_hp = fedata.get('code_rate_hp') if code_rate_lp and code_rate_hp: return code_rate_lp + '-' + code_rate_hp else: fec = fedata.get('fec_inner') if fec: return fec return '' def createModulation(self, fedata): if fedata.get('tuner_type') == _('Terrestrial'): constellation = fedata.get('constellation') if constellation: return constellation else: modulation = fedata.get('modulation') if modulation: return modulation return '' def createTunerType(self, feraw): return feraw.get('tuner_type') or '' def createTunerSystem(self, fedata): return fedata.get('system') or '' def createOrbPos(self, feraw): orbpos = feraw.get('orbital_position') if orbpos > 1800: return str(float(3600 - orbpos) / 10.0) + '\xc2\xb0 W' if orbpos > 0: return str(float(orbpos) / 10.0) + '\xc2\xb0 E' return '' def createOrbPosOrTunerSystem(self, fedata, feraw): orbpos = self.createOrbPos(feraw) if orbpos is not '': return orbpos return self.createTunerSystem(fedata) def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) @cached def getText(self): service = self.source.service if service is None: return '' info = service and service.info() if not info: return '' if self.type == 'CryptoInfo': self.getCryptoInfo(info) if config.usage.show_cryptoinfo.value: return addspace(self.createCryptoBar(info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace(self.current_source) + self.createCryptoSpecial(info) if self.type == 'CryptoBar': self.getCryptoInfo(info) return self.createCryptoBar(info) elif self.type == 'CryptoSpecial': self.getCryptoInfo(info) return self.createCryptoSpecial(info) elif self.type == 'ResolutionString': return self.createResolution(info) elif self.type == 'VideoCodec': return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll(config.usage.infobar_frontend_source.value == 'settings') if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw if not feraw: feraw = info.getInfoObject(iServiceInformation.sTransponderData) if not feraw: return '' fedata = ConvertToHumanReadable(feraw) else: fedata = self.fedata if self.type == 'All': self.getCryptoInfo(info) if config.usage.show_cryptoinfo.value: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw) + '\n' + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + '\n' + addspace(self.createPIDInfo(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw) + '\n' + addspace(self.createCryptoBar(info)) + self.current_source + '\n' + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == 'ServiceInfo': return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) elif self.type == 'TransponderInfo': return self.createTransponderInfo(fedata, feraw) elif self.type == 'TransponderFrequency': return self.createFrequency(feraw) elif self.type == 'TransponderSymbolRate': return self.createSymbolRate(fedata, feraw) elif self.type == 'TransponderPolarization': return self.createPolarization(fedata) elif self.type == 'TransponderFEC': return self.createFEC(fedata, feraw) elif self.type == 'TransponderModulation': return self.createModulation(fedata) elif self.type == 'OrbitalPosition': return self.createOrbPos(feraw) elif self.type == 'TunerType': return self.createTunerType(feraw) elif self.type == 'TunerSystem': return self.createTunerSystem(fedata) elif self.type == 'OrbitalPositionOrTunerSystem': return self.createOrbPosOrTunerSystem(fedata, feraw) elif self.type == 'PIDInfo': return self.createPIDInfo(info) elif self.type == 'TerrestrialChannelNumber': return self.createChannelNumber(fedata, feraw) else: return _('invalid type') text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False else: request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if caid_entry[3] == request_caid: if request_selected: if int(current_caid, 16) >= int(caid_entry[0], 16) and int(current_caid, 16) <= int(caid_entry[1], 16): return True else: try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int(caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what) return
class KravenExtraInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.caid_data = (('0x100', '0x1ff', 'Seca', 'S', True), ('0x500', '0x5ff', 'Via', 'V', True), ('0x600', '0x6ff', 'Irdeto', 'I', True), ('0x900', '0x9ff', 'NDS', 'Nd', True), ('0xb00', '0xbff', 'Conax', 'Co', True), ('0xd00', '0xdff', 'CryptoW', 'Cw', True), ('0xe00', '0xeff', 'PowerVU', 'P', False), ('0x1700', '0x17ff', 'Beta', 'B', True), ('0x1800', '0x18ff', 'Nagra', 'N', True), ('0x2600', '0x2600', 'Biss', 'Bi', False), ('0x4ae0', '0x4ae1', 'Dre', 'D', False), ('0x4aee', '0x4aee', 'BulCrypt', 'B1', False), ('0x5581', '0x5581', 'BulCrypt', 'B2', False)) self.ca_table = (('CryptoCaidSecaAvailable', 'S', False), ('CryptoCaidViaAvailable', 'V', False), ('CryptoCaidIrdetoAvailable', 'I', False), ('CryptoCaidNDSAvailable', 'Nd', False), ('CryptoCaidConaxAvailable', 'Co', False), ('CryptoCaidCryptoWAvailable', 'Cw', False), ('CryptoCaidPowerVUAvailable', 'P', False), ('CryptoCaidBetaAvailable', 'B', False), ('CryptoCaidNagraAvailable', 'N', False), ('CryptoCaidBissAvailable', 'Bi', False), ('CryptoCaidDreAvailable', 'D', False), ('CryptoCaidBulCrypt1Available', 'B1', False), ('CryptoCaidBulCrypt2Available', 'B2', False), ('CryptoCaidSecaSelected', 'S', True), ('CryptoCaidViaSelected', 'V', True), ('CryptoCaidIrdetoSelected', 'I', True), ('CryptoCaidNDSSelected', 'Nd', True), ('CryptoCaidConaxSelected', 'Co', True), ('CryptoCaidCryptoWSelected', 'Cw', True), ('CryptoCaidPowerVUSelected', 'P', True), ('CryptoCaidBetaSelected', 'B', True), ('CryptoCaidNagraSelected', 'N', True), ('CryptoCaidBissSelected', 'Bi', True), ('CryptoCaidDreSelected', 'D', True), ('CryptoCaidBulCrypt1Selected', 'B1', True), ('CryptoCaidBulCrypt2Selected', 'B2', True)) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None return def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = '' self.current_caid = '0' self.current_provid = '0' self.current_ecmpid = '0' def createCryptoBar(self, info): res = '' available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): color = '\\c0000??00' else: color = '\\c007?7?7?' try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int(caid_entry[1], 16): color = '\\c00????00' except: pass if color != '\\c007?7?7?' or caid_entry[4]: if res: res += ' ' res += color + caid_entry[3] res += '\\c00??????' return res def createCryptoSeca(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x100', 16) <= int(self.current_caid, 16) <= int('0x1ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x100', 16) <= caid <= int('0x1ff', 16): color = '\\c00eeee00' except: pass res = color + 'S' res += '\\c00??????' return res def createCryptoVia(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x500', 16) <= int(self.current_caid, 16) <= int('0x5ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x500', 16) <= caid <= int('0x5ff', 16): color = '\\c00eeee00' except: pass res = color + 'V' res += '\\c00??????' return res def createCryptoIrdeto(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x600', 16) <= int(self.current_caid, 16) <= int('0x6ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x600', 16) <= caid <= int('0x6ff', 16): color = '\\c00eeee00' except: pass res = color + 'I' res += '\\c00??????' return res def createCryptoNDS(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x900', 16) <= int(self.current_caid, 16) <= int('0x9ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x900', 16) <= caid <= int('0x9ff', 16): color = '\\c00eeee00' except: pass res = color + 'NDS' res += '\\c00??????' return res def createCryptoConax(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xb00', 16) <= int(self.current_caid, 16) <= int('0xbff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0xb00', 16) <= caid <= int('0xbff', 16): color = '\\c00eeee00' except: pass res = color + 'CO' res += '\\c00??????' return res def createCryptoCryptoW(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xd00', 16) <= int(self.current_caid, 16) <= int('0xdff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0xd00', 16) <= caid <= int('0xdff', 16): color = '\\c00eeee00' except: pass res = color + 'CW' res += '\\c00??????' return res def createCryptoPowerVU(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xe00', 16) <= int(self.current_caid, 16) <= int('0xeff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0xe00', 16) <= caid <= int('0xeff', 16): color = '\\c00eeee00' except: pass res = color + 'P' res += '\\c00??????' return res def createCryptoBeta(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1700', 16) <= int(self.current_caid, 16) <= int('0x17ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x1700', 16) <= caid <= int('0x17ff', 16): color = '\\c00eeee00' except: pass res = color + 'B' res += '\\c00??????' return res def createCryptoNagra(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1800', 16) <= int(self.current_caid, 16) <= int('0x18ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x1800', 16) <= caid <= int('0x18ff', 16): color = '\\c00eeee00' except: pass res = color + 'N' res += '\\c00??????' return res def createCryptoBiss(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x2600', 16) <= int(self.current_caid, 16) <= int('0x26ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x2600', 16) <= caid <= int('0x26ff', 16): color = '\\c00eeee00' except: pass res = color + 'BI' res += '\\c00??????' return res def createCryptoDre(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x4ae0', 16) <= int(self.current_caid, 16) <= int('0x4ae1', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x4ae0', 16) <= caid <= int('0x4ae1', 16): color = '\\c00eeee00' except: pass res = color + 'DC' res += '\\c00??????' return res def createCryptoSpecial(self, info): caid_name = 'FTA' try: for caid_entry in self.caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ':%04x:%04x:%04x:%04x' % (int(self.current_caid, 16), int(self.current_provid, 16), info.getInfo(iServiceInformation.sSID), int(self.current_ecmpid, 16)) except: pass return '' def createResolution(self, info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return '' yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ('i', 'p', '', ' ')[info.getInfo(iServiceInformation.sProgressive)] fps = str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) if int(fps) <= 0: fps = '' return str(xres) + 'x' + str(yres) + mode + fps def createVideoCodec(self, info): return ('MPEG2', 'MPEG4', 'MPEG1', 'MPEG4-II', 'VC1', 'VC1-SM', '')[info.getInfo(iServiceInformation.sVideoType)] def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) if vpid < 0: vpid = 0 if apid < 0: apid = 0 if pcrpid < 0: pcrpid = 0 if sidpid < 0: sidpid = 0 return 'Pids:%04d:%04d:%04d:%05d' % (vpid, apid, pcrpid, sidpid) def createTransponderInfo(self, fedata, feraw): if 'DVB-T' in feraw.get('tuner_type'): tmp = addspace(self.createChannelNumber(fedata, feraw)) + self.createFrequency(fedata) + '/' + self.createPolarization(fedata) else: tmp = addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata)) return addspace(self.createTunerSystem(fedata)) + tmp + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) + self.createOrbPos(feraw) def createFrequency(self, feraw): frequency = feraw.get('frequency') if frequency: return str(frequency) return '' def createChannelNumber(self, fedata, feraw): channel = channelnumbers.getChannelNumber(feraw.get('frequency'), feraw.get('tuner_number')) if channel: return _('CH') + '%s' % channel return '' def createSymbolRate(self, fedata, feraw): if 'DVB-T' in feraw.get('tuner_type'): bandwidth = fedata.get('bandwidth') if bandwidth: return bandwidth else: symbolrate = fedata.get('symbol_rate') if symbolrate: return str(symbolrate) return '' def createPolarization(self, fedata): polarization = fedata.get('polarization_abbreviation') if polarization: return polarization return '' def createFEC(self, fedata, feraw): if 'DVB-T' in feraw.get('tuner_type'): code_rate_lp = fedata.get('code_rate_lp') code_rate_hp = fedata.get('code_rate_hp') if code_rate_lp and code_rate_hp: return code_rate_lp + '-' + code_rate_hp else: fec = fedata.get('fec_inner') if fec: return fec return '' def createModulation(self, fedata): if fedata.get('tuner_type') == _('Terrestrial'): constellation = fedata.get('constellation') if constellation: return constellation else: modulation = fedata.get('modulation') if modulation: return modulation return '' def createTunerType(self, feraw): tunertype = feraw.get('tuner_type') if tunertype: return tunertype return '' def createTunerSystem(self, fedata): tunersystem = fedata.get('system') if tunersystem: return tunersystem return '' def createOrbPos(self, feraw): orbpos = feraw.get('orbital_position') if orbpos > 1800: return str(float(3600 - orbpos) / 10.0) + '\xc2\xb0 W' if orbpos > 0: return str(float(orbpos) / 10.0) + '\xc2\xb0 E' return '' def createOrbPosOrTunerSystem(self, fedata, feraw): orbpos = self.createOrbPos(feraw) if orbpos is not '': return orbpos return self.createTunerSystem(fedata) def createTransponderName(self, feraw): orb_pos = '' orbpos = feraw.get('orbital_position') if orbpos > 1800: if orbpos == 3590: orb_pos = 'Thor/Intelsat' elif orbpos == 3560: orb_pos = 'Amos (4' elif orbpos == 3550: orb_pos = 'Atlantic Bird' elif orbpos == 3530: orb_pos = 'Nilesat/Atlantic Bird' elif orbpos == 3520: orb_pos = 'Atlantic Bird' elif orbpos == 3475: orb_pos = 'Atlantic Bird' elif orbpos == 3460: orb_pos = 'Express' elif orbpos == 3450: orb_pos = 'Telstar' elif orbpos == 3420: orb_pos = 'Intelsat' elif orbpos == 3380: orb_pos = 'Nss' elif orbpos == 3355: orb_pos = 'Intelsat' elif orbpos == 3325: orb_pos = 'Intelsat' elif orbpos == 3300: orb_pos = 'Hispasat' elif orbpos == 3285: orb_pos = 'Intelsat' elif orbpos == 3170: orb_pos = 'Intelsat' elif orbpos == 3150: orb_pos = 'Intelsat' elif orbpos == 3070: orb_pos = 'Intelsat' elif orbpos == 3045: orb_pos = 'Intelsat' elif orbpos == 3020: orb_pos = 'Intelsat 9' elif orbpos == 2990: orb_pos = 'Amazonas' elif orbpos == 2900: orb_pos = 'Star One' elif orbpos == 2880: orb_pos = 'AMC 6 (72' elif orbpos == 2875: orb_pos = 'Echostar 6' elif orbpos == 2860: orb_pos = 'Horizons' elif orbpos == 2810: orb_pos = 'AMC5' elif orbpos == 2780: orb_pos = 'NIMIQ 4' elif orbpos == 2690: orb_pos = 'NIMIQ 1' elif orbpos == 3592: orb_pos = 'Thor/Intelsat' elif orbpos == 2985: orb_pos = 'Echostar 3,12' elif orbpos == 2830: orb_pos = 'Echostar 8' elif orbpos == 2630: orb_pos = 'Galaxy 19' elif orbpos == 2500: orb_pos = 'Echostar 10,11' elif orbpos == 2502: orb_pos = 'DirectTV 5' elif orbpos == 2410: orb_pos = 'Echostar 7 Anik F3' elif orbpos == 2391: orb_pos = 'Galaxy 23' elif orbpos == 2390: orb_pos = 'Echostar 9' elif orbpos == 2412: orb_pos = 'DirectTV 7S' elif orbpos == 2310: orb_pos = 'Galaxy 27' elif orbpos == 2311: orb_pos = 'Ciel 2' elif orbpos == 2120: orb_pos = 'Echostar 2' else: orb_pos = str(float(3600 - orbpos) / 10.0) + 'W' elif orbpos > 0: if orbpos == 192: orb_pos = 'Astra 1F' elif orbpos == 130: orb_pos = 'Hot Bird 6,7A,8' elif orbpos == 235: orb_pos = 'Astra 1E' elif orbpos == 1100: orb_pos = 'BSat 1A,2A' elif orbpos == 1101: orb_pos = 'N-Sat 110' elif orbpos == 1131: orb_pos = 'KoreaSat 5' elif orbpos == 1440: orb_pos = 'SuperBird 7,C2' elif orbpos == 1006: orb_pos = 'AsiaSat 2' elif orbpos == 1030: orb_pos = 'Express A2' elif orbpos == 1056: orb_pos = 'Asiasat 3S' elif orbpos == 1082: orb_pos = 'NSS 11' elif orbpos == 881: orb_pos = 'ST1' elif orbpos == 900: orb_pos = 'Yamal 201' elif orbpos == 917: orb_pos = 'Mesat' elif orbpos == 950: orb_pos = 'Insat 4B' elif orbpos == 951: orb_pos = 'NSS 6' elif orbpos == 765: orb_pos = 'Telestar' elif orbpos == 785: orb_pos = 'ThaiCom 5' elif orbpos == 800: orb_pos = 'Express' elif orbpos == 830: orb_pos = 'Insat 4A' elif orbpos == 850: orb_pos = 'Intelsat 709' elif orbpos == 750: orb_pos = 'Abs' elif orbpos == 720: orb_pos = 'Intelsat' elif orbpos == 705: orb_pos = 'Eutelsat W5' elif orbpos == 685: orb_pos = 'Intelsat' elif orbpos == 620: orb_pos = 'Intelsat 902' elif orbpos == 600: orb_pos = 'Intelsat 904' elif orbpos == 570: orb_pos = 'Nss' elif orbpos == 530: orb_pos = 'Express AM22' elif orbpos == 480: orb_pos = 'Eutelsat 2F2' elif orbpos == 450: orb_pos = 'Intelsat' elif orbpos == 420: orb_pos = 'Turksat 2A' elif orbpos == 400: orb_pos = 'Express AM1' elif orbpos == 390: orb_pos = 'Hellas Sat 2' elif orbpos == 380: orb_pos = 'Paksat 1' elif orbpos == 360: orb_pos = 'Eutelsat Sesat' elif orbpos == 335: orb_pos = 'Astra 1M' elif orbpos == 330: orb_pos = 'Eurobird 3' elif orbpos == 328: orb_pos = 'Galaxy 11' elif orbpos == 315: orb_pos = 'Astra 5A' elif orbpos == 310: orb_pos = 'Turksat' elif orbpos == 305: orb_pos = 'Arabsat' elif orbpos == 285: orb_pos = 'Eurobird 1' elif orbpos == 284: orb_pos = 'Eurobird/Astra' elif orbpos == 282: orb_pos = 'Eurobird/Astra' elif orbpos == 1220: orb_pos = 'AsiaSat' elif orbpos == 1380: orb_pos = 'Telstar 18' elif orbpos == 260: orb_pos = 'Badr 3/4' elif orbpos == 255: orb_pos = 'Eurobird 2' elif orbpos == 215: orb_pos = 'Eutelsat' elif orbpos == 216: orb_pos = 'Eutelsat W6' elif orbpos == 210: orb_pos = 'AfriStar 1' elif orbpos == 160: orb_pos = 'Eutelsat W2' elif orbpos == 100: orb_pos = 'Eutelsat W1' elif orbpos == 90: orb_pos = 'Eurobird 9' elif orbpos == 70: orb_pos = 'Eutelsat W3A' elif orbpos == 50: orb_pos = 'Sirius 4' elif orbpos == 48: orb_pos = 'Sirius 4' elif orbpos == 30: orb_pos = 'Telecom 2' else: orb_pos = str(float(orbpos) / 10.0) + 'E' return orb_pos def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) @cached def getText(self): service = self.source.service if service is None: return '' info = service and service.info() if not info: return '' if self.type == 'CryptoInfo': self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createCryptoBar(info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace(self.current_source) + self.createCryptoSpecial(info) if self.type == 'CryptoBar': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBar(info) else: return '' if self.type == 'CryptoSeca': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSeca(info) else: return '' if self.type == 'CryptoVia': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoVia(info) else: return '' if self.type == 'CryptoIrdeto': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoIrdeto(info) else: return '' if self.type == 'CryptoNDS': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNDS(info) else: return '' if self.type == 'CryptoConax': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoConax(info) else: return '' if self.type == 'CryptoCryptoW': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoCryptoW(info) else: return '' if self.type == 'CryptoBeta': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBeta(info) else: return '' if self.type == 'CryptoNagra': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNagra(info) else: return '' if self.type == 'CryptoBiss': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBiss(info) else: return '' if self.type == 'CryptoDre': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoDre(info) else: return '' if self.type == 'CryptoSpecial': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSpecial(info) else: return '' if self.type == 'ResolutionString': return self.createResolution(info) elif self.type == 'VideoCodec': return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll(config.usage.infobar_frontend_source.value == 'settings') if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw fedata = self.fedata if not feraw or not fedata: return '' if self.type == 'All': self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw) + '\n' + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + '\n' + addspace(self.createPIDInfo(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw) + '\n' + addspace(self.createCryptoBar(info)) + self.current_source + '\n' + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == 'ServiceInfo': return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) elif self.type == 'TransponderInfo2line': return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createTransponderName(feraw)) + '\n' + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata)) + addspace(self.createSymbolRate(fedata, feraw)) + self.createModulation(fedata) + '-' + addspace(self.createFEC(fedata, feraw)) elif self.type == 'TransponderInfo': return self.createTransponderInfo(fedata, feraw) elif self.type == 'TransponderFrequency': return self.createFrequency(feraw) elif self.type == 'TransponderSymbolRate': return self.createSymbolRate(fedata, feraw) elif self.type == 'TransponderPolarization': return self.createPolarization(fedata) elif self.type == 'TransponderFEC': return self.createFEC(fedata, feraw) elif self.type == 'TransponderModulation': return self.createModulation(fedata) elif self.type == 'OrbitalPosition': return self.createOrbPos(feraw) elif self.type == 'TunerType': return self.createTunerType(feraw) elif self.type == 'TunerSystem': return self.createTunerSystem(fedata) elif self.type == 'OrbitalPositionOrTunerSystem': return self.createOrbPosOrTunerSystem(fedata, feraw) elif self.type == 'PIDInfo': return self.createPIDInfo(info) elif self.type == 'TerrestrialChannelNumber': return self.createChannelNumber(fedata, feraw) else: return _('invalid type') text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False else: request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if caid_entry[3] == request_caid: if request_selected: if int(caid_entry[0], 16) <= int(current_caid, 16) <= int(caid_entry[1], 16): return True else: try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int(caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what) return
class PGExtraInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.caid_data = (('0x1700', '0x17ff', 'Beta', 'B', True), ('0x600', '0x6ff', 'Irdeto', 'I', True), ('0x100', '0x1ff', 'Seca', 'S', True), ('0x500', '0x5ff', 'Via', 'V', True), ('0x1800', '0x18ff', 'Nagra', 'N', True), ('0xd00', '0xdff', 'CryptoW', 'CW', True), ('0x900', '0x9ff', 'NDS', 'ND', True), ('0xb00', '0xbff', 'Conax', 'CO', True), ('0x4ae0', '0x4ae1', 'Dre', 'DC', True), ('0x5581', '0x5581', 'BulCrypt', 'BU', True), ('0x2600', '0x2600', 'Biss', 'BI', True), ('0xe00', '0xeff', 'PowerVU', 'PV', True), ('0x4aee', '0x4aee', 'BulCrypt', 'BU', False)) self.ca_table = (('CryptoCaidBetaAvailable', 'B', False), ('CryptoCaidIrdetoAvailable', 'I', False), ('CryptoCaidSecaAvailable', 'S', False), ('CryptoCaidViaAvailable', 'V', False), ('CryptoCaidNagraAvailable', 'N', False), ('CryptoCaidCryptoWAvailable', 'CW', False), ('CryptoCaidNDSAvailable', 'ND', False), ('CryptoCaidConaxAvailable', 'CO', False), ('CryptoCaidDreAvailable', 'DC', False), ('CryptoCaidBulCrypt2Available', 'BU', False), ('CryptoCaidBissAvailable', 'BI', False), ('CryptoCaidPowerVUAvailable', 'PV', False), ('CryptoCaidBulCrypt1Available', 'BU', False), ('CryptoCaidBetaSelected', 'B', True), ('CryptoCaidIrdetoSelected', 'I', True), ('CryptoCaidSecaSelected', 'S', True), ('CryptoCaidViaSelected', 'V', True), ('CryptoCaidNagraSelected', 'N', True), ('CryptoCaidCryptoWSelected', 'CW', True), ('CryptoCaidNDSSelected', 'ND', True), ('CryptoCaidConaxSelected', 'CO', True), ('CryptoCaidDreSelected', 'DC', True), ('CryptoCaidBulCrypt2Selected', 'BU', True), ('CryptoCaidBissSelected', 'BI', True), ('CryptoCaidPowerVUSelected', 'PV', True), ('CryptoCaidBulCrypt1Selected', 'BU', True)) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None return def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = '' self.current_caid = '0' self.current_provid = '0' self.current_ecmpid = '0' def createCryptoBar(self, info): res = '' available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int( self.current_caid, 16) <= int(caid_entry[1], 16): color = '\\c0000??00' else: color = '\\c007?7?7?' try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int( caid_entry[1], 16): color = '\\c00????00' except: pass if color != '\\c007?7?7?' or caid_entry[4]: if res: res += ' ' res += color + caid_entry[3] res += '\\c00??????' return res def createCryptoSpecial(self, info): caid_name = 'Free To Air' try: for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int( self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ':%04x:%04x:%04x:%04x' % ( int(self.current_caid, 16), int(self.current_provid, 16), info.getInfo( iServiceInformation.sSID), int(self.current_ecmpid, 16)) except: pass return '' def createResolution(self, info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return '' yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ('i', 'p', ' ')[info.getInfo(iServiceInformation.sProgressive)] fps = str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) return str(xres) + 'x' + str(yres) + mode + fps def createVideoCodec(self, info): return ('MPEG2', 'MPEG4', 'MPEG1', 'MPEG4-II', 'VC1', 'VC1-SM', '')[info.getInfo(iServiceInformation.sVideoType)] def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) tsid = info.getInfo(iServiceInformation.sTSID) onid = info.getInfo(iServiceInformation.sONID) if vpid < 0: vpid = 0 if apid < 0: apid = 0 if pcrpid < 0: pcrpid = 0 if sidpid < 0: sidpid = 0 if tsid < 0: tsid = 0 if onid < 0: onid = 0 return '%d-%d:%05d:%04d:%04d:%04d' % (onid, tsid, sidpid, vpid, apid, pcrpid) def createTransponderInfo(self, fedata, feraw): if 'DVB-T' in feraw.get('tuner_type'): tmp = addspace(self.createChannelNumber(fedata, feraw)) + addspace( self.createFrequency(feraw)) + addspace( self.createPolarization(fedata)) else: tmp = addspace(self.createFrequency(feraw)) + addspace( self.createPolarization(fedata)) return addspace(self.createTunerSystem(fedata)) + tmp + addspace( self.createSymbolRate(fedata, feraw)) + addspace( self.createFEC(fedata, feraw)) + addspace( self.createModulation(fedata)) + addspace( self.createOrbPos(feraw)) def createFrequency(self, feraw): frequency = feraw.get('frequency') if frequency: if 'DVB-T' in feraw.get('tuner_type'): return str(int(frequency / 1000000.0 + 0.5)) else: return str(int(frequency / 1000 + 0.5)) return '' def createChannelNumber(self, fedata, feraw): return 'DVB-T' in feraw.get('tuner_type') and fedata.get( 'channel') or '' def createSymbolRate(self, fedata, feraw): if 'DVB-T' in feraw.get('tuner_type'): bandwidth = fedata.get('bandwidth') if bandwidth: return bandwidth else: symbolrate = fedata.get('symbol_rate') if symbolrate: return str(symbolrate / 1000) return '' def createPolarization(self, fedata): return fedata.get('polarization_abbreviation') or '' def createFEC(self, fedata, feraw): if 'DVB-T' in feraw.get('tuner_type'): code_rate_lp = fedata.get('code_rate_lp') code_rate_hp = fedata.get('code_rate_hp') if code_rate_lp and code_rate_hp: return code_rate_lp + '-' + code_rate_hp else: fec = fedata.get('fec_inner') if fec: return fec return '' def createModulation(self, fedata): if fedata.get('tuner_type') == _('Terrestrial'): constellation = fedata.get('constellation') if constellation: return constellation else: modulation = fedata.get('modulation') if modulation: return modulation return '' def createTunerType(self, feraw): return feraw.get('tuner_type') or '' def createTunerSystem(self, fedata): return fedata.get('system') or '' def createOrbPos(self, feraw): orbpos = feraw.get('orbital_position') if orbpos > 1800: return str(float(3600 - orbpos) / 10.0) + '\xc2\xb0 W' if orbpos > 0: return str(float(orbpos) / 10.0) + '\xc2\xb0 E' return '' def createOrbPosOrTunerSystem(self, fedata, feraw): orbpos = self.createOrbPos(feraw) if orbpos is not '': return orbpos return self.createTunerSystem(fedata) def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) @cached def getText(self): service = self.source.service if service is None: return '' else: info = service and service.info() if not info: return '' if self.type == 'CryptoInfo': self.getCryptoInfo(info) if config.usage.show_cryptoinfo.value: return addspace(self.createCryptoBar( info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace( self.current_source) + self.createCryptoSpecial(info) if self.type == 'CryptoBar': self.getCryptoInfo(info) return self.createCryptoBar(info) if self.type == 'CryptoSpecial': self.getCryptoInfo(info) return self.createCryptoSpecial(info) if self.type == 'ResolutionString': return self.createResolution(info) if self.type == 'VideoCodec': return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll( config.usage.infobar_frontend_source.value == 'settings') if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw if not feraw: feraw = info.getInfoObject( iServiceInformation.sTransponderData) if not feraw: return '' fedata = ConvertToHumanReadable(feraw) else: fedata = self.fedata if self.type == 'All': self.getCryptoInfo(info) if config.usage.show_cryptoinfo.value: return addspace(self.createProviderName( info)) + self.createTransponderInfo( fedata, feraw) + '\n' + addspace( self.createCryptoBar(info)) + addspace( self.createCryptoSpecial(info) ) + '\n' + addspace( self.createPIDInfo(info)) + addspace( self.createVideoCodec(info) ) + self.createResolution(info) else: return addspace(self.createProviderName( info)) + self.createTransponderInfo( fedata, feraw) + '\n' + addspace( self.createCryptoBar(info) ) + self.current_source + '\n' + addspace( self.createCryptoSpecial(info)) + addspace( self.createVideoCodec( info)) + self.createResolution(info) if self.type == 'ServiceInfo': return addspace(self.createProviderName(info)) + addspace( self.createTunerSystem(fedata) ) + addspace(self.createFrequency(feraw)) + addspace( self.createPolarization(fedata)) + addspace( self.createSymbolRate(fedata, feraw)) + addspace( self.createFEC(fedata, feraw)) + addspace( self.createModulation(fedata)) + addspace( self.createOrbPos(feraw)) + addspace( self.createVideoCodec(info) ) + self.createResolution(info) if self.type == 'TransponderInfo': return self.createTransponderInfo(fedata, feraw) if self.type == 'TransponderFrequency': return self.createFrequency(feraw) if self.type == 'TransponderSymbolRate': return self.createSymbolRate(fedata, feraw) if self.type == 'TransponderPolarization': return self.createPolarization(fedata) if self.type == 'TransponderFEC': return self.createFEC(fedata, feraw) if self.type == 'TransponderModulation': return self.createModulation(fedata) if self.type == 'OrbitalPosition': return self.createOrbPos(feraw) if self.type == 'TunerType': return self.createTunerType(feraw) if self.type == 'TunerSystem': return self.createTunerSystem(fedata) if self.type == 'OrbitalPositionOrTunerSystem': return self.createOrbPosOrTunerSystem(fedata, feraw) if self.type == 'PIDInfo': return self.createPIDInfo(info) if self.type == 'TerrestrialChannelNumber': return self.createChannelNumber(fedata, feraw) return _('invalid type') return text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False else: request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if caid_entry[3] == request_caid: if request_selected: if int(current_caid, 16) >= int(caid_entry[0], 16) and int( current_caid, 16) <= int(caid_entry[1], 16): return True else: try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int( caid_entry[1], 16): return True except: pass return False return boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evUpdatedInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what) return
class LdExtraInfo(Poll, Converter, object): ecmDict = { } def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.DynamicSwitch = False self.type = type self.poll_interval = 9500 self.poll_enabled = True self.caid_data = { ( "0x100", "0x1ff", "Seca", "S" ), ( "0x500", "0x5ff", "Via", "V" ), ( "0x600", "0x6ff", "Irdeto", "I" ), ( "0x900", "0x9ff", "NDS", "ND"), ( "0xb00", "0xbff", "Conax", "CO"), ( "0xd00", "0xdff", "CryptoW", "CW"), ( "0xe00", "0xeff", "PowerVU", "P" ), ("0x1000", "0x10FF", "Tandberg", "TB"), ("0x1700", "0x17ff", "Beta", "B" ), ("0x1800", "0x18ff", "Nagra", "N" ), ("0x2600", "0x2600", "Biss", "BI"), ("0x2700", "0x2710", "Dre3", "D3"), ("0x4ae0", "0x4ae1", "Dre", "D" ), ("0x4aee", "0x4aee", "BulCrypt", "B1"), ("0x5581", "0x5581", "BulCrypt", "B2"), ("0x5601", "0x5604", "Verimatrix", "VM") } self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None self.DynamicTimer = eTimer() if self.doSwitch: try: self.DynamicTimer.callback.append(self.doSwitch) except: return def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = "" self.current_caid = "0" self.current_provid = "0" self.current_ecmpid = "0" def GetEcmInfo2(self): ecm = None data = {} try: ecm = open("/tmp/ecm.info", "rb").readlines() info = {} for line in ecm: x = line.lower().find("msec") if x != -1: info["ecm time"] = line[0:x+4] elif line.lower().find("response:") != -1: y = line.lower().find("response:") if y != -1: info["ecm time"] = line[y+9:].strip("\n\r") else: item = line.split(":", 1) if len(item) > 1: info[item[0].strip().lower()] = item[1].strip() else: if not info.has_key("caid"): x = line.lower().find("caid") if x != -1: y = line.find(",") if y != -1: info["caid"] = line[x+5:y] data['prov'] = info.get('prov', '') data['system'] = info.get('system', '') data['caid'] = info.get('caid', '0') data['pid'] = info.get('pid', '0') data['provider'] = info.get('provider', '') data['provid'] = info.get('provid', '') if data['provider'] == '': data['provider'] = info.get('prov', ' ') data['chid'] = info.get('chid', '0') data['using'] = info.get('using', '') data['decode'] = info.get('decode', '') data['source'] = info.get('source', '') data['reader'] = info.get('reader', '') data['address'] = info.get('address', 'Unknown') data['address_from'] = info.get('from', 'Unknown') data['from'] = info.get('from', 'Unknown') data['protocol'] = info.get('protocol', '') data['hops'] = info.get('hops', '0') data['share'] = info.get('share', '') data['ecm_time'] = info.get('ecm time', '?') data['Time'] = info.get('Time', '?') data['cw0'] = info.get('cw0', '0') data['cw1'] = info.get('cw1', '0') except: data['prov'] = '' data['system'] = '' data['caid'] = '0x00' data['pid'] = '0x00' data['provider'] = '' data['provid'] = '' data['chid'] = '0x00' data['using'] = '' data['decode'] = '' data['source'] = '' data['reader'] = '' data['address'] = '' data['address_from'] = '' data['from'] = '' data['protocol'] = '' data['hops'] = '0' data['share'] = '' data['ecm_time'] = '0' data['Time'] = '0' data['cw0'] = '0' data['cw1'] = '0' return data def get_caName(self): try: f = open("/etc/CurrentLdCamName",'r') name = f.readline().strip() f.close() except: name = "Common Interface" return name def get_Ecmtext(self): ecmtext = '' if fileExists('/tmp/ecm.info'): f = open('/tmp/ecm.info', 'r') for line in f.readlines(): line = line.replace('\n', '') line = line.strip() if len(line) > 3: ecmtext = ecmtext + line + '\n' f.close() elif fileExists('/tmp/ecm0.info'): f = open('/tmp/ecm0.info', 'r') for line in f.readlines(): line = line.replace('\n', '') line = line.strip() if len(line) > 3: ecmtext = ecmtext + line + '\n' f.close() elif fileExists('/tmp/ecm1.info'): f = open('/tmp/ecm1.info', 'r') for line in f.readlines(): line = line.replace('\n', '') line = line.strip() if len(line) > 3: ecmtext = ecmtext + line + '\n' f.close() else: try: if len(ecmtext) < 5: ecmtext = '\n\n ' + _('Ecm info not available.') except: return return str(ecmtext) def get_PIDtext(self): pidtext = '' if fileExists('/tmp/pid.info'): f = open('/tmp/pid.info', 'r') for line in f.readlines(): line = line.replace('\n', '') line = line.strip() if len(line) > 3: pidtext = pidtext + line + '\n' f.close() else: try: if len(pidtext) < 5: pidtext = '\n\n ' + _('Pid info not available.') except: return return str(pidtext) def provfile(self, caid, prov): ecm_info = self.GetEcmInfo2() provider = None pinfo = {} try: provider = open("/tmp/share.info", "rb").readlines() except: pass if provider: for line in provider: x = line.lower().find("id:") y = line.lower().find("card ") if x != -1 and y != -1: if caid != "0500": if line[x+3:].strip("\n\r") == prov.strip("\n\r") and line[y+5:y+9] == caid: x = line.lower().find("at ") if x != -1: y = line.lower().find("card ") if y != -1: pinfo["paddress"] = line[x+3:y-1] x = line.lower().find("sl:") if x != -1: y = line.lower().find("lev:") if y != -1: pinfo["slot"] = line[x+3:y-1] x = line.lower().find("dist:") if x != -1: pinfo["level"] = line[y+4:x-1] y = line.lower().find("id:") if y != -1: pinfo["distance"] = line[x+5:y-1] elif line[x+3:].strip("\n\r") == prov.strip("\n\r") and line[y+5:y+8] == caid[:-1]: x = line.lower().find("at ") if x != -1: y = line.lower().find("card ") if y != -1: pinfo["paddress"] = line[x+3:y-1] x = line.lower().find("sl:") if x != -1: y = line.lower().find("lev:") if y != -1: pinfo["slot"] = line[x+3:y-1] x = line.lower().find("dist:") if x != -1: pinfo["level"] = line[y+4:x-1] y = line.lower().find("id:") if y != -1: pinfo["distance"] = line[x+5:y-1] return pinfo def createCryptoBar(self, info): res = "" available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): color="\c0000??00" else: color = "\c007?7?7?" try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int(caid_entry[1], 16): color="\c00????00" except: pass if res: res += " " res += color + caid_entry[3] res += "\c00??????" return res def createCryptoSeca(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x100', 16) <= int(self.current_caid, 16) <= int('0x1ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x100', 16) <= caid <= int('0x1ff', 16): color="\c00eeee00" except: pass res = color + 'S' res += "\c00??????" return res def createCryptoVia(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x500', 16) <= int(self.current_caid, 16) <= int('0x5ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x500', 16) <= caid <= int('0x5ff', 16): color="\c00eeee00" except: pass res = color + 'V' res += "\c00??????" return res def createCryptoIrdeto(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x600', 16) <= int(self.current_caid, 16) <= int('0x6ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x600', 16) <= caid <= int('0x6ff', 16): color="\c00eeee00" except: pass res = color + 'I' res += "\c00??????" return res def createCryptoNDS(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x900', 16) <= int(self.current_caid, 16) <= int('0x9ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x900', 16) <= caid <= int('0x9ff', 16): color="\c00eeee00" except: pass res = color + 'NDS' res += "\c00??????" return res def createCryptoConax(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xb00', 16) <= int(self.current_caid, 16) <= int('0xbff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xb00', 16) <= caid <= int('0xbff', 16): color="\c00eeee00" except: pass res = color + 'CO' res += "\c00??????" return res def createCryptoCryptoW(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xd00', 16) <= int(self.current_caid, 16) <= int('0xdff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xd00', 16) <= caid <= int('0xdff', 16): color="\c00eeee00" except: pass res = color + 'CW' res += "\c00??????" return res def createCryptoPowerVU(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xe00', 16) <= int(self.current_caid, 16) <= int('0xeff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xe00', 16) <= caid <= int('0xeff', 16): color="\c00eeee00" except: pass res = color + 'P' res += "\c00??????" return res def createCryptoTandberg(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1010', 16) <= int(self.current_caid, 16) <= int('0x1010', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x1010', 16) <= caid <= int('0x1010', 16): color="\c00eeee00" except: pass res = color + 'T' res += "\c00??????" return res def createCryptoBeta(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1700', 16) <= int(self.current_caid, 16) <= int('0x17ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x1700', 16) <= caid <= int('0x17ff', 16): color="\c00eeee00" except: pass res = color + 'B' res += "\c00??????" return res def createCryptoNagra(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1800', 16) <= int(self.current_caid, 16) <= int('0x18ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x1800', 16) <= caid <= int('0x18ff', 16): color="\c00eeee00" except: pass res = color + 'N' res += "\c00??????" return res def createCryptoBiss(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x2600', 16) <= int(self.current_caid, 16) <= int('0x26ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x2600', 16) <= caid <= int('0x26ff', 16): color="\c00eeee00" except: pass res = color + 'BI' res += "\c00??????" return res def createCryptoDre(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x4ae0', 16) <= int(self.current_caid, 16) <= int('0x4ae1', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x4ae0', 16) <= caid <= int('0x4ae1', 16): color="\c00eeee00" except: pass res = color + 'DC' res += "\c00??????" return res def createCryptoSpecial(self, info): service = self.source.service Is_Stream = service.streamed() is_crypted = info.getInfo(iServiceInformation.sIsCrypted) if Is_Stream: return _("IPTV") elif is_crypted != 1: return _("Free To Air") caid_name = _("Encrypt") try: for caid_entry in self.caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ":%04x:%04x:%04x:%04x" % (int(self.current_caid,16), int(self.current_provid,16), info.getInfo(iServiceInformation.sSID), int(self.current_ecmpid,16)) except: pass return "" def createCryptoNameCaid(self, info): service = self.source.service Is_Stream = service.streamed() is_crypted = info.getInfo(iServiceInformation.sIsCrypted) if Is_Stream: return _("IPTV") elif is_crypted != 1: return _("Free To Air") caid_name = _("Encrypt") try: for caid_entry in self.caid_data: if int(self.current_caid,16) == 0: return caid_name elif int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ":%04x" % (int(self.current_caid,16)) except: pass return "" def createResolution(self, info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return "" yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ("i", "p", "", " ")[info.getInfo(iServiceInformation.sProgressive)] fps = str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) if int(fps) <= 0: fps = "" return str(xres) + "x" + str(yres) + mode + fps def createVideoCodec(self, info): return codec_data.get(info.getInfo(iServiceInformation.sVideoType), "N/A") def createServiceRef(self, info): ref = info.getInfoString(iServiceInformation.sServiceref) if ref < 0 : ref = 0 return "Ref: " + str(ref) def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) tsid = info.getInfo(iServiceInformation.sTSID) onid = info.getInfo(iServiceInformation.sONID) if vpid < 0 : vpid = 0 if apid < 0 : apid = 0 if pcrpid < 0 : pcrpid = 0 if sidpid < 0 : sidpid = 0 if tsid < 0 : tsid = 0 if onid < 0 : onid = 0 return "Pid: %d-%d:%05d:%04d:%04d:%04d" % (onid, tsid, sidpid, vpid, apid, pcrpid) def createTransponderInfo(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type") or "DVB-T2" in feraw.get("tuner_type"): tmp = addspace(self.createChannelNumber(fedata, feraw)) + self.createFrequency(fedata) + "/" + self.createPolarization(fedata) else: tmp = addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata)) return addspace(self.createTunerSystem(fedata)) + tmp + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) \ + addspace(self.createModulation(fedata)) + self.createOrbPos(feraw) def createTransponderInfo2(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type") or "DVB-T2" in feraw.get("tuner_type"): tmp = addspace(self.createChannelNumber(fedata, feraw)) + self.createFrequency(fedata) + "/" + self.createPolarization(fedata) else: tmp = addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata)) if "DVB-T" in feraw.get("tuner_type") or "DVB-T2" in feraw.get("tuner_type"): return tmp + addspace(self.createSymbolRate(fedata, feraw)) else: return tmp + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) \ + addspace(self.createModulation(fedata)) + self.createOrbPos(feraw) def createFrequency(self, feraw): frequency = feraw.get("frequency") if frequency: return str(frequency) return "" def createChannelNumber(self, fedata, feraw): channel = channelnumbers.getChannelNumber(feraw.get("frequency"), feraw.get("tuner_number")) if channel: return _("CH") + "%s" % channel return "" def createSymbolRate(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type") or "DVB-T2" in feraw.get("tuner_type"): bandwidth = fedata.get("bandwidth") if bandwidth: return bandwidth else: symbolrate = fedata.get("symbol_rate") if symbolrate: return str(symbolrate) return "" def createPolarization(self, fedata): polarization = fedata.get("polarization_abbreviation") if polarization: return polarization return "" def createFEC(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type") or "DVB-T2" in feraw.get("tuner_type"): code_rate_lp = fedata.get("code_rate_lp") code_rate_hp = fedata.get("code_rate_hp") if code_rate_lp and code_rate_hp: return code_rate_lp + "-" + code_rate_hp else: fec = fedata.get("fec_inner") if fec: return fec return "" def createModulation(self, fedata): if fedata.get("tuner_type") == _("Terrestrial"): constellation = fedata.get("constellation") if constellation: return constellation else: modulation = fedata.get("modulation") if modulation: return modulation return "" def createTunerType(self, feraw): tunertype = feraw.get("tuner_type") if tunertype: return tunertype return "" def createTunerSystem(self, fedata): tunersystem = fedata.get("system") if tunersystem: return tunersystem return "" def createOrbPos(self, feraw): orbpos = feraw.get("orbital_position") if orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "\xc2\xb0 W" elif orbpos > 0: return str((float(orbpos)) / 10.0) + "\xc2\xb0 E" return "" def createOrbPosOrTunerSystem(self, fedata,feraw): orbpos = self.createOrbPos(feraw) if orbpos is not "": return orbpos return self.createTunerSystem(fedata) def createTransponderName(self,feraw): orbpos = feraw.get("orbital_position") if orbpos is None: # Not satellite return "" freq = feraw.get("frequency") if freq and freq < 10700000: # C-band if orbpos > 1800: orbpos += 1 else: orbpos -= 1 sat_names = { 30: 'Rascom/Eutelsat 3E', 48: 'SES 5', 70: 'Eutelsat 7E', 90: 'Eutelsat 9E', 100: 'Eutelsat 10E', 130: 'Hot Bird', 160: 'Eutelsat 16E', 192: 'Astra 1KR/1L/1M/1N', 200: 'Arabsat 20E', 216: 'Eutelsat 21.5E', 235: 'Astra 3', 255: 'Eutelsat 25.5E', 260: 'Badr 4/5/6', 282: 'Astra 2E/2F/2G', 305: 'Arabsat 30.5E', 315: 'Astra 5', 330: 'Eutelsat 33E', 360: 'Eutelsat 36E', 380: 'Paksat', 390: 'Hellas Sat', 400: 'Express 40E', 420: 'Turksat', 450: 'Intelsat 45E', 480: 'Afghansat', 490: 'Yamal 49E', 530: 'Express 53E', 570: 'NSS 57E', 600: 'Intelsat 60E', 620: 'Intelsat 62E', 685: 'Intelsat 68.5E', 705: 'Eutelsat 70.5E', 720: 'Intelsat 72E', 750: 'ABS', 765: 'Apstar', 785: 'ThaiCom', 800: 'Express 80E', 830: 'Insat', 851: 'Intelsat/Horizons', 880: 'ST2', 900: 'Yamal 90E', 915: 'Mesat', 950: 'NSS/SES 95E', 1005: 'AsiaSat 100E', 1030: 'Express 103E', 1055: 'Asiasat 105E', 1082: 'NSS/SES 108E', 1100: 'BSat/NSAT', 1105: 'ChinaSat', 1130: 'KoreaSat', 1222: 'AsiaSat 122E', 1380: 'Telstar 18', 1440: 'SuperBird', 2310: 'Ciel', 2390: 'Echostar/Galaxy 121W', 2410: 'Echostar/DirectTV 119W', 2500: 'Echostar/DirectTV 110W', 2630: 'Galaxy 97W', 2690: 'NIMIQ 91W', 2780: 'NIMIQ 82W', 2830: 'Echostar/QuetzSat', 2880: 'AMC 72W', 2900: 'Star One', 2985: 'Echostar 61.5W', 2990: 'Amazonas', 3020: 'Intelsat 58W', 3045: 'Intelsat 55.5W', 3070: 'Intelsat 53W', 3100: 'Intelsat 50W', 3150: 'Intelsat 45W', 3169: 'Intelsat 43.1W', 3195: 'SES 40.5W', 3225: 'NSS/Telstar 37W', 3255: 'Intelsat 34.5W', 3285: 'Intelsat 31.5W', 3300: 'Hispasat', 3325: 'Intelsat 27.5W', 3355: 'Intelsat 24.5W', 3380: 'SES 22W', 3400: 'NSS 20W', 3420: 'Intelsat 18W', 3450: 'Telstar 15W', 3460: 'Express 14W', 3475: 'Eutelsat 12.5W', 3490: 'Express 11W', 3520: 'Eutelsat 8W', 3530: 'Nilesat/Eutelsat 7W', 3550: 'Eutelsat 5W', 3560: 'Amos', 3592: 'Thor/Intelsat' } if orbpos in sat_names: return sat_names[orbpos] elif orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "W" else: return str((float(orbpos)) / 10.0) + "E" def createProviderName(self,info): return info.getInfoString(iServiceInformation.sProvider) @cached def get_caidlist(self): caidlist = {} service = self.source.service if service: info = service and service.info() if info: available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if available_caids: for cs in self.caid_data: caidlist[cs] = (self.caid_data.get(cs),0) for caid in available_caids: c = "%x" % int(caid) if len(c) == 3: c = "0%s" % c c = c[:2].upper() if self.caid_data.has_key(c): caidlist[c] = (self.caid_data.get(c),1) ecm_info = self.GetEcmInfo2() if ecm_info: emu_caid = ecm_info.get("caid", "") if emu_caid and emu_caid != "0x000": c = emu_caid.lstrip("0x") if len(c) == 3: c = "0%s" % c c = c[:2].upper() caidlist[c] = (self.caid_data.get(c),2) return caidlist getCaidlist = property(get_caidlist) @cached def getText(self): self.DynamicTimer.start(6000) service = self.source.service if service is None: return "" if service: info = service and service.info() is_crypted = info.getInfo(iServiceInformation.sIsCrypted) if not info: return "" if info: if info.getInfoObject(iServiceInformation.sCAIDs): ecm_info = self.GetEcmInfo2() if ecm_info: # caid caid = ecm_info.get("caid", '') caid = caid.lstrip("0x") caid = caid.upper() caid = caid.zfill(4) caid = "%s" % caid # prov prov = ecm_info.get("prov", "") prov = prov.lstrip("0x") prov = prov.upper() if prov == '': prov = '' prov = "%s" % prov.zfill(6) else: prov = prov.zfill(6) prov = "%s" % prov #provid cccam provid = ecm_info.get("provid", "") provid = provid.lstrip("0x") provid = provid.upper() provid = provid.zfill(6) provid = "%s" % provid #provider cccam provider = ecm_info.get("provider", "") provider = "%s" % provider provider = provider[:25] else: return "" if self.type == "CryptoInfo": self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createCryptoBar(info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace(self.current_source) + self.createCryptoSpecial(info) if self.type == "CryptoBar": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBar(info) else: return "" if self.type == "CryptoSeca": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSeca(info) else: return "" if self.type == "CryptoVia": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoVia(info) else: return "" if self.type == "CryptoIrdeto": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoIrdeto(info) else: return "" if self.type == "CryptoNDS": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNDS(info) else: return "" if self.type == "CryptoConax": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoConax(info) else: return "" if self.type == "CryptoCryptoW": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoCryptoW(info) else: return "" if self.type == "CryptoBeta": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBeta(info) else: return "" if self.type == "CryptoNagra": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNagra(info) else: return "" if self.type == "CryptoBiss": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBiss(info) else: return "" if self.type == "CryptoDre": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoDre(info) else: return "" if self.type == "CryptoTandberg": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoTandberg(info) else: return "" if self.type == "CryptoSpecial": data = self.GetEcmInfo2() if data['decode'] == "Network" or data['decode'] == "Local" or data['protocol'] == "gbox": return "Protocol Gbox" elif int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSpecial(info) else: return "" if self.type == "CryptoNameCaid": data = self.GetEcmInfo2() if data['decode'] == "Network" or data['decode'] == "Local" or data['protocol'] == "gbox": return "Protocol Gbox" elif int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNameCaid(info) else: return "" if self.type == "ResolutionString": return self.createResolution(info) if self.type == "VideoCodec": return self.createVideoCodec(info) if self.type == "Ecmtext": return self.get_Ecmtext() if self.type == "PIDtext": data = self.GetEcmInfo2() if data['decode'] == "Network" or data['decode'] == "Local" or data['protocol'] == "gbox": return self.get_PIDtext() else: return "" if self.type == "InfoPeer": data = self.GetEcmInfo2() if data['decode'] == "Network" or data['decode'] == "Local" or data['protocol'] == "gbox": ecm_info = self.GetEcmInfo2() decode = ecm_info.get("decode", '') prov = ecm_info.get("prov", '') paddress = level = dist = '' if prov: prov = prov[0:4] prov_info = self.provfile(caid, prov) paddress = prov_info.get("paddress", '') if paddress: host = paddress.split(":")[0] if host in self.ecmDict: paddress = self.ecmDict[host] level = prov_info.get("level", None) dist = prov_info.get("distance", None) if decode: if decode == "Internal" or decode == "Local": return "CAID: %s - %s - ID: %s" % (caid, decode, prov) elif decode == "Network": return "CAID: %s - %s - ID: %s %s Level: %s Dist: %s" % (caid, decode, prov, paddress, level, dist) return "CAID: %s - %s - ID: %s" % (data['caid'], data['decode'], data['prov']) if self.type == "ProviderName": return self.createProviderName(info) if self.type == "CamName": return self.get_caName() if self.type == "CaidList": return self.get_caidlist() elif self.type == "NetInfo": if is_crypted != 1: return '' data = self.GetEcmInfo2() if data['using']: return "CAID: %s - %s - HOPS: %s - ECM: %ss" % (data['caid'], data['address'], data['hops'], data['ecm_time']) elif data['reader']: return "CAID: %s - %s - HOPS: %s - ECM: %ss" % (data['caid'], data['address_from'], data['hops'], data['ecm_time']) elif data['decode']: ecm_info = self.GetEcmInfo2() decode = ecm_info.get("decode", '') prov = ecm_info.get("prov", '') paddress = level = dist = '' if prov: prov = prov[0:4] prov_info = self.provfile(caid, prov) paddress = prov_info.get("paddress", '') if paddress: host = paddress.split(":")[0] if host in self.ecmDict: paddress = self.ecmDict[host] level = prov_info.get("level", None) dist = prov_info.get("distance", None) if decode: if decode == "Internal" or decode == "Local": return "CAID: %s - %s - ID: %s" % (caid, decode, prov) elif decode == "Network": return "CAID: %s - %s - ID: %s %s Level: %s Dist: %s" % (caid, decode, prov, paddress, level, dist) return "CAID: %s - %s - ID: %s" % (data['caid'], data['decode'], data['prov']) elif data['using'] or data['reader']: if data['address'] == "/dev/sci0": return "CAID: %s - Card in Slot #1 - HOPS: %s - ECM: %ss" % (data['caid'], data['hops'], data['ecm_time']) elif data['address'] == "/dev/sci1": return "CAID: %s - Card in Slot #2 - HOPS: %s - ECM: %ss" % (data['caid'], data['hops'], data['ecm_time']) else: if data['address_from'] == "/dev/sci0": return "CAID: %s - Card in Slot #1 - HOPS: %s - ECM: %ss" % (data['caid'], data['hops'], data['ecm_time']) elif data['address_from'] == "/dev/sci1": return "CAID: %s - Card in Slot #2 - HOPS: %s - ECM: %ss" % (data['caid'], data['hops'], data['ecm_time']) elif data['source']: if data['source'] == "emu": return "EMU %s" % (data['caid']) else: return "CAID: %s - %s %s" % (data['caid'], data['source'], data['ecm_time']) elif self.type == "EcmInfo": if is_crypted != 1: return '' data = self.GetEcmInfo2() name = caidnames(caid, provid) name = name[:15] return "Provider: %s %s " % (data['provider'], name) elif self.type == "EcmInfo2": if is_crypted != 1: return '' data = self.GetEcmInfo2() name = caidnames(caid, provid) name = name[:15] if data['using'] == "newcamd" or data['using'] == "NewCamd": return "Provider: %s %s " % (data['provider'], name) elif data['using'] == "CCcam" or data['using'] == "CCcam-s2s": return "Provider: %s %s " % (data['provider'], name) elif data['using'] == "gbox" or data['address'] == "127.0.0.1:*": return "Provider: %s %s " % (data['provider'], name) elif data['decode'] == "Network" or data['decode'] == "Local": ecm_info = self.GetEcmInfo2() return "CAID: %s BoxId: %s %s " % (caid, data['provider'], name) else: if prov == '000000': return "CAID: %s Provider: %s " % (data['caid'], name) else: return "CAID: %s Provider: %s %s " % (data['caid'], data['provider'], name) return "" elif self.type == "E-C-N": if is_crypted != 1: return '' CamName = self.get_caName() if self.type == "CryptoNameCaid" or CamName == 'Common Interface': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNameCaid(info) else: return "" elif self.type == "CryptoSpecial" or CamName == 'Common Interface': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSpecial(info) else: return "" data = self.GetEcmInfo2() if data['reader'] or data['using'] or data['protocol'] or data['from'] or data['hops'] or data['decode'] or data['address']: if data['using'] == "fta": return "Fta" elif data['using'] == "emu" or data['from'] == "constcw": return "Emulator" elif data['hops'] == "0" and data['protocol'] == "none" or data['from'] == "cache*": return "Cache" elif data['using'] == "gbox" or data['address'] == "127.0.0.1:*": return "Sharing" elif data['hops'] == "0" and data['using'] == "sci" or data['hops'] == "0" and data['using'] == "smartreader+": return "Card" elif data['hops'] == "0" and data['protocol'] == "cccam" or data['hops'] == "0" and data['protocol'] == "newcamd": return "Card" elif data['hops'] == "0" and data['using'] == "newcamd" or data['hops'] == "0" and data['using'] == "NewCamd": return "Card" elif data['hops'] == "0" and data['using'] == "CCcam" or data['hops'] == "0" and data['using'] == "CCcam-s2s": return "Card" elif data['decode'] == "Local": return "Card" else: return "Network" elif data['reader'] or data['using'] or data['protocol'] or data['from'] or data['hops']: pos = data['address_from'].find('.') or data['from'].find('.') if pos > 1: return "Network" else: return "Card" return "" if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll(config.usage.infobar_frontend_source.value == "settings") if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw if not feraw: feraw = info.getInfoObject(iServiceInformation.sTransponderData) if not feraw: return "" fedata = ConvertToHumanReadable(feraw) else: fedata = self.fedata if self.type == "All": self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata,feraw) + addspace(self.createTransponderName(feraw)) + "\n"\ + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + "\n"\ + addspace(self.createPIDInfo(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata,feraw) + addspace(self.createTransponderName(feraw)) + "\n" \ + addspace(self.createCryptoBar(info)) + self.current_source + "\n" \ + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "AllSimpleLD": self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: if "DVB-T" in feraw.get("tuner_type") or "DVB-T2" in feraw.get("tuner_type"): return addspace(self.createProviderName(info)) + self.createTransponderInfo2(fedata,feraw) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo2(fedata,feraw) + ' (' + self.createTransponderName(feraw) + ') ' else: if "DVB-T" in feraw.get("tuner_type") or "DVB-T2" in feraw.get("tuner_type"): return addspace(self.createProviderName(info)) + self.createTransponderInfo2(fedata,feraw) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo2(fedata,feraw) + ' (' + self.createTransponderName(feraw) + ') ' if self.type == "ServiceInfo": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) \ + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) + addspace(self.createTransponderName(feraw))\ + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "TransponderInfo2line": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createTransponderName(feraw)) + "\n" \ + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata))\ + addspace(self.createSymbolRate(fedata, feraw)) + self.createModulation(fedata) + '-' + addspace(self.createFEC(fedata, feraw)) if self.type == "PIDInfo": return self.createPIDInfo(info) if self.type == "ServiceRef": return self.createServiceRef(info) if not feraw: return "" if self.type == "TransponderInfo": return self.createTransponderInfo(fedata,feraw) if self.type == "TransponderInfo2": return self.createTransponderInfo2(fedata,feraw) if self.type == "TransponderFrequency": return self.createFrequency(feraw) if self.type == "TransponderSymbolRate": return self.createSymbolRate(fedata, feraw) if self.type == "TransponderPolarization": return self.createPolarization(fedata) if self.type == "TransponderFEC": return self.createFEC(fedata, feraw) if self.type == "TransponderModulation": return self.createModulation(fedata) if self.type == "OrbitalPosition": return self.createOrbPos(feraw) if self.type == "TunerType": return self.createTunerType(feraw) if self.type == "TunerSystem": return self.createTunerSystem(fedata) if self.type == "OrbitalPositionOrTunerSystem": return self.createOrbPosOrTunerSystem(fedata,feraw) if self.type == "TerrestrialChannelNumber": return self.createChannelNumber(fedata, feraw) return "" text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False if self.type == "CryptoCaidSecaAvailable": request_caid = "S" request_selected = False elif self.type == "CryptoCaidViaAvailable": request_caid = "V" request_selected = False elif self.type == "CryptoCaidIrdetoAvailable": request_caid = "I" request_selected = False elif self.type == "CryptoCaidNDSAvailable": request_caid = "ND" request_selected = False elif self.type == "CryptoCaidConaxAvailable": request_caid = "CO" request_selected = False elif self.type == "CryptoCaidCryptoWAvailable": request_caid = "CW" request_selected = False elif self.type == "CryptoCaidPowerVUAvailable": request_caid = "P" request_selected = False elif self.type == "CryptoCaidBetaAvailable": request_caid = "B" request_selected = False elif self.type == "CryptoCaidNagraAvailable": request_caid = "N" request_selected = False elif self.type == "CryptoCaidBissAvailable": request_caid = "BI" request_selected = False elif self.type == "CryptoCaidDre3Available": request_caid = "D3" request_selected = False elif self.type == "CryptoCaidDreAvailable": request_caid = "D" request_selected = False elif self.type == "CryptoCaidBulCrypt1Available": request_caid = "B1" request_selected = False elif self.type == "CryptoCaidBulCrypt2Available": request_caid = "B2" request_selected = False elif self.type == "CryptoCaidVerimatrixAvailable": request_caid = "VM" request_selected = False elif self.type == "CryptoCaidTandbergAvailable": request_caid = "TB" request_selected = False elif self.type == "CryptoCaidSecaSelected": request_caid = "S" request_selected = True elif self.type == "CryptoCaidViaSelected": request_caid = "V" request_selected = True elif self.type == "CryptoCaidIrdetoSelected": request_caid = "I" request_selected = True elif self.type == "CryptoCaidNDSSelected": request_caid = "ND" request_selected = True elif self.type == "CryptoCaidConaxSelected": request_caid = "CO" request_selected = True elif self.type == "CryptoCaidCryptoWSelected": request_caid = "CW" request_selected = True elif self.type == "CryptoCaidPowerVUSelected": request_caid = "P" request_selected = True elif self.type == "CryptoCaidBetaSelected": request_caid = "B" request_selected = True elif self.type == "CryptoCaidNagraSelected": request_caid = "N" request_selected = True elif self.type == "CryptoCaidBissSelected": request_caid = "BI" request_selected = True elif self.type == "CryptoCaidDre3Selected": request_caid = "D3" request_selected = True elif self.type == "CryptoCaidDreSelected": request_caid = "D" request_selected = True elif self.type == "CryptoCaidBulCrypt1Selected": request_caid = "B1" request_selected = True elif self.type == "CryptoCaidBulCrypt2Selected": request_caid = "B2" request_selected = True elif self.type == "CryptoCaidVerimatrixSelected": request_caid = "VM" request_selected = True elif self.type == "CryptoCaidTandbergSelected": request_caid = "TB" request_selected = True else: return False request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() data = self.GetEcmInfo2() if data is None: return False current_caid = data['caid'] or data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if caid_entry[3] == request_caid: if request_selected: if int(caid_entry[0], 16) <= int(current_caid, 16) <= int(caid_entry[1], 16): return True else: # request available try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int(caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True elif what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what) else: self.what = what Converter.changed(self, what) def doSwitch(self): self.DynamicSwitch = True self.DynamicTimer.stop() Converter.changed(self, self.what)
class PliExtraInfo(Poll, Converter): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.ca_table = ( ("CryptoCaidDvnAvailable", "TB", False), ("CryptoCaidSmsxAvailable", "SM", False), ("CryptoCaidTongfangAvailable", "TF", False), ("CryptoCaidSecaAvailable", "S", False), ("CryptoCaidViaAvailable", "V", False), ("CryptoCaidIrdetoAvailable", "I", False), ("CryptoCaidNDSAvailable", "Nd", False), ("CryptoCaidConaxAvailable", "Co", False), ("CryptoCaidCryptoWAvailable", "Cw", False), ("CryptoCaidPowerVUAvailable", "P", False), ("CryptoCaidBetaAvailable", "B", False), ("CryptoCaidNagraAvailable", "N", False), ("CryptoCaidBissAvailable", "Bi", False), ("CryptoCaidDre3Available", "D3", False), ("CryptoCaidDreAvailable", "D", False), ("CryptoCaidBulCrypt1Available", "B1", False), ("CryptoCaidBulCrypt2Available", "B2", False), ("CryptoCaidVerimatrixAvailable", "Vm", False), ("CryptoCaidTandbergAvailable", "T", False), ("CryptoCaidDvnSelected", "TB", True), ("CryptoCaidSmsxSelected", "SM", True), ("CryptoCaidTongfangSelected", "TF", True), ("CryptoCaidSecaSelected", "S", True), ("CryptoCaidViaSelected", "V", True), ("CryptoCaidIrdetoSelected", "I", True), ("CryptoCaidNDSSelected", "Nd", True), ("CryptoCaidConaxSelected", "Co", True), ("CryptoCaidCryptoWSelected", "Cw", True), ("CryptoCaidPowerVUSelected", "P", True), ("CryptoCaidBetaSelected", "B", True), ("CryptoCaidNagraSelected", "N", True), ("CryptoCaidBissSelected", "Bi", True), ("CryptoCaidDre3Selected", "D3", True), ("CryptoCaidDreSelected", "D", True), ("CryptoCaidBulCrypt1Selected", "B1", True), ("CryptoCaidBulCrypt2Selected", "B2", True), ("CryptoCaidVerimatrixSelected", "Vm", True), ("CryptoCaidTandbergSelected", "T", True), ) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = "" self.current_caid = "0" self.current_provid = "0" self.current_ecmpid = "0" def createCryptoBar(self, info): res = "" available_caids = info.getInfoObject(iServiceInformation.sCAIDs) colors = parameters.get("PliExtraInfoColors", ( 0x0000FF00, 0x00FFFF00, 0x007F7F7F, 0x00FFFFFF)) # "found", "not found", "available", "default" colors for caid_entry in caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int( caid_entry[1], 16): color = Hex2strColor(colors[0]) # green else: color = Hex2strColor(colors[2]) # grey try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int( caid_entry[1], 16): color = Hex2strColor(colors[1]) # yellow except: pass if color != Hex2strColor(colors[2]) or caid_entry[4]: if res: res += " " res += color + caid_entry[3] res += Hex2strColor( colors[3] ) # white (this acts like a color "reset" for following strings return res def createCryptoSpecial(self, info): caid_system = _("CA System: ") caid_name = _("FTA") if int(self.current_caid, 16) == 0: return caid_system + caid_name try: for caid_entry in caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int( caid_entry[1], 16): caid_name = caid_entry[2] break caid_num = "%04x" % (int(self.current_caid, 16)) caid_num = caid_num.upper() return caid_system + caid_name + "@" + caid_num except: pass return "" def createResolution(self, info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return "" yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ("i", "p", "")[info.getInfo(iServiceInformation.sProgressive)] fps = (info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000 if not fps: if os.path.exists("/proc/stb/vmpeg/0/framerate"): with open("/proc/stb/vmpeg/0/framerate", "r") as fp: fps = (int(fp.read()) + 500) / 1000 elif os.path.exists("/proc/stb/vmpeg/0/fallback_framerate"): with open("/proc/stb/vmpeg/0/fallback_framerate", "r") as fp: fps = (int(fp.read()) + 0) / 1000 if not mode: if os.path.exists("/proc/stb/vmpeg/0/progressive"): with open("/proc/stb/vmpeg/0/progressive", "r") as fp: mode = "p" if int(fp.read(), 16) else "i" return "%sx%s%s%s" % (xres, yres, mode, fps) def createGamma(self, info): return ("SDR", "HDR", "HDR10", "HLG", "")[info.getInfo(iServiceInformation.sGamma)] def createVideoCodec(self, info): return codec_data.get(info.getInfo(iServiceInformation.sVideoType), _("N/A")) def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) tsid = info.getInfo(iServiceInformation.sTSID) onid = info.getInfo(iServiceInformation.sONID) if vpid < 0: vpid = 0 if apid < 0: apid = 0 if pcrpid < 0: pcrpid = 0 if sidpid < 0: sidpid = 0 if tsid < 0: tsid = 0 if onid < 0: onid = 0 return "%d-%d:%05d:%04d:%04d:%04d" % (onid, tsid, sidpid, vpid, apid, pcrpid) def createTransponderInfo(self, fedata, feraw, info): if not feraw: refstr = info.getInfoString(iServiceInformation.sServiceref) if "%3a//" in refstr.lower(): return refstr.split(":")[10].replace("%3a", ":").replace("%3A", ":") return "" elif "DVB-T" in feraw.get("tuner_type"): tmp = addspace(self.createChannelNumber(fedata, feraw)) + addspace( self.createFrequency(feraw)) + addspace( self.createPolarization(fedata)) else: tmp = addspace(self.createFrequency(feraw)) + addspace( self.createPolarization(fedata)) return addspace(self.createTunerSystem(fedata)) + tmp + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) \ + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) + addspace(self.createMisPls(fedata)) def createFrequency(self, feraw): frequency = feraw.get("frequency") if frequency: if "DVB-T" in feraw.get("tuner_type"): return str(int(frequency / 1000000. + 0.5)) else: return str(int(frequency / 1000 + 0.5)) return "" def createChannelNumber(self, fedata, feraw): return "DVB-T" in feraw.get("tuner_type") and fedata.get( "channel") or "" def createSymbolRate(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): bandwidth = fedata.get("bandwidth") if bandwidth: return bandwidth else: symbolrate = fedata.get("symbol_rate") if symbolrate: return str(symbolrate / 1000) return "" def createPolarization(self, fedata): return fedata.get("polarization_abbreviation") or "" def createFEC(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): code_rate_lp = fedata.get("code_rate_lp") code_rate_hp = fedata.get("code_rate_hp") guard_interval = fedata.get("guard_interval") if code_rate_lp and code_rate_hp and guard_interval: return code_rate_lp + "-" + code_rate_hp + "-" + guard_interval else: fec = fedata.get("fec_inner") if fec: return fec return "" def createModulation(self, fedata): if fedata.get("tuner_type") == _("Terrestrial"): constellation = fedata.get("constellation") if constellation: return constellation else: modulation = fedata.get("modulation") if modulation: return modulation return "" def createTunerType(self, feraw): return feraw.get("tuner_type") or "" def createTunerSystem(self, fedata): return fedata.get("system") or "" def createOrbPos(self, feraw): orbpos = feraw.get("orbital_position") if orbpos > 1800: return _("%.1f° W") % ((3600 - orbpos) / 10.0) elif orbpos > 0: return _("%.1f° E") % (orbpos / 10.0) return "" def createOrbPosOrTunerSystem(self, fedata, feraw): orbpos = self.createOrbPos(feraw) if orbpos is not "": return orbpos return self.createTunerSystem(fedata) def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) def createMisPls(self, fedata): tmp = "" if fedata.get("is_id") > -1: tmp = "MIS %d" % fedata.get("is_id") if fedata.get("pls_code") > 0: tmp = addspace(tmp) + "%s %d" % (fedata.get("pls_mode"), fedata.get("pls_code")) if fedata.get("t2mi_plp_id") > -1: tmp = addspace(tmp) + "T2MI %d PID %d" % ( fedata.get("t2mi_plp_id"), fedata.get("t2mi_pid")) return tmp @cached def getText(self): service = self.source.service if service is None: return "" info = service and service.info() if not info: return "" if self.type == "CryptoInfo": self.getCryptoInfo(info) if config.usage.show_cryptoinfo.value: return addspace(self.createCryptoBar( info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace( self.current_source) + self.createCryptoSpecial(info) if self.type == "CryptoBar": self.getCryptoInfo(info) return self.createCryptoBar(info) if self.type == "CryptoSpecial": self.getCryptoInfo(info) return self.createCryptoSpecial(info) if self.type == "Resolution": return self.createResolution(info) if self.type == "ResolutionString": return addspace( self.createResolution(info)) + self.createGamma(info) if self.type == "VideoCodec": return self.createVideoCodec(info) if self.type == "Gamma": return self.createGamma(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll( config.usage.infobar_frontend_source.value == "settings") if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw if not feraw: feraw = info.getInfoObject(iServiceInformation.sTransponderData) fedata = ConvertToHumanReadable(feraw) else: fedata = self.fedata if self.type == "All": self.getCryptoInfo(info) if config.usage.show_cryptoinfo.value: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw, info) + "\n" \ + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + "\n" \ + addspace(self.createPIDInfo(info)) + addspace(self.createVideoCodec(info)) + addspace(self.createResolution(info)) + self.createGamma(info) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw, info) + "\n" \ + addspace(self.createCryptoBar(info)) + self.current_source + "\n" \ + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + addspace(self.createResolution(info)) + self.createGamma(info) if self.type == "PIDInfo": return self.createPIDInfo(info) if not feraw: return "" if self.type == "ServiceInfo": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) \ + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) \ + addspace(self.createVideoCodec(info)) + addspace(self.createResolution(info)) + self.createGamma(info) if self.type == "TransponderInfo": return self.createTransponderInfo(fedata, feraw, info) if self.type == "TransponderFrequency": return self.createFrequency(feraw) if self.type == "TransponderSymbolRate": return self.createSymbolRate(fedata, feraw) if self.type == "TransponderPolarization": return self.createPolarization(fedata) if self.type == "TransponderFEC": return self.createFEC(fedata, feraw) if self.type == "TransponderModulation": return self.createModulation(fedata) if self.type == "OrbitalPosition": return self.createOrbPos(feraw) if self.type == "TunerType": return self.createTunerType(feraw) if self.type == "TunerSystem": return self.createTunerSystem(fedata) if self.type == "OrbitalPositionOrTunerSystem": return self.createOrbPosOrTunerSystem(fedata, feraw) if self.type == "TerrestrialChannelNumber": return self.createChannelNumber(fedata, feraw) if self.type == "TransponderInfoMisPls": return self.createMisPls(fedata) return _("invalid type") text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in caid_data: if caid_entry[3] == request_caid: if request_selected: if int(caid_entry[0], 16) <= int(current_caid, 16) <= int( caid_entry[1], 16): return True else: # request available try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int( caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what)
class LdExtraInfo(Poll, Converter, object): ecmDict = { } def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.caid_data = { ( "0x100", "0x1ff", "Seca", "S" ), ( "0x500", "0x5ff", "Via", "V" ), ( "0x600", "0x6ff", "Irdeto", "I" ), ( "0x900", "0x9ff", "NDS", "ND" ), ( "0xb00", "0xbff", "Conax", "CO" ), ( "0xd00", "0xdff", "CryptoW", "CW" ), ( "0xe00", "0xeff", "PowerVU", "P" ), ("0x1000", "0x10FF", "Tandberg", "TB" ), ("0x1700", "0x17ff", "Beta", "B" ), ("0x1800", "0x18ff", "Nagra", "N" ), ("0x2600", "0x2600", "Biss", "BI" ), ("0x4ae0", "0x4ae1", "Dre", "D" ), ("0x4aee", "0x4aee", "BulCrypt", "B1" ), ("0x5581", "0x5581", "BulCrypt", "B2" ) } self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None self.DynamicTimer = eTimer() self.DynamicTimer.callback.append(self.doSwitch) def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = "" self.current_caid = "0" self.current_provid = "0" self.current_ecmpid = "0" def GetEcmInfo2(self): ecm = None data = {} try: ecm = open("/tmp/ecm.info", "rb").readlines() info = {} for line in ecm: x = line.lower().find("msec") if x != -1: info["ecm time"] = line[0:x+4] elif line.lower().find("response:") != -1: y = line.lower().find("response:") if y != -1: info["ecm time"] = line[y+9:].strip("\n\r") else: item = line.split(":", 1) if len(item) > 1: info[item[0].strip().lower()] = item[1].strip() else: if not info.has_key("caid"): x = line.lower().find("caid") if x != -1: y = line.find(",") if y != -1: info["caid"] = line[x+5:y] data['prov'] = info.get('prov', '') data['system'] = info.get('system', '') data['caid'] = info.get('caid', '0') data['pid'] = info.get('pid', '0') data['provider'] = info.get('provider', '') data['provid'] = info.get('provid', '') if data['provider'] == '': data['provider'] = info.get('prov', ' ') data['chid'] = info.get('chid', '0') data['using'] = info.get('using', '') data['decode'] = info.get('decode', '') data['source'] = info.get('source', '') data['reader'] = info.get('reader', '') data['address'] = info.get('address', 'Unknown') data['address_from'] = info.get('from', 'Unknown') data['from'] = info.get('from', 'Unknown') data['protocol'] = info.get('protocol', '') data['hops'] = info.get('hops', '0') data['share'] = info.get('share', '') data['ecm_time'] = info.get('ecm time', '?') data['Time'] = info.get('Time', '?') data['cw0'] = info.get('cw0', '0') data['cw1'] = info.get('cw1', '0') except: data['prov'] = '' data['system'] = '' data['caid'] = '0x00' data['pid'] = '0x00' data['provider'] = '' data['provid'] = '' data['chid'] = '0x00' data['using'] = '' data['decode'] = '' data['source'] = '' data['reader'] = '' data['address'] = '' data['address_from'] = '' data['from'] = '' data['protocol'] = '' data['hops'] = '0' data['share'] = '' data['ecm_time'] = '0' data['Time'] = '0' data['cw0'] = '0' data['cw1'] = '0' return data def get_caName(self): try: f = open("/etc/CurrentLdCamName",'r') name = f.readline().strip() f.close() except: name = "Common Interface" return name def get_Ecmtext(self): ecmtext = '' if fileExists('/tmp/ecm.info'): f = open('/tmp/ecm.info', 'r') for line in f.readlines(): line = line.replace('\n', '') line = line.strip() if len(line) > 3: ecmtext = ecmtext + line + '\n' f.close() elif fileExists('/tmp/ecm0.info'): f = open('/tmp/ecm0.info', 'r') for line in f.readlines(): line = line.replace('\n', '') line = line.strip() if len(line) > 3: ecmtext = ecmtext + line + '\n' f.close() elif fileExists('/tmp/ecm1.info'): f = open('/tmp/ecm1.info', 'r') for line in f.readlines(): line = line.replace('\n', '') line = line.strip() if len(line) > 3: ecmtext = ecmtext + line + '\n' f.close() if len(ecmtext) < 5: ecmtext = '\n\n ' + _('Ecm info not available.') return str(ecmtext) def get_PIDtext(self): pidtext = '' if fileExists('/tmp/pid.info'): f = open('/tmp/pid.info', 'r') for line in f.readlines(): line = line.replace('\n', '') line = line.strip() if len(line) > 3: pidtext = pidtext + line + '\n' f.close() if len(pidtext) < 5: pidtext = '\n\n ' + _('Pid info not available.') return str(pidtext) def provfile(self, caid, prov): ecm_info = self.GetEcmInfo2() provider = None pinfo = {} try: provider = open("/tmp/share.info", "rb").readlines() except: pass if provider: for line in provider: x = line.lower().find("id:") y = line.lower().find("card ") if x != -1 and y != -1: if caid != "0500": if line[x+3:].strip("\n\r") == prov.strip("\n\r") and line[y+5:y+9] == caid: x = line.lower().find("at ") if x != -1: y = line.lower().find("card ") if y != -1: pinfo["paddress"] = line[x+3:y-1] x = line.lower().find("sl:") if x != -1: y = line.lower().find("lev:") if y != -1: pinfo["slot"] = line[x+3:y-1] x = line.lower().find("dist:") if x != -1: pinfo["level"] = line[y+4:x-1] y = line.lower().find("id:") if y != -1: pinfo["distance"] = line[x+5:y-1] elif line[x+3:].strip("\n\r") == prov.strip("\n\r") and line[y+5:y+8] == caid[:-1]: x = line.lower().find("at ") if x != -1: y = line.lower().find("card ") if y != -1: pinfo["paddress"] = line[x+3:y-1] x = line.lower().find("sl:") if x != -1: y = line.lower().find("lev:") if y != -1: pinfo["slot"] = line[x+3:y-1] x = line.lower().find("dist:") if x != -1: pinfo["level"] = line[y+4:x-1] y = line.lower().find("id:") if y != -1: pinfo["distance"] = line[x+5:y-1] return pinfo def createCryptoBar(self, info): res = "" available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): color="\c0000??00" else: color = "\c007?7?7?" try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int(caid_entry[1], 16): color="\c00????00" except: pass if res: res += " " res += color + caid_entry[3] res += "\c00??????" return res def createCryptoSeca(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x100', 16) <= int(self.current_caid, 16) <= int('0x1ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x100', 16) <= caid <= int('0x1ff', 16): color="\c00eeee00" except: pass res = color + 'S' res += "\c00??????" return res def createCryptoVia(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x500', 16) <= int(self.current_caid, 16) <= int('0x5ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x500', 16) <= caid <= int('0x5ff', 16): color="\c00eeee00" except: pass res = color + 'V' res += "\c00??????" return res def createCryptoIrdeto(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x600', 16) <= int(self.current_caid, 16) <= int('0x6ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x600', 16) <= caid <= int('0x6ff', 16): color="\c00eeee00" except: pass res = color + 'I' res += "\c00??????" return res def createCryptoNDS(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x900', 16) <= int(self.current_caid, 16) <= int('0x9ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x900', 16) <= caid <= int('0x9ff', 16): color="\c00eeee00" except: pass res = color + 'NDS' res += "\c00??????" return res def createCryptoConax(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xb00', 16) <= int(self.current_caid, 16) <= int('0xbff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xb00', 16) <= caid <= int('0xbff', 16): color="\c00eeee00" except: pass res = color + 'CO' res += "\c00??????" return res def createCryptoCryptoW(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xd00', 16) <= int(self.current_caid, 16) <= int('0xdff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xd00', 16) <= caid <= int('0xdff', 16): color="\c00eeee00" except: pass res = color + 'CW' res += "\c00??????" return res def createCryptoPowerVU(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xe00', 16) <= int(self.current_caid, 16) <= int('0xeff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xe00', 16) <= caid <= int('0xeff', 16): color="\c00eeee00" except: pass res = color + 'P' res += "\c00??????" return res def createCryptoTandberg(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1010', 16) <= int(self.current_caid, 16) <= int('0x1010', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x1010', 16) <= caid <= int('0x1010', 16): color="\c00eeee00" except: pass res = color + 'T' res += "\c00??????" return res def createCryptoBeta(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1700', 16) <= int(self.current_caid, 16) <= int('0x17ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x1700', 16) <= caid <= int('0x17ff', 16): color="\c00eeee00" except: pass res = color + 'B' res += "\c00??????" return res def createCryptoNagra(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1800', 16) <= int(self.current_caid, 16) <= int('0x18ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x1800', 16) <= caid <= int('0x18ff', 16): color="\c00eeee00" except: pass res = color + 'N' res += "\c00??????" return res def createCryptoBiss(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x2600', 16) <= int(self.current_caid, 16) <= int('0x26ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x2600', 16) <= caid <= int('0x26ff', 16): color="\c00eeee00" except: pass res = color + 'BI' res += "\c00??????" return res def createCryptoDre(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x4ae0', 16) <= int(self.current_caid, 16) <= int('0x4ae1', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x4ae0', 16) <= caid <= int('0x4ae1', 16): color="\c00eeee00" except: pass res = color + 'DC' res += "\c00??????" return res def createCryptoSpecial(self, info): is_crypted = info.getInfo(iServiceInformation.sIsCrypted) if is_crypted != 1: return _("Free To Air") caid_name = _("Encrypt") try: for caid_entry in self.caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ":%04x:%04x:%04x:%04x" % (int(self.current_caid,16), int(self.current_provid,16), info.getInfo(iServiceInformation.sSID), int(self.current_ecmpid,16)) except: pass return "" def createCryptoNameCaid(self, info): is_crypted = info.getInfo(iServiceInformation.sIsCrypted) if is_crypted != 1: return _("Free To Air") caid_name = _("Encrypt") try: for caid_entry in self.caid_data: if int(self.current_caid,16) == 0: return caid_name elif int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ":%04x" % (int(self.current_caid,16)) except: pass return "" def createResolution(self, info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return "" yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ("i", "p", "", " ")[info.getInfo(iServiceInformation.sProgressive)] fps = str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) if int(fps) <= 0: fps = "" return str(xres) + "x" + str(yres) + mode + fps def createVideoCodec(self, info): return ("MPEG2", "MPEG4 H.264", "MPEG1", "MPEG4-VC", "VC1", "VC1-SM", "HEVC H.265", "")[info.getInfo(iServiceInformation.sVideoType)] def createServiceRef(self, info): ref = info.getInfoString(iServiceInformation.sServiceref) if ref < 0 : ref = 0 return "Ref: " + str(ref) def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) tsid = info.getInfo(iServiceInformation.sTSID) onid = info.getInfo(iServiceInformation.sONID) if vpid < 0 : vpid = 0 if apid < 0 : apid = 0 if pcrpid < 0 : pcrpid = 0 if sidpid < 0 : sidpid = 0 if tsid < 0 : tsid = 0 if onid < 0 : onid = 0 return "Pid: %d-%d:%05d:%04d:%04d:%04d" % (onid, tsid, sidpid, vpid, apid, pcrpid) def createTransponderInfo(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): tmp = addspace(self.createChannelNumber(fedata, feraw)) + self.createFrequency(fedata) + "/" + self.createPolarization(fedata) else: tmp = addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata)) return addspace(self.createTunerSystem(fedata)) + tmp + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) \ + addspace(self.createModulation(fedata)) + self.createOrbPos(feraw) def createFrequency(self, feraw): frequency = feraw.get("frequency") if frequency: return str(frequency) return "" def createChannelNumber(self, fedata, feraw): channel = channelnumbers.getChannelNumber(feraw.get("frequency"), feraw.get("tuner_number")) if channel: return _("CH") + "%s" % channel return "" def createSymbolRate(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): bandwidth = fedata.get("bandwidth") if bandwidth: return bandwidth else: symbolrate = fedata.get("symbol_rate") if symbolrate: return str(symbolrate) return "" def createPolarization(self, fedata): polarization = fedata.get("polarization_abbreviation") if polarization: return polarization return "" def createFEC(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): code_rate_lp = fedata.get("code_rate_lp") code_rate_hp = fedata.get("code_rate_hp") if code_rate_lp and code_rate_hp: return code_rate_lp + "-" + code_rate_hp else: fec = fedata.get("fec_inner") if fec: return fec return "" def createModulation(self, fedata): if fedata.get("tuner_type") == _("Terrestrial"): constellation = fedata.get("constellation") if constellation: return constellation else: modulation = fedata.get("modulation") if modulation: return modulation return "" def createTunerType(self, feraw): tunertype = feraw.get("tuner_type") if tunertype: return tunertype return "" def createTunerSystem(self, fedata): tunersystem = fedata.get("system") if tunersystem: return tunersystem return "" def createOrbPos(self, feraw): orbpos = feraw.get("orbital_position") if orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "\xc2\xb0 W" elif orbpos > 0: return str((float(orbpos)) / 10.0) + "\xc2\xb0 E" return "" def createOrbPosOrTunerSystem(self, fedata,feraw): orbpos = self.createOrbPos(feraw) if orbpos is not "": return orbpos return self.createTunerSystem(fedata) def createTransponderName(self,feraw): orbpos = feraw.get("orbital_position") if orbpos is None: # Not satellite return "" freq = feraw.get("frequency") if freq and freq < 10700000: # C-band if orbpos > 1800: orbpos += 1 else: orbpos -= 1 sat_names = { 30: 'Rascom/Eutelsat 3E', 48: 'SES 5', 70: 'Eutelsat 7E', 90: 'Eutelsat 9E', 100: 'Eutelsat 10E', 130: 'Hot Bird', 160: 'Eutelsat 16E', 192: 'Astra 1KR/1L/1M/1N', 200: 'Arabsat 20E', 216: 'Eutelsat 21.5E', 235: 'Astra 3', 255: 'Eutelsat 25.5E', 260: 'Badr 4/5/6', 282: 'Astra 2E/2F/2G', 305: 'Arabsat 30.5E', 315: 'Astra 5', 330: 'Eutelsat 33E', 360: 'Eutelsat 36E', 380: 'Paksat', 390: 'Hellas Sat', 400: 'Express 40E', 420: 'Turksat', 450: 'Intelsat 45E', 480: 'Afghansat', 490: 'Yamal 49E', 530: 'Express 53E', 570: 'NSS 57E', 600: 'Intelsat 60E', 620: 'Intelsat 62E', 685: 'Intelsat 68.5E', 705: 'Eutelsat 70.5E', 720: 'Intelsat 72E', 750: 'ABS', 765: 'Apstar', 785: 'ThaiCom', 800: 'Express 80E', 830: 'Insat', 851: 'Intelsat/Horizons', 880: 'ST2', 900: 'Yamal 90E', 915: 'Mesat', 950: 'NSS/SES 95E', 1005: 'AsiaSat 100E', 1030: 'Express 103E', 1055: 'Asiasat 105E', 1082: 'NSS/SES 108E', 1100: 'BSat/NSAT', 1105: 'ChinaSat', 1130: 'KoreaSat', 1222: 'AsiaSat 122E', 1380: 'Telstar 18', 1440: 'SuperBird', 2310: 'Ciel', 2390: 'Echostar/Galaxy 121W', 2410: 'Echostar/DirectTV 119W', 2500: 'Echostar/DirectTV 110W', 2630: 'Galaxy 97W', 2690: 'NIMIQ 91W', 2780: 'NIMIQ 82W', 2830: 'Echostar/QuetzSat', 2880: 'AMC 72W', 2900: 'Star One', 2985: 'Echostar 61.5W', 2990: 'Amazonas', 3020: 'Intelsat 58W', 3045: 'Intelsat 55.5W', 3070: 'Intelsat 53W', 3100: 'Intelsat 50W', 3150: 'Intelsat 45W', 3169: 'Intelsat 43.1W', 3195: 'SES 40.5W', 3225: 'NSS/Telstar 37W', 3255: 'Intelsat 34.5W', 3285: 'Intelsat 31.5W', 3300: 'Hispasat', 3325: 'Intelsat 27.5W', 3355: 'Intelsat 24.5W', 3380: 'SES 22W', 3400: 'NSS 20W', 3420: 'Intelsat 18W', 3450: 'Telstar 15W', 3460: 'Express 14W', 3475: 'Eutelsat 12.5W', 3490: 'Express 11W', 3520: 'Eutelsat 8W', 3530: 'Nilesat/Eutelsat 7W', 3550: 'Eutelsat 5W', 3560: 'Amos', 3592: 'Thor/Intelsat' } if orbpos in sat_names: return sat_names[orbpos] elif orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "W" else: return str((float(orbpos)) / 10.0) + "E" def createProviderName(self,info): return info.getInfoString(iServiceInformation.sProvider) @cached def get_caidlist(self): caidlist = {} service = self.source.service if service: info = service and service.info() if info: available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if available_caids: for cs in self.caid_data: caidlist[cs] = (self.caid_data.get(cs),0) for caid in available_caids: c = "%x" % int(caid) if len(c) == 3: c = "0%s" % c c = c[:2].upper() if self.caid_data.has_key(c): caidlist[c] = (self.caid_data.get(c),1) ecm_info = self.GetEcmInfo2() if ecm_info: emu_caid = ecm_info.get("caid", "") if emu_caid and emu_caid != "0x000": c = emu_caid.lstrip("0x") if len(c) == 3: c = "0%s" % c c = c[:2].upper() caidlist[c] = (self.caid_data.get(c),2) return caidlist getCaidlist = property(get_caidlist) @cached def getText(self): self.DynamicTimer.start(200) service = self.source.service if service is None: return "" if service: info = service and service.info() is_crypted = info.getInfo(iServiceInformation.sIsCrypted) if not info: return "" if info: if info.getInfoObject(iServiceInformation.sCAIDs): ecm_info = self.GetEcmInfo2() if ecm_info: # caid caid = ecm_info.get("caid", '') caid = caid.lstrip("0x") caid = caid.upper() caid = caid.zfill(4) else: return "" if self.type == "CryptoInfo": self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createCryptoBar(info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace(self.current_source) + self.createCryptoSpecial(info) if self.type == "CryptoBar": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBar(info) else: return "" if self.type == "CryptoSeca": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSeca(info) else: return "" if self.type == "CryptoVia": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoVia(info) else: return "" if self.type == "CryptoIrdeto": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoIrdeto(info) else: return "" if self.type == "CryptoNDS": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNDS(info) else: return "" if self.type == "CryptoConax": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoConax(info) else: return "" if self.type == "CryptoCryptoW": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoCryptoW(info) else: return "" if self.type == "CryptoBeta": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBeta(info) else: return "" if self.type == "CryptoNagra": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNagra(info) else: return "" if self.type == "CryptoBiss": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBiss(info) else: return "" if self.type == "CryptoDre": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoDre(info) else: return "" if self.type == "CryptoTandberg": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoTandberg(info) else: return "" if self.type == "CryptoSpecial": data = self.GetEcmInfo2() if data['decode'] == "Network" or data['decode'] == "Local" or data['protocol'] == "gbox": return "Protocol Gbox" elif int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSpecial(info) else: return "" if self.type == "CryptoNameCaid": data = self.GetEcmInfo2() if data['decode'] == "Network" or data['decode'] == "Local" or data['protocol'] == "gbox": return "Protocol Gbox" elif int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNameCaid(info) else: return "" if self.type == "ResolutionString": return self.createResolution(info) if self.type == "VideoCodec": return self.createVideoCodec(info) if self.type == "Ecmtext": return self.get_Ecmtext() if self.type == "PIDtext": data = self.GetEcmInfo2() if data['decode'] == "Network" or data['decode'] == "Local" or data['protocol'] == "gbox": return self.get_PIDtext() else: return "" if self.type == "InfoPeer": data = self.GetEcmInfo2() if data['decode'] == "Network" or data['decode'] == "Local" or data['protocol'] == "gbox": ecm_info = self.GetEcmInfo2() decode = ecm_info.get("decode", '') prov = ecm_info.get("prov", '') paddress = level = dist = '' if prov: prov = prov[0:4] prov_info = self.provfile(caid, prov) paddress = prov_info.get("paddress", '') if paddress: host = paddress.split(":")[0] if host in self.ecmDict: paddress = self.ecmDict[host] level = prov_info.get("level", None) dist = prov_info.get("distance", None) if decode: if decode == "Internal" or decode == "Local": return "CAID: %s - %s - ID: %s" % (caid, decode, prov) elif decode == "Network": return "CAID: %s - %s - ID: %s %s Level: %s Dist: %s" % (caid, decode, prov, paddress, level, dist) return "CAID: %s - %s - ID: %s" % (data['caid'], data['decode'], data['prov']) if self.type == "ProviderName": return self.createProviderName(info) if self.type == "CamName": return self.get_caName() if self.type == "CaidList": return self.get_caidlist() elif self.type == "NetInfo": if is_crypted != 1: return '' data = self.GetEcmInfo2() if data['using']: return "CAID: %s - %s - HOPS: %s - ECM: %ss" % (data['caid'], data['address'], data['hops'], data['ecm_time']) elif data['reader']: return "CAID: %s - %s - HOPS: %s - ECM: %ss" % (data['caid'], data['address_from'], data['hops'], data['ecm_time']) elif data['decode']: ecm_info = self.GetEcmInfo2() decode = ecm_info.get("decode", '') prov = ecm_info.get("prov", '') paddress = level = dist = '' if prov: prov = prov[0:4] prov_info = self.provfile(caid, prov) paddress = prov_info.get("paddress", '') if paddress: host = paddress.split(":")[0] if host in self.ecmDict: paddress = self.ecmDict[host] level = prov_info.get("level", None) dist = prov_info.get("distance", None) if decode: if decode == "Internal" or decode == "Local": return "CAID: %s - %s - ID: %s" % (caid, decode, prov) elif decode == "Network": return "CAID: %s - %s - ID: %s %s Level: %s Dist: %s" % (caid, decode, prov, paddress, level, dist) return "CAID: %s - %s - ID: %s" % (data['caid'], data['decode'], data['prov']) elif data['using'] or data['reader']: if data['address'] == "/dev/sci0": return "CAID: %s - Card in Slot #1 - HOPS: %s - ECM: %ss" % (data['caid'], data['hops'], data['ecm_time']) elif data['address'] == "/dev/sci1": return "CAID: %s - Card in Slot #2 - HOPS: %s - ECM: %ss" % (data['caid'], data['hops'], data['ecm_time']) else: if data['address_from'] == "/dev/sci0": return "CAID: %s - Card in Slot #1 - HOPS: %s - ECM: %ss" % (data['caid'], data['hops'], data['ecm_time']) elif data['address_from'] == "/dev/sci1": return "CAID: %s - Card in Slot #2 - HOPS: %s - ECM: %ss" % (data['caid'], data['hops'], data['ecm_time']) elif data['source']: if data['source'] == "emu": return "EMU %s" % (data['caid']) else: return "CAID: %s - %s %s" % (data['caid'], data['source'], data['ecm_time']) elif self.type == "EcmInfo": if is_crypted != 1: return '' data = self.GetEcmInfo2() return "Provider: %s" % (data['provider']) elif self.type == "EcmInfo2": if is_crypted != 1: return '' data = self.GetEcmInfo2() if data['using'] == "newcamd" or data['using'] == "NewCamd": return "Provider: %s" % (data['provider']) elif data['using'] == "CCcam" or data['using'] == "CCcam-s2s": return "Provider: %s" % (data['provider']) elif data['using'] == "gbox" or data['address'] == "127.0.0.1:*": return "Provider: %s" % (data['provider']) elif data['decode'] == "Network" or data['decode'] == "Local": ecm_info = self.GetEcmInfo2() return "CAID: %s BoxId: %s" % (caid, data['provider']) else: return "CAID: %s Provider: %s" % (data['caid'], data['provider']) elif self.type == "E-C-N": if is_crypted != 1: return '' CamName = self.get_caName() if self.type == "CryptoNameCaid" or CamName == 'Common Interface': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNameCaid(info) else: return "" elif self.type == "CryptoSpecial" or CamName == 'Common Interface': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSpecial(info) else: return "" data = self.GetEcmInfo2() if data['reader'] or data['using'] or data['protocol'] or data['from'] or data['hops'] or data['decode'] or data['address']: if data['using'] == "fta": return "Fta" elif data['using'] == "emu" or data['from'] == "constcw": return "Emulator" elif data['hops'] == "0" and data['protocol'] == "none" or data['from'] == "cache*": return "Cache" elif data['using'] == "gbox" or data['address'] == "127.0.0.1:*": return "Sharing" elif data['hops'] == "0" and data['using'] == "sci" or data['hops'] == "0" and data['using'] == "smartreader+": return "Card" elif data['hops'] == "0" and data['protocol'] == "cccam" or data['hops'] == "0" and data['protocol'] == "newcamd": return "Card" elif data['hops'] == "0" and data['using'] == "newcamd" or data['hops'] == "0" and data['using'] == "NewCamd": return "Card" elif data['hops'] == "0" and data['using'] == "CCcam" or data['hops'] == "0" and data['using'] == "CCcam-s2s": return "Card" elif data['decode'] == "Local": return "Card" else: return "Network" elif data['reader'] or data['using'] or data['protocol'] or data['from'] or data['hops']: pos = data['address_from'].find('.') or data['from'].find('.') if pos > 1: return "Network" else: return "Card" return "" if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll(config.usage.infobar_frontend_source.value == "settings") if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw if not feraw: feraw = info.getInfoObject(iServiceInformation.sTransponderData) if not feraw: return "" fedata = ConvertToHumanReadable(feraw) else: fedata = self.fedata if self.type == "All": self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata,feraw) + addspace(self.createTransponderName(feraw)) + "\n"\ + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + "\n"\ + addspace(self.createPIDInfo(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata,feraw) + addspace(self.createTransponderName(feraw)) + "\n" \ + addspace(self.createCryptoBar(info)) + self.current_source + "\n" \ + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "ServiceInfo": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) \ + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) + addspace(self.createTransponderName(feraw))\ + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "TransponderInfo2line": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createTransponderName(feraw)) + '\n'\ + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata))\ + addspace(self.createSymbolRate(fedata, feraw)) + self.createModulation(fedata) + '-' + addspace(self.createFEC(fedata, feraw)) if self.type == "PIDInfo": return self.createPIDInfo(info) if self.type == "ServiceRef": return self.createServiceRef(info) if not feraw: return "" if self.type == "TransponderInfo": return self.createTransponderInfo(fedata,feraw) if self.type == "TransponderFrequency": return self.createFrequency(feraw) if self.type == "TransponderSymbolRate": return self.createSymbolRate(fedata, feraw) if self.type == "TransponderPolarization": return self.createPolarization(fedata) if self.type == "TransponderFEC": return self.createFEC(fedata, feraw) if self.type == "TransponderModulation": return self.createModulation(fedata) if self.type == "OrbitalPosition": return self.createOrbPos(feraw) if self.type == "TunerType": return self.createTunerType(feraw) if self.type == "TunerSystem": return self.createTunerSystem(fedata) if self.type == "OrbitalPositionOrTunerSystem": return self.createOrbPosOrTunerSystem(fedata,feraw) if self.type == "TerrestrialChannelNumber": return self.createChannelNumber(fedata, feraw) return "" text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False if self.type == "CryptoCaidSecaAvailable": request_caid = "S" request_selected = False elif self.type == "CryptoCaidViaAvailable": request_caid = "V" request_selected = False elif self.type == "CryptoCaidIrdetoAvailable": request_caid = "I" request_selected = False elif self.type == "CryptoCaidNDSAvailable": request_caid = "ND" request_selected = False elif self.type == "CryptoCaidConaxAvailable": request_caid = "CO" request_selected = False elif self.type == "CryptoCaidCryptoWAvailable": request_caid = "CW" request_selected = False elif self.type == "CryptoCaidPowerVUAvailable": request_caid = "P" request_selected = False elif self.type == "CryptoCaidBetaAvailable": request_caid = "B" request_selected = False elif self.type == "CryptoCaidNagraAvailable": request_caid = "N" request_selected = False elif self.type == "CryptoCaidBissAvailable": request_caid = "BI" request_selected = False elif self.type == "CryptoCaidDreAvailable": request_caid = "D" request_selected = False elif self.type == "CryptoCaidBulCrypt1Available": request_caid = "B1" request_selected = False elif self.type == "CryptoCaidBulCrypt2Available": request_caid = "B2" request_selected = False elif self.type == "CryptoCaidTandbergAvailable": request_caid = "TB" request_selected = False elif self.type == "CryptoCaidSecaSelected": request_caid = "S" request_selected = True elif self.type == "CryptoCaidViaSelected": request_caid = "V" request_selected = True elif self.type == "CryptoCaidIrdetoSelected": request_caid = "I" request_selected = True elif self.type == "CryptoCaidNDSSelected": request_caid = "ND" request_selected = True elif self.type == "CryptoCaidConaxSelected": request_caid = "CO" request_selected = True elif self.type == "CryptoCaidCryptoWSelected": request_caid = "CW" request_selected = True elif self.type == "CryptoCaidPowerVUSelected": request_caid = "P" request_selected = True elif self.type == "CryptoCaidBetaSelected": request_caid = "B" request_selected = True elif self.type == "CryptoCaidNagraSelected": request_caid = "N" request_selected = True elif self.type == "CryptoCaidBissSelected": request_caid = "BI" request_selected = True elif self.type == "CryptoCaidDreSelected": request_caid = "D" request_selected = True elif self.type == "CryptoCaidBulCrypt1Selected": request_caid = "B1" request_selected = True elif self.type == "CryptoCaidBulCrypt2Selected": request_caid = "B2" request_selected = True elif self.type == "CryptoCaidTandbergSelected": request_caid = "TB" request_selected = True else: return False request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() data = self.GetEcmInfo2() if data is None: return False current_caid = data['caid'] or data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if caid_entry[3] == request_caid: if request_selected: if int(caid_entry[0], 16) <= int(current_caid, 16) <= int(caid_entry[1], 16): return True else: # request available try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int(caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True elif what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what) else: self.what = what Converter.changed(self, what) def doSwitch(self): self.DynamicTimer.stop() Converter.changed(self, self.what)
class pliExpertInfo(Poll, Converter, object): SMART_LABEL = 0 SMART_INFO_H = 1 SMART_INFO_V = 2 SERVICE_INFO = 3 CRYPTO_INFO = 4 FREQUENCY_INFO = 5 def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = { "ShowMe": self.SMART_LABEL, "ExpertInfo": self.SMART_INFO_H, "ExpertInfoVertical": self.SMART_INFO_V, "ServiceInfo": self.SERVICE_INFO, "CryptoInfo": self.CRYPTO_INFO, "FrequencyInfo": self.FREQUENCY_INFO }[type] self.poll_interval = 1000 self.poll_enabled = True self.idnames = ( ( "0x100", "0x1FF","Seca" ,"S" ), ( "0x500", "0x5FF","Via" ,"V" ), ( "0x600", "0x6FF","Irdeto" ,"I" ), ( "0x900", "0x9FF","NDS" ,"Nd"), ( "0xB00", "0xBFF","Conax" ,"Co"), ( "0xD00", "0xDFF","CryptoW","Cw"), ("0x1700","0x17FF","Beta" ,"B" ), ("0x1800","0x18FF","Nagra" ,"N" )) self.ecmdata = GetEcmInfo() @cached def getText(self): service = self.source.service try: info = service and service.info() except: try: info = eServiceCenter.getInstance().info(service) except: pass if not info: return "" Ret_Text = "" Sec_Text = "" Res_Text = "" showCryptoInfo = False if (self.type == self.SMART_INFO_H or self.type == self.SERVICE_INFO or self.type == self.CRYPTO_INFO or self.type == self.FREQUENCY_INFO): # HORIZONTAL sep = " " sep2 = " - " elif (self.type == self.SMART_INFO_V): # VERTIKAL sep = "\n" sep2 = "\n" else: return "" # unsupported orientation if (self.type == self.FREQUENCY_INFO): try: feinfo = (service and service.frontendInfo()) prvd = info.getInfoString(iServiceInformation.sProvider) Ret_Text = self.short(prvd) frontendDataOrg = (feinfo and feinfo.getAll(True)) except: try: frontendDataOrg = info.getInfoObject(service, iServiceInformation.sTransponderData) prvd = info.getInfoString(service, iServiceInformation.sProvider) except: pass if (frontendDataOrg is not None): frontendData = ConvertToHumanReadable(frontendDataOrg) if ((frontendDataOrg.get("tuner_type") == "DVB-S") or (frontendDataOrg.get("tuner_type") == "DVB-C")): frequency = (str((frontendData.get("frequency") / 1000)) + " MHz") symbolrate = (str((frontendData.get("symbol_rate") / 1000))) fec_inner = frontendData.get("fec_inner") if (frontendDataOrg.get("tuner_type") == "DVB-S"): Ret_Text += sep + frontendData.get("system") orbital_pos = int(frontendDataOrg["orbital_position"]) if orbital_pos > 1800: if orbital_pos == 3590: orb_pos = 'Thor/Intelsat' elif orbital_pos == 3560: orb_pos = 'Amos (4' elif orbital_pos == 3550: orb_pos = 'Atlantic Bird' elif orbital_pos == 3530: orb_pos = 'Nilesat/Atlantic Bird' elif orbital_pos == 3520: orb_pos = 'Atlantic Bird' elif orbital_pos == 3475: orb_pos = 'Atlantic Bird' elif orbital_pos == 3460: orb_pos = 'Express' elif orbital_pos == 3450: orb_pos = 'Telstar' elif orbital_pos == 3420: orb_pos = 'Intelsat' elif orbital_pos == 3380: orb_pos = 'Nss' elif orbital_pos == 3355: orb_pos = 'Intelsat' elif orbital_pos == 3325: orb_pos = 'Intelsat' elif orbital_pos == 3300: orb_pos = 'Hispasat' elif orbital_pos == 3285: orb_pos = 'Intelsat' elif orbital_pos == 3170: orb_pos = 'Intelsat' elif orbital_pos == 3150: orb_pos = 'Intelsat' elif orbital_pos == 3070: orb_pos = 'Intelsat' elif orbital_pos == 3045: orb_pos = 'Intelsat' elif orbital_pos == 3020: orb_pos = 'Intelsat 9' elif orbital_pos == 2990: orb_pos = 'Amazonas' elif orbital_pos == 2900: orb_pos = 'Star One' elif orbital_pos == 2880: orb_pos = 'AMC 6 (72' elif orbital_pos == 2875: orb_pos = 'Echostar 6' elif orbital_pos == 2860: orb_pos = 'Horizons' elif orbital_pos == 2810: orb_pos = 'AMC5' elif orbital_pos == 2780: orb_pos = 'NIMIQ 4' elif orbital_pos == 2690: orb_pos = 'NIMIQ 1' elif orbital_pos == 3592: orb_pos = 'Thor/Intelsat' elif orbital_pos == 2985: orb_pos = 'Echostar 3,12' elif orbital_pos == 2830: orb_pos = 'Echostar 8' elif orbital_pos == 2630: orb_pos = 'Galaxy 19' elif orbital_pos == 2500: orb_pos = 'Echostar 10,11' elif orbital_pos == 2502: orb_pos = 'DirectTV 5' elif orbital_pos == 2410: orb_pos = 'Echostar 7 Anik F3' elif orbital_pos == 2391: orb_pos = 'Galaxy 23' elif orbital_pos == 2390: orb_pos = 'Echostar 9' elif orbital_pos == 2412: orb_pos = 'DirectTV 7S' elif orbital_pos == 2310: orb_pos = 'Galaxy 27' elif orbital_pos == 2311: orb_pos = 'Ciel 2' elif orbital_pos == 2120: orb_pos = 'Echostar 2' else: orb_pos = str((float(3600 - orbital_pos))/10.0) + "W" elif orbital_pos > 0: if orbital_pos == 192: orb_pos = 'Astra 1F' elif orbital_pos == 130: orb_pos = 'Hot Bird 6,7A,8' elif orbital_pos == 235: orb_pos = 'Astra 1E' elif orbital_pos == 1100: orb_pos = 'BSat 1A,2A' elif orbital_pos == 1101: orb_pos = 'N-Sat 110' elif orbital_pos == 1131: orb_pos = 'KoreaSat 5' elif orbital_pos == 1440: orb_pos = 'SuperBird 7,C2' elif orbital_pos == 1006: orb_pos = 'AsiaSat 2' elif orbital_pos == 1030: orb_pos = 'Express A2' elif orbital_pos == 1056: orb_pos = 'Asiasat 3S' elif orbital_pos == 1082: orb_pos = 'NSS 11' elif orbital_pos == 881: orb_pos = 'ST1' elif orbital_pos == 900: orb_pos = 'Yamal 201' elif orbital_pos == 917: orb_pos = 'Mesat' elif orbital_pos == 950: orb_pos = 'Insat 4B' elif orbital_pos == 951: orb_pos = 'NSS 6' elif orbital_pos == 765: orb_pos = 'Telestar' elif orbital_pos == 785: orb_pos = 'ThaiCom 5' elif orbital_pos == 800: orb_pos = 'Express' elif orbital_pos == 830: orb_pos = 'Insat 4A' elif orbital_pos == 850: orb_pos = 'Intelsat 709' elif orbital_pos == 750: orb_pos = 'Abs' elif orbital_pos == 720: orb_pos = 'Intelsat' elif orbital_pos == 705: orb_pos = 'Eutelsat W5' elif orbital_pos == 685: orb_pos = 'Intelsat' elif orbital_pos == 620: orb_pos = 'Intelsat 902' elif orbital_pos == 600: orb_pos = 'Intelsat 904' elif orbital_pos == 570: orb_pos = 'Nss' elif orbital_pos == 530: orb_pos = 'Express AM22' elif orbital_pos == 480: orb_pos = 'Eutelsat 2F2' elif orbital_pos == 450: orb_pos = 'Intelsat' elif orbital_pos == 420: orb_pos = 'Turksat 2A' elif orbital_pos == 400: orb_pos = 'Express AM1' elif orbital_pos == 390: orb_pos = 'Hellas Sat 2' elif orbital_pos == 380: orb_pos = 'Paksat 1' elif orbital_pos == 360: orb_pos = 'Eutelsat Sesat' elif orbital_pos == 335: orb_pos = 'Astra 1M' elif orbital_pos == 330: orb_pos = 'Eurobird 3' elif orbital_pos == 328: orb_pos = 'Galaxy 11' elif orbital_pos == 315: orb_pos = 'Astra 5A' elif orbital_pos == 310: orb_pos = 'Turksat' elif orbital_pos == 305: orb_pos = 'Arabsat' elif orbital_pos == 285: orb_pos = 'Eurobird 1' elif orbital_pos == 284: orb_pos = 'Eurobird/Astra' elif orbital_pos == 282: orb_pos = 'Eurobird/Astra' elif orbital_pos == 1220: orb_pos = 'AsiaSat' elif orbital_pos == 1380: orb_pos = 'Telstar 18' elif orbital_pos == 260: orb_pos = 'Badr 3/4' elif orbital_pos == 255: orb_pos = 'Eurobird 2' elif orbital_pos == 215: orb_pos = 'Eutelsat' elif orbital_pos == 216: orb_pos = 'Eutelsat W6' elif orbital_pos == 210: orb_pos = 'AfriStar 1' elif orbital_pos == 160: orb_pos = 'Eutelsat W2' elif orbital_pos == 100: orb_pos = 'Eutelsat W1' elif orbital_pos == 90: orb_pos = 'Eurobird 9' elif orbital_pos == 70: orb_pos = 'Eutelsat W3A' elif orbital_pos == 50: orb_pos = 'Sirius 4' elif orbital_pos == 48: orb_pos = 'Sirius 4' elif orbital_pos == 30: orb_pos = 'Telecom 2' else: orb_pos = str((float(orbital_pos))/10.0) + "E" Ret_Text += sep + orb_pos + "\n" Ret_Text += frequency + sep + frontendData.get("polarization_abbreviation") Ret_Text += sep + symbolrate Ret_Text += sep + frontendData.get("modulation") + "-" + fec_inner else: Ret_Text += sep + "DVB-C " + frequency + " MHz" + sep + fec_inner + sep + symbolrate elif (frontendData.get("tuner_type") == "DVB-T"): frequency = (str((frontendData.get("frequency") / 1000)) + " MHz") Ret_Text = "Frequency: " + frequency if (self.type == self.SMART_INFO_H or self.type == self.SMART_INFO_V or self.type == self.SERVICE_INFO): xresol = info.getInfo(iServiceInformation.sVideoWidth) yresol = info.getInfo(iServiceInformation.sVideoHeight) feinfo = (service and service.frontendInfo()) prvd = info.getInfoString(iServiceInformation.sProvider) Ret_Text = self.short(prvd) frontendDataOrg = (feinfo and feinfo.getAll(True)) if (frontendDataOrg is not None): frontendData = ConvertToHumanReadable(frontendDataOrg) if ((frontendDataOrg.get("tuner_type") == "DVB-S") or (frontendDataOrg.get("tuner_type") == "DVB-C")): frequency = (str((frontendData.get("frequency") / 1000))) symbolrate = (str((frontendData.get("symbol_rate") / 1000))) fec_inner = frontendData.get("fec_inner") if (frontendDataOrg.get("tuner_type") == "DVB-S"): Ret_Text += sep + frontendData.get("system") Ret_Text += sep + frequency + frontendData.get("polarization_abbreviation") Ret_Text += sep + symbolrate Ret_Text += sep + fec_inner + " " + frontendData.get("modulation") orbital_pos = int(frontendDataOrg["orbital_position"]) if orbital_pos > 1800: orb_pos = str((float(3600 - orbital_pos)) / 10.0) + "W" elif orbital_pos > 0: orb_pos = str((float(orbital_pos)) / 10.0) + "E" Ret_Text += sep + orb_pos else: Ret_Text += sep + "DVB-C " + frequency + " MHz" + sep + fec_inner + sep + symbolrate elif (frontendDataOrg.get("tuner_type") == "DVB-T"): frequency = (str((frontendData.get("frequency") / 1000))) Ret_Text += sep + "DVB-T" + sep + "Frequency:" + sep + frequency + " MHz" if (feinfo is not None) and (xresol > 0): Res_Text += ("MPEG2 ", "MPEG4 ", "MPEG1 ", "MPEG4-II ", "VC1 ", "VC1-SM ", "")[info.getInfo(iServiceInformation.sVideoType)] Res_Text += str(xresol) + "x" + str(yresol) Res_Text += ("i", "p", "")[info.getInfo(iServiceInformation.sProgressive)] Res_Text += str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) if (self.type == self.SMART_INFO_H or self.type == self.SMART_INFO_V or self.type == self.CRYPTO_INFO): decCI = "0" Sec_Text = "" if (info.getInfo(iServiceInformation.sIsCrypted) == 1): data = self.ecmdata.getEcmData() if not config.usage.show_cryptoinfo.getValue(): showCryptoInfo = True Sec_Text = data[0] + "\n" decCI = data[1] provid = data[2] pid = data[3] if decCI != '0': decCIfull = "%04x" % int(decCI, 16) for idline in self.idnames: if int(decCI, 16) >= int(idline[0], 16) and int(decCI, 16) <= int(idline[1], 16): decCIfull = idline[2] + ":" + decCIfull break Sec_Text += decCIfull if provid != '0': Sec_Text += ":%04x" % int(provid, 16) else: Sec_Text += ":" if pid != '0': Sec_Text += ":%04x:%04x" % (info.getInfo(iServiceInformation.sSID),int(pid, 16)) elif not config.usage.show_cryptoinfo.getValue(): showCryptoInfo = True Sec_Text = "FTA" res = "" searchIDs = (info.getInfoObject(iServiceInformation.sCAIDs)) for idline in self.idnames: if int(decCI, 16) >= int(idline[0], 16) and int(decCI, 16) <= int(idline[1], 16): color="\c0000??00" else: color = "\c007?7?7?" try: for oneID in searchIDs: if oneID >= int(idline[0], 16) and oneID <= int(idline[1], 16): color="\c00????00" except: pass res += color + idline[3] + " " if (self.type != self.CRYPTO_INFO): Ret_Text += "\n" Ret_Text += res + "\c00?????? " + Sec_Text if Res_Text != "": if showCryptoInfo: Ret_Text += sep + Res_Text else: Ret_Text += "\n" + Res_Text return Ret_Text text = property(getText) def changed(self, what): Converter.changed(self, what) def short(self, langTxt): if (self.type == self.SMART_INFO_V and len(langTxt)>23): retT = langTxt[:20] + "..." return retT else: return langTxt
class pliExpertInfo(Poll, Converter, object): SMART_LABEL = 0 SMART_INFO_H = 1 SMART_INFO_V = 2 SERVICE_INFO = 3 CRYPTO_INFO = 4 def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = { "ShowMe": self.SMART_LABEL, "ExpertInfo": self.SMART_INFO_H, "ExpertInfoVertical": self.SMART_INFO_V, "ServiceInfo": self.SERVICE_INFO, "CryptoInfo": self.CRYPTO_INFO }[type] self.poll_interval = 1000 self.poll_enabled = True self.idnames = ( ( "0x100", "0x1FF","Seca" ,"S" ), ( "0x500", "0x5FF","Via" ,"V" ), ( "0x600", "0x6FF","Irdeto" ,"I" ), ( "0x900", "0x9FF","NDS" ,"Nd"), ( "0xB00", "0xBFF","Conax" ,"Co"), ( "0xD00", "0xDFF","CryptoW","Cw"), ("0x1700","0x17FF","Beta" ,"B" ), ("0x1800","0x18FF","Nagra" ,"N" )) self.ecmdata = GetEcmInfo() @cached def getText(self): service = self.source.service info = service and service.info() if not info: return "" Ret_Text = "" Sec_Text = "" Res_Text = "" showCryptoInfo = False if (self.type == self.SMART_INFO_H or self.type == self.SERVICE_INFO or self.type == self.CRYPTO_INFO): # HORIZONTAL sep = " " sep2 = " - " elif (self.type == self.SMART_INFO_V): # VERTIKAL sep = "\n" sep2 = "\n" else: return "" # unsupported orientation if (self.type == self.SMART_INFO_H or self.type == self.SMART_INFO_V or self.type == self.SERVICE_INFO): xresol = info.getInfo(iServiceInformation.sVideoWidth) yresol = info.getInfo(iServiceInformation.sVideoHeight) feinfo = (service and service.frontendInfo()) prvd = info.getInfoString(iServiceInformation.sProvider) Ret_Text = self.short(prvd) frontendDataOrg = (feinfo and feinfo.getAll(False)) if (frontendDataOrg is not None): frontendData = ConvertToHumanReadable(frontendDataOrg) if ((frontendDataOrg.get("tuner_type") == "DVB-S") or (frontendDataOrg.get("tuner_type") == "DVB-C")): frequency = (str((frontendData.get("frequency") / 1000))) symbolrate = (str((frontendData.get("symbol_rate") / 1000))) fec_inner = frontendData.get("fec_inner") if (frontendDataOrg.get("tuner_type") == "DVB-S"): Ret_Text += sep + frontendData.get("system") Ret_Text += sep + frequency + frontendData.get("polarization_abbreviation") Ret_Text += sep + symbolrate Ret_Text += sep + fec_inner + " " + frontendData.get("modulation") orbital_pos = int(frontendDataOrg["orbital_position"]) if orbital_pos > 1800: orb_pos = str((float(3600 - orbital_pos)) / 10.0) + "W" elif orbital_pos > 0: orb_pos = str((float(orbital_pos)) / 10.0) + "E" Ret_Text += sep + orb_pos else: Ret_Text += sep + "DVB-C " + frequency + " MHz" + sep + fec_inner + sep + symbolrate elif (frontendDataOrg.get("tuner_type") == "DVB-T"): frequency = (str((frontendData.get("frequency") / 1000))) Ret_Text += sep + "DVB-T" + sep + "Frequency:" + sep + frequency + " MHz" if (feinfo is not None) and (xresol > 0): Res_Text += ("MPEG2 ", "MPEG4 ", "MPEG1 ", "MPEG4-II ", "VC1 ", "VC1-SM ", "")[info.getInfo(iServiceInformation.sVideoType)] Res_Text += str(xresol) + "x" + str(yresol) Res_Text += ("i", "p", "")[info.getInfo(iServiceInformation.sProgressive)] Res_Text += str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) if (self.type == self.SMART_INFO_H or self.type == self.SMART_INFO_V or self.type == self.CRYPTO_INFO): decCI = "0" Sec_Text = "" if (info.getInfo(iServiceInformation.sIsCrypted) == 1): data = self.ecmdata.getEcmData() if not config.usage.show_cryptoinfo.value: showCryptoInfo = True Sec_Text = data[0] + "\n" decCI = data[1] provid = data[2] pid = data[3] if decCI != '0': decCIfull = "%04x" % int(decCI, 16) for idline in self.idnames: if int(decCI, 16) >= int(idline[0], 16) and int(decCI, 16) <= int(idline[1], 16): decCIfull = idline[2] + ":" + decCIfull break Sec_Text += decCIfull if provid != '0': Sec_Text += ":%04x" % int(provid, 16) else: Sec_Text += ":" if pid != '0': Sec_Text += ":%04x:%04x" % (info.getInfo(iServiceInformation.sSID),int(pid, 16)) elif not config.usage.show_cryptoinfo.value: showCryptoInfo = True Sec_Text = "FTA" res = "" try: searchIDs = (info.getInfoObject(iServiceInformation.sCAIDs)) except: searchIDs = 0 pass for idline in self.idnames: if int(decCI, 16) >= int(idline[0], 16) and int(decCI, 16) <= int(idline[1], 16): color="\c0000??00" else: color = "\c007?7?7?" try: for oneID in searchIDs: if oneID >= int(idline[0], 16) and oneID <= int(idline[1], 16): color="\c00????00" except: pass res += color + idline[3] + " " if (self.type != self.CRYPTO_INFO): Ret_Text += "\n" Ret_Text += res + "\c00?????? " + Sec_Text if Res_Text != "": if showCryptoInfo: Ret_Text += sep + Res_Text else: Ret_Text += "\n" + Res_Text return Ret_Text text = property(getText) def changed(self, what): Converter.changed(self, what) def short(self, langTxt): if (self.type == self.SMART_INFO_V and len(langTxt)>23): retT = langTxt[:20] + "..." return retT else: return langTxt
class PliExtraInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.ca_table = ( ("CryptoCaidSecaAvailable", "S", False), ("CryptoCaidViaAvailable", "V", False), ("CryptoCaidIrdetoAvailable", "I", False), ("CryptoCaidNDSAvailable", "Nd", False), ("CryptoCaidConaxAvailable", "Co", False), ("CryptoCaidCryptoWAvailable", "Cw", False), ("CryptoCaidPowerVUAvailable", "P", False), ("CryptoCaidBetaAvailable", "B", False), ("CryptoCaidNagraAvailable", "N", False), ("CryptoCaidBissAvailable", "Bi", False), ("CryptoCaidDreAvailable", "D", False), ("CryptoCaidBulCrypt1Available","B1", False), ("CryptoCaidBulCrypt2Available","B2", False), ("CryptoCaidTandbergAvailable", "TB", False), ("CryptoCaidSecaSelected", "S", True), ("CryptoCaidViaSelected", "V", True), ("CryptoCaidIrdetoSelected", "I", True), ("CryptoCaidNDSSelected", "Nd", True), ("CryptoCaidConaxSelected", "Co", True), ("CryptoCaidCryptoWSelected", "Cw", True), ("CryptoCaidPowerVUSelected", "P", True), ("CryptoCaidBetaSelected", "B", True), ("CryptoCaidNagraSelected", "N", True), ("CryptoCaidBissSelected", "Bi", True), ("CryptoCaidDreSelected", "D", True), ("CryptoCaidBulCrypt1Selected", "B1", True), ("CryptoCaidBulCrypt2Selected", "B2", True), ("CryptoCaidTandbergSelected", "TB", True), ) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = "" self.current_caid = "0" self.current_provid = "0" self.current_ecmpid = "0" def createCryptoBar(self, info): res = "" available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): color="\c0000??00" else: color = "\c007?7?7?" try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int(caid_entry[1], 16): color="\c00????00" except: pass if color != "\c007?7?7?" or caid_entry[4]: if res: res += " " res += color + caid_entry[3] res += "\c00??????" return res def createCryptoSpecial(self, info): caid_name = "FTA" try: for caid_entry in caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ":%04x:%04x:%04x:%04x" % (int(self.current_caid,16), int(self.current_provid,16), info.getInfo(iServiceInformation.sSID), int(self.current_ecmpid,16)) except: pass return "" def createResolution(self, info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return "" yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ("i", "p", " ")[info.getInfo(iServiceInformation.sProgressive)] fps = str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) gamma = ("SDR", "HDR", "HDR10", "HLG", "")[info.getInfo(iServiceInformation.sGamma)] return str(xres) + "x" + str(yres) + mode + fps + addspace(gamma) def createVideoCodec(self, info): return codec_data.get(info.getInfo(iServiceInformation.sVideoType), "N/A") def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) tsid = info.getInfo(iServiceInformation.sTSID) onid = info.getInfo(iServiceInformation.sONID) if vpid < 0 : vpid = 0 if apid < 0 : apid = 0 if pcrpid < 0 : pcrpid = 0 if sidpid < 0 : sidpid = 0 if tsid < 0 : tsid = 0 if onid < 0 : onid = 0 return "%d-%d:%05d:%04d:%04d:%04d" % (onid, tsid, sidpid, vpid, apid, pcrpid) def createTransponderInfo(self, fedata, feraw, info): if not feraw: refstr = info.getInfoString(iServiceInformation.sServiceref) if "%3a//" in refstr.lower(): return refstr.split(":")[10].replace("%3a", ":").replace("%3A", ":") return "" elif "DVB-T" in feraw.get("tuner_type"): tmp = addspace(self.createChannelNumber(fedata, feraw)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) else: tmp = addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) return addspace(self.createTunerSystem(fedata)) + tmp + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) \ + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) + addspace(self.createMisPls(fedata)) def createFrequency(self, feraw): frequency = feraw.get("frequency") if frequency: if "DVB-T" in feraw.get("tuner_type"): return str(int(frequency / 1000000. + 0.5)) else: return str(int(frequency / 1000 + 0.5)) return "" def createChannelNumber(self, fedata, feraw): return "DVB-T" in feraw.get("tuner_type") and fedata.get("channel") or "" def createSymbolRate(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): bandwidth = fedata.get("bandwidth") if bandwidth: return bandwidth else: symbolrate = fedata.get("symbol_rate") if symbolrate: return str(symbolrate / 1000) return "" def createPolarization(self, fedata): return fedata.get("polarization_abbreviation") or "" def createFEC(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): code_rate_lp = fedata.get("code_rate_lp") code_rate_hp = fedata.get("code_rate_hp") guard_interval = fedata.get('guard_interval') if code_rate_lp and code_rate_hp and guard_interval: return code_rate_lp + "-" + code_rate_hp + "-" + guard_interval else: fec = fedata.get("fec_inner") if fec: return fec return "" def createModulation(self, fedata): if fedata.get("tuner_type") == _("Terrestrial"): constellation = fedata.get("constellation") if constellation: return constellation else: modulation = fedata.get("modulation") if modulation: return modulation return "" def createTunerType(self, feraw): return feraw.get("tuner_type") or "" def createTunerSystem(self, fedata): return fedata.get("system") or "" def createOrbPos(self, feraw): orbpos = feraw.get("orbital_position") if orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "\xc2\xb0 W" elif orbpos > 0: return str((float(orbpos)) / 10.0) + "\xc2\xb0 E" return "" def createOrbPosOrTunerSystem(self, fedata,feraw): orbpos = self.createOrbPos(feraw) if orbpos is not "": return orbpos return self.createTunerSystem(fedata) def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) def createMisPls(self, fedata): tmp = "" if fedata.get("is_id") > -1: tmp = "MIS %d" % fedata.get("is_id") if fedata.get("pls_code") > 0: tmp = addspace(tmp) + "%s %d" % (fedata.get("pls_mode"), fedata.get("pls_code")) return tmp @cached def getText(self): service = self.source.service if service is None: return "" info = service and service.info() if not info: return "" if self.type == "CryptoInfo": self.getCryptoInfo(info) if config.usage.show_cryptoinfo.value: return addspace(self.createCryptoBar(info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace(self.current_source) + self.createCryptoSpecial(info) if self.type == "CryptoBar": self.getCryptoInfo(info) return self.createCryptoBar(info) if self.type == "CryptoSpecial": self.getCryptoInfo(info) return self.createCryptoSpecial(info) if self.type == "ResolutionString": return self.createResolution(info) if self.type == "VideoCodec": return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll(config.usage.infobar_frontend_source.value == "settings") if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw if not feraw: feraw = info.getInfoObject(iServiceInformation.sTransponderData) fedata = ConvertToHumanReadable(feraw) else: fedata = self.fedata if self.type == "All": self.getCryptoInfo(info) if config.usage.show_cryptoinfo.value: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw, info) + "\n" \ + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + "\n" \ + addspace(self.createPIDInfo(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw, info) + "\n" \ + addspace(self.createCryptoBar(info)) + self.current_source + "\n" \ + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "PIDInfo": return self.createPIDInfo(info) if not feraw: return "" if self.type == "ServiceInfo": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) \ + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) \ + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "TransponderInfo": return self.createTransponderInfo(fedata, feraw, info) if self.type == "TransponderFrequency": return self.createFrequency(feraw) if self.type == "TransponderSymbolRate": return self.createSymbolRate(fedata, feraw) if self.type == "TransponderPolarization": return self.createPolarization(fedata) if self.type == "TransponderFEC": return self.createFEC(fedata, feraw) if self.type == "TransponderModulation": return self.createModulation(fedata) if self.type == "OrbitalPosition": return self.createOrbPos(feraw) if self.type == "TunerType": return self.createTunerType(feraw) if self.type == "TunerSystem": return self.createTunerSystem(fedata) if self.type == "OrbitalPositionOrTunerSystem": return self.createOrbPosOrTunerSystem(fedata,feraw) if self.type == "TerrestrialChannelNumber": return self.createChannelNumber(fedata, feraw) return _("invalid type") text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in caid_data: if caid_entry[3] == request_caid: if request_selected: if int(caid_entry[0], 16) <= int(current_caid, 16) <= int(caid_entry[1], 16): return True else: # request available try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int(caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what)
class pliExpertInfo(Poll, Converter, object): SMART_LABEL = 0 SMART_INFO_H = 1 SMART_INFO_V = 2 SERVICE_INFO = 3 CRYPTO_INFO = 4 FREQUENCY_INFO = 5 def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = { "ShowMe": self.SMART_LABEL, "ExpertInfo": self.SMART_INFO_H, "ExpertInfoVertical": self.SMART_INFO_V, "ServiceInfo": self.SERVICE_INFO, "CryptoInfo": self.CRYPTO_INFO, "FrequencyInfo": self.FREQUENCY_INFO }[type] self.poll_interval = 1000 self.poll_enabled = True self.idnames = (("0x100", "0x1FF", "Seca", "S"), ("0x500", "0x5FF", "Via", "V"), ("0x600", "0x6FF", "Irdeto", "I"), ("0x900", "0x9FF", "NDS", "Nd"), ("0xB00", "0xBFF", "Conax", "Co"), ("0xD00", "0xDFF", "CryptoW", "Cw"), ("0x1700", "0x17FF", "Beta", "B"), ("0x1800", "0x18FF", "Nagra", "N"), ("0x2600", "0x26FF", "BISS", "Bi")) self.ecmdata = GetEcmInfo() @cached def getText(self): service = self.source.service try: info = service and service.info() except: try: info = eServiceCenter.getInstance().info(service) except: pass if not info: return "" Ret_Text = "" Sec_Text = "" Res_Text = "" showCryptoInfo = False if (self.type == self.SMART_INFO_H or self.type == self.SERVICE_INFO or self.type == self.CRYPTO_INFO or self.type == self.FREQUENCY_INFO): # HORIZONTAL sep = " " sep2 = " - " elif (self.type == self.SMART_INFO_V): # VERTIKAL sep = "\n" sep2 = "\n" else: return "" # unsupported orientation if (self.type == self.FREQUENCY_INFO): try: feinfo = (service and service.frontendInfo()) prvd = info.getInfoString(iServiceInformation.sProvider) Ret_Text = self.short(prvd) frontendDataOrg = (feinfo and feinfo.getAll(True)) except: try: frontendDataOrg = info.getInfoObject( service, iServiceInformation.sTransponderData) prvd = info.getInfoString(service, iServiceInformation.sProvider) except: pass if (frontendDataOrg is not None): frontendData = ConvertToHumanReadable(frontendDataOrg) if ((frontendDataOrg.get("tuner_type") == "DVB-S") or (frontendDataOrg.get("tuner_type") == "DVB-C")): frequency = (str( (frontendData.get("frequency") / 1000)) + " MHz") symbolrate = (str( (frontendData.get("symbol_rate") / 1000))) fec_inner = frontendData.get("fec_inner") if (frontendDataOrg.get("tuner_type") == "DVB-S"): Ret_Text += sep + frontendData.get("system") orbital_pos = int(frontendDataOrg["orbital_position"]) if orbital_pos > 1800: if orbital_pos == 3590: orb_pos = 'Thor/Intelsat' elif orbital_pos == 3560: orb_pos = 'Amos (4' elif orbital_pos == 3550: orb_pos = 'Atlantic Bird' elif orbital_pos == 3530: orb_pos = 'Nilesat/Atlantic Bird' elif orbital_pos == 3520: orb_pos = 'Atlantic Bird' elif orbital_pos == 3475: orb_pos = 'Atlantic Bird' elif orbital_pos == 3460: orb_pos = 'Express' elif orbital_pos == 3450: orb_pos = 'Telstar' elif orbital_pos == 3420: orb_pos = 'Intelsat' elif orbital_pos == 3380: orb_pos = 'Nss' elif orbital_pos == 3355: orb_pos = 'Intelsat' elif orbital_pos == 3325: orb_pos = 'Intelsat' elif orbital_pos == 3300: orb_pos = 'Hispasat' elif orbital_pos == 3285: orb_pos = 'Intelsat' elif orbital_pos == 3170: orb_pos = 'Intelsat' elif orbital_pos == 3150: orb_pos = 'Intelsat' elif orbital_pos == 3070: orb_pos = 'Intelsat' elif orbital_pos == 3045: orb_pos = 'Intelsat' elif orbital_pos == 3020: orb_pos = 'Intelsat 9' elif orbital_pos == 2990: orb_pos = 'Amazonas' elif orbital_pos == 2900: orb_pos = 'Star One' elif orbital_pos == 2880: orb_pos = 'AMC 6 (72' elif orbital_pos == 2875: orb_pos = 'Echostar 6' elif orbital_pos == 2860: orb_pos = 'Horizons' elif orbital_pos == 2810: orb_pos = 'AMC5' elif orbital_pos == 2780: orb_pos = 'NIMIQ 4' elif orbital_pos == 2690: orb_pos = 'NIMIQ 1' elif orbital_pos == 3592: orb_pos = 'Thor/Intelsat' elif orbital_pos == 2985: orb_pos = 'Echostar 3,12' elif orbital_pos == 2830: orb_pos = 'Echostar 8' elif orbital_pos == 2630: orb_pos = 'Galaxy 19' elif orbital_pos == 2500: orb_pos = 'Echostar 10,11' elif orbital_pos == 2502: orb_pos = 'DirectTV 5' elif orbital_pos == 2410: orb_pos = 'Echostar 7 Anik F3' elif orbital_pos == 2391: orb_pos = 'Galaxy 23' elif orbital_pos == 2390: orb_pos = 'Echostar 9' elif orbital_pos == 2412: orb_pos = 'DirectTV 7S' elif orbital_pos == 2310: orb_pos = 'Galaxy 27' elif orbital_pos == 2311: orb_pos = 'Ciel 2' elif orbital_pos == 2120: orb_pos = 'Echostar 2' else: orb_pos = str( (float(3600 - orbital_pos)) / 10.0) + "W" elif orbital_pos > 0: if orbital_pos == 192: orb_pos = 'Astra 1F' elif orbital_pos == 130: orb_pos = 'Hot Bird 6,7A,8' elif orbital_pos == 235: orb_pos = 'Astra 1E' elif orbital_pos == 1100: orb_pos = 'BSat 1A,2A' elif orbital_pos == 1101: orb_pos = 'N-Sat 110' elif orbital_pos == 1131: orb_pos = 'KoreaSat 5' elif orbital_pos == 1440: orb_pos = 'SuperBird 7,C2' elif orbital_pos == 1006: orb_pos = 'AsiaSat 2' elif orbital_pos == 1030: orb_pos = 'Express A2' elif orbital_pos == 1056: orb_pos = 'Asiasat 3S' elif orbital_pos == 1082: orb_pos = 'NSS 11' elif orbital_pos == 881: orb_pos = 'ST1' elif orbital_pos == 900: orb_pos = 'Yamal 201' elif orbital_pos == 917: orb_pos = 'Mesat' elif orbital_pos == 950: orb_pos = 'Insat 4B' elif orbital_pos == 951: orb_pos = 'NSS 6' elif orbital_pos == 765: orb_pos = 'Telestar' elif orbital_pos == 785: orb_pos = 'ThaiCom 5' elif orbital_pos == 800: orb_pos = 'Express' elif orbital_pos == 830: orb_pos = 'Insat 4A' elif orbital_pos == 850: orb_pos = 'Intelsat 709' elif orbital_pos == 750: orb_pos = 'Abs' elif orbital_pos == 720: orb_pos = 'Intelsat' elif orbital_pos == 705: orb_pos = 'Eutelsat W5' elif orbital_pos == 685: orb_pos = 'Intelsat' elif orbital_pos == 620: orb_pos = 'Intelsat 902' elif orbital_pos == 600: orb_pos = 'Intelsat 904' elif orbital_pos == 570: orb_pos = 'Nss' elif orbital_pos == 530: orb_pos = 'Express AM22' elif orbital_pos == 480: orb_pos = 'Eutelsat 2F2' elif orbital_pos == 450: orb_pos = 'Intelsat' elif orbital_pos == 420: orb_pos = 'Turksat 2A' elif orbital_pos == 400: orb_pos = 'Express AM1' elif orbital_pos == 390: orb_pos = 'Hellas Sat 2' elif orbital_pos == 380: orb_pos = 'Paksat 1' elif orbital_pos == 360: orb_pos = 'Eutelsat Sesat' elif orbital_pos == 335: orb_pos = 'Astra 1M' elif orbital_pos == 330: orb_pos = 'Eurobird 3' elif orbital_pos == 328: orb_pos = 'Galaxy 11' elif orbital_pos == 315: orb_pos = 'Astra 5A' elif orbital_pos == 310: orb_pos = 'Turksat' elif orbital_pos == 305: orb_pos = 'Arabsat' elif orbital_pos == 285: orb_pos = 'Eurobird 1' elif orbital_pos == 284: orb_pos = 'Eurobird/Astra' elif orbital_pos == 282: orb_pos = 'Eurobird/Astra' elif orbital_pos == 1220: orb_pos = 'AsiaSat' elif orbital_pos == 1380: orb_pos = 'Telstar 18' elif orbital_pos == 260: orb_pos = 'Badr 3/4' elif orbital_pos == 255: orb_pos = 'Eurobird 2' elif orbital_pos == 215: orb_pos = 'Eutelsat' elif orbital_pos == 216: orb_pos = 'Eutelsat W6' elif orbital_pos == 210: orb_pos = 'AfriStar 1' elif orbital_pos == 160: orb_pos = 'Eutelsat W2' elif orbital_pos == 100: orb_pos = 'Eutelsat W1' elif orbital_pos == 90: orb_pos = 'Eurobird 9' elif orbital_pos == 70: orb_pos = 'Eutelsat W3A' elif orbital_pos == 50: orb_pos = 'Sirius 4' elif orbital_pos == 48: orb_pos = 'Sirius 4' elif orbital_pos == 30: orb_pos = 'Telecom 2' else: orb_pos = str( (float(orbital_pos)) / 10.0) + "E" Ret_Text += sep + orb_pos + "\n" Ret_Text += frequency + sep + frontendData.get( "polarization_abbreviation") Ret_Text += sep + symbolrate Ret_Text += sep + frontendData.get( "modulation") + "-" + fec_inner else: Ret_Text += sep + "DVB-C " + frequency + " MHz" + sep + fec_inner + sep + symbolrate elif (frontendData.get("tuner_type") == "DVB-T"): frequency = (str( (frontendData.get("frequency") / 1000)) + " MHz") Ret_Text = "Frequency: " + frequency if (self.type == self.SMART_INFO_H or self.type == self.SMART_INFO_V or self.type == self.SERVICE_INFO): xresol = info.getInfo(iServiceInformation.sVideoWidth) yresol = info.getInfo(iServiceInformation.sVideoHeight) feinfo = (service and service.frontendInfo()) prvd = info.getInfoString(iServiceInformation.sProvider) Ret_Text = self.short(prvd) frontendDataOrg = (feinfo and feinfo.getAll(True)) if (frontendDataOrg is not None): frontendData = ConvertToHumanReadable(frontendDataOrg) if ((frontendDataOrg.get("tuner_type") == "DVB-S") or (frontendDataOrg.get("tuner_type") == "DVB-C")): frequency = (str((frontendData.get("frequency") / 1000))) symbolrate = (str( (frontendData.get("symbol_rate") / 1000))) fec_inner = frontendData.get("fec_inner") if (frontendDataOrg.get("tuner_type") == "DVB-S"): Ret_Text += sep + frontendData.get("system") Ret_Text += sep + frequency + frontendData.get( "polarization_abbreviation") Ret_Text += sep + symbolrate Ret_Text += sep + fec_inner + " " + frontendData.get( "modulation") orbital_pos = int(frontendDataOrg["orbital_position"]) if orbital_pos > 1800: orb_pos = str( (float(3600 - orbital_pos)) / 10.0) + "W" elif orbital_pos > 0: orb_pos = str((float(orbital_pos)) / 10.0) + "E" Ret_Text += sep + orb_pos else: Ret_Text += sep + "DVB-C " + frequency + " MHz" + sep + fec_inner + sep + symbolrate elif (frontendDataOrg.get("tuner_type") == "DVB-T"): frequency = (str((frontendData.get("frequency") / 1000))) Ret_Text += sep + "DVB-T" + sep + "Frequency:" + sep + frequency + " MHz" if (feinfo is not None) and (xresol > 0): Res_Text += ("MPEG2", "MPEG4 H.264", "MPEG1", "MPEG4-VC", "VC1", "VC1-SM", "HEVC H.265", "")[info.getInfo(iServiceInformation.sVideoType)] Res_Text += str(xresol) + "x" + str(yresol) Res_Text += ("i", "p", "")[info.getInfo( iServiceInformation.sProgressive)] Res_Text += str( (info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) if (self.type == self.SMART_INFO_H or self.type == self.SMART_INFO_V or self.type == self.CRYPTO_INFO): decCI = "0" Sec_Text = "" if (info.getInfo(iServiceInformation.sIsCrypted) == 1): data = self.ecmdata.getEcmData() if not config.usage.show_cryptoinfo.value: showCryptoInfo = True Sec_Text = data[0] + "\n" decCI = data[1] provid = data[2] pid = data[3] if decCI != '0': decCIfull = "%04x" % int(decCI, 16) for idline in self.idnames: if int(decCI, 16) >= int(idline[0], 16) and int( decCI, 16) <= int(idline[1], 16): decCIfull = idline[2] + ":" + decCIfull break Sec_Text += decCIfull if provid != '0': Sec_Text += ":%04x" % int(provid, 16) else: Sec_Text += ":" if pid != '0': Sec_Text += ":%04x:%04x" % (info.getInfo( iServiceInformation.sSID), int(pid, 16)) elif not config.usage.show_cryptoinfo.value: showCryptoInfo = True Sec_Text = "FTA" res = "" searchIDs = (info.getInfoObject(iServiceInformation.sCAIDs)) for idline in self.idnames: if int(decCI, 16) >= int(idline[0], 16) and int( decCI, 16) <= int(idline[1], 16): color = "\c0000??00" else: color = "\c007?7?7?" try: for oneID in searchIDs: if oneID >= int(idline[0], 16) and oneID <= int( idline[1], 16): color = "\c00????00" except: pass res += color + idline[3] + " " if (self.type != self.CRYPTO_INFO): Ret_Text += "\n" Ret_Text += res + "\c00?????? " + Sec_Text if Res_Text != "": if showCryptoInfo: Ret_Text += sep + Res_Text else: Ret_Text += "\n" + Res_Text return Ret_Text text = property(getText) def changed(self, what): Converter.changed(self, what) def short(self, langTxt): if (self.type == self.SMART_INFO_V and len(langTxt) > 23): retT = langTxt[:20] + "..." return retT else: return langTxt
class PliExtraInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.caid_data = ( ( "0x100", "0x1ff", "Seca", "S" ), ( "0x500", "0x5ff", "Via", "V" ), ( "0x600", "0x6ff", "Irdeto", "I" ), ( "0x900", "0x9ff", "NDS", "Nd"), ( "0xb00", "0xbff", "Conax", "Co"), ( "0xd00", "0xdff", "CryptoW", "Cw"), ("0x1700", "0x17ff", "Beta", "B" ), ("0x1800", "0x18ff", "Nagra", "N" ), ("0x2600", "0x2600", "Biss", "Bi"), ("0x4ae0", "0x4ae1", "Dre", "D" ) ) self.ecmdata = GetEcmInfo() def getCryptoInfo(self,info): if (info.getInfo(iServiceInformation.sIsCrypted) == 1): data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = "" self.current_caid = "0" self.current_provid = "0" self.current_ecmpid = "0" def createCryptoBar(self,info): res = "" available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int(self.current_caid, 16) <= int(caid_entry[1], 16): color="\c0000??00" else: color = "\c007?7?7?" try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int(caid_entry[1], 16): color="\c00????00" except: pass if res: res += " " res += color + caid_entry[3] res += "\c00??????" return res def createCryptoSpecial(self,info): caid_name = "FTA" try: for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int(self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ":%04x:%04x:%04x:%04x" % (int(self.current_caid,16),int(self.current_provid,16),info.getInfo(iServiceInformation.sSID),int(self.current_ecmpid,16)) except: pass return "" def createResolution(self,info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return "" yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ("i", "p", "")[info.getInfo(iServiceInformation.sProgressive)] fps = str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) return str(xres) + "x" + str(yres) + mode + fps def createVideoCodec(self,info): return ("MPEG2", "MPEG4", "MPEG1", "MPEG4-II", "VC1", "VC1-SM", "")[info.getInfo(iServiceInformation.sVideoType)] def createFrequency(self,fedata): frequency = fedata.get("frequency") if frequency: return str(frequency / 1000) return "" def createSymbolRate(self,fedata): symbolrate = fedata.get("symbol_rate") if symbolrate: return str(symbolrate / 1000) return "" def createPolarization(self,fedata): polarization = fedata.get("polarization_abbreviation") if polarization: return polarization return "" def createFEC(self,fedata): fec = fedata.get("fec_inner") if fec: return fec return "" def createModulation(self,fedata): modulation = fedata.get("modulation") if modulation: return modulation return "" def createTunerType(self,feraw): tunertype = feraw.get("tuner_type") if tunertype: return tunertype return "" def createTunerSystem(self,fedata): tunersystem = fedata.get("system") if tunersystem: return tunersystem return "" def createOrbPos(self,feraw): orbpos = feraw.get("orbital_position") if orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "W" elif orbpos > 0: return str((float(orbpos)) / 10.0) + "E" return "" def createProviderName(self,info): return info.getInfoString(iServiceInformation.sProvider) @cached def getText(self): service = self.source.service if service is None: return "" info = service and service.info() if not info: return "" if self.type == "CryptoBar": self.getCryptoInfo(info) return self.createCryptoBar(info) if self.type == "CryptoSpecial": self.getCryptoInfo(info) return self.createCryptoSpecial(info) if self.type == "ResolutionString": return self.createResolution(info) if self.type == "VideoCodec": return self.createVideoCodec(info) feinfo = service.frontendInfo() if feinfo is None: return "" feraw = feinfo.getAll(False) if feraw is None: return "" fedata = ConvertToHumanReadable(feraw) if fedata is None: return "" if self.type == "TransponderFrequency": return self.createFrequency(fedata) if self.type == "TransponderSymbolRate": return self.createSymbolRate(fedata) if self.type == "TransponderPolarization": return self.createPolarization(fedata) if self.type == "TransponderFEC": return self.createFEC(fedata) if self.type == "TransponderModulation": return self.createModulation(fedata) if self.type == "OrbitalPosition": return self.createOrbPos(feraw) if self.type == "TunerType": return self.createTunerType(feraw) if self.type == "TunerSystem": return self.createTunerSystem(fedata) if self.type == "All": self.getCryptoInfo(info) if config.usage.show_cryptoinfo.value: return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata))\ + addspace(self.createSymbolRate(fedata)) + addspace(self.createFEC(fedata)) + addspace(self.createModulation(fedata)) + self.createOrbPos(feraw) + "\n"\ + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + "\n"\ + addspace(self.createVideoCodec(info)) + self.createResolution(info) else: return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata))\ + addspace(self.createSymbolRate(fedata)) + addspace(self.createFEC(fedata)) + addspace(self.createModulation(fedata)) + self.createOrbPos(feraw) + "\n"\ + addspace(self.createCryptoBar(info)) + self.current_source + "\n"\ + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) return _("invalid type") text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False if self.type == "CryptoCaidSecaAvailable": request_caid = "S" request_selected = False elif self.type == "CryptoCaidViaAvailable": request_caid = "V" request_selected = False elif self.type == "CryptoCaidIrdetoAvailable": request_caid = "I" request_selected = False elif self.type == "CryptoCaidNDSAvailable": request_caid = "Nd" request_selected = False elif self.type == "CryptoCaidConaxAvailable": request_caid = "Co" request_selected = False elif self.type == "CryptoCaidCryptoWAvailable": request_caid = "Cw" request_selected = False elif self.type == "CryptoCaidBetaAvailable": request_caid = "B" request_selected = False elif self.type == "CryptoCaidNagraAvailable": request_caid = "N" request_selected = False elif self.type == "CryptoCaidBissAvailable": request_caid = "Bi" request_selected = False elif self.type == "CryptoCaidDreAvailable": request_caid = "D" request_selected = False elif self.type == "CryptoCaidSecaSelected": request_caid = "S" request_selected = True elif self.type == "CryptoCaidViaSelected": request_caid = "V" request_selected = True elif self.type == "CryptoCaidIrdetoSelected": request_caid = "I" request_selected = True elif self.type == "CryptoCaidNDSSelected": request_caid = "Nd" request_selected = True elif self.type == "CryptoCaidConaxSelected": request_caid = "Co" request_selected = True elif self.type == "CryptoCaidCryptoWSelected": request_caid = "Cw" request_selected = True elif self.type == "CryptoCaidBetaSelected": request_caid = "B" request_selected = True elif self.type == "CryptoCaidNagraSelected": request_caid = "N" request_selected = True elif self.type == "CryptoCaidBissSelected": request_caid = "Bi" request_selected = True elif self.type == "CryptoCaidDreSelected": request_caid = "D" request_selected = True else: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] #current_provid = data[2] #current_ecmpid = data[3] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if caid_entry[3] == request_caid: if(request_selected): if int(current_caid, 16) >= int(caid_entry[0], 16) and int(current_caid, 16) <= int(caid_entry[1], 16): return True else: # request available try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int(caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): Converter.changed(self, what)
class PliExtraInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.caid_data = ( ( "0x100", "0x1ff", "Seca", "S", True ), ( "0x500", "0x5ff", "Via", "V", True ), ( "0x600", "0x6ff", "Irdeto", "I", True ), ( "0x900", "0x9ff", "NDS", "Nd", True ), ( "0xb00", "0xbff", "Conax", "Co", True ), ( "0xd00", "0xdff", "CryptoW", "Cw", True ), ( "0xe00", "0xeff", "PowerVU", "P", False ), ("0x1700", "0x17ff", "Beta", "B", True ), ("0x1800", "0x18ff", "Nagra", "N", True ), ("0x2600", "0x2600", "Biss", "Bi", False ), ("0x4ae0", "0x4ae1", "Dre", "D", False ), ("0x4aee", "0x4aee", "BulCrypt", "B1", False ), ("0x5581", "0x5581", "BulCrypt", "B2", False ) ) self.ca_table = ( ("CryptoCaidSecaAvailable", "S", False), ("CryptoCaidViaAvailable", "V", False), ("CryptoCaidIrdetoAvailable", "I", False), ("CryptoCaidNDSAvailable", "Nd", False), ("CryptoCaidConaxAvailable", "Co", False), ("CryptoCaidCryptoWAvailable", "Cw", False), ("CryptoCaidPowerVUAvailable", "P", False), ("CryptoCaidBetaAvailable", "B", False), ("CryptoCaidNagraAvailable", "N", False), ("CryptoCaidBissAvailable", "Bi", False), ("CryptoCaidDreAvailable", "D", False), ("CryptoCaidBulCrypt1Available","B1", False), ("CryptoCaidBulCrypt2Available","B2", False), ("CryptoCaidSecaSelected", "S", True), ("CryptoCaidViaSelected", "V", True), ("CryptoCaidIrdetoSelected", "I", True), ("CryptoCaidNDSSelected", "Nd", True), ("CryptoCaidConaxSelected", "Co", True), ("CryptoCaidCryptoWSelected", "Cw", True), ("CryptoCaidPowerVUSelected", "P", True), ("CryptoCaidBetaSelected", "B", True), ("CryptoCaidNagraSelected", "N", True), ("CryptoCaidBissSelected", "Bi", True), ("CryptoCaidDreSelected", "D", True), ("CryptoCaidBulCrypt1Selected", "B1", True), ("CryptoCaidBulCrypt2Selected", "B2", True), ) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = "" self.current_caid = "0" self.current_provid = "0" self.current_ecmpid = "0" def createCryptoBar(self, info): res = "" available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): color="\c0000??00" else: color = "\c007?7?7?" try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int(caid_entry[1], 16): color="\c00????00" except: pass if color != "\c007?7?7?" or caid_entry[4]: if res: res += " " res += color + caid_entry[3] res += "\c00??????" return res def createCryptoSeca(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x100', 16) <= int(self.current_caid, 16) <= int('0x1ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x100', 16) <= caid <= int('0x1ff', 16): color="\c00eeee00" except: pass res = color + 'S' res += "\c00??????" return res def createCryptoVia(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x500', 16) <= int(self.current_caid, 16) <= int('0x5ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x500', 16) <= caid <= int('0x5ff', 16): color="\c00eeee00" except: pass res = color + 'V' res += "\c00??????" return res def createCryptoIrdeto(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x600', 16) <= int(self.current_caid, 16) <= int('0x6ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x600', 16) <= caid <= int('0x6ff', 16): color="\c00eeee00" except: pass res = color + 'I' res += "\c00??????" return res def createCryptoNDS(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x900', 16) <= int(self.current_caid, 16) <= int('0x9ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x900', 16) <= caid <= int('0x9ff', 16): color="\c00eeee00" except: pass res = color + 'NDS' res += "\c00??????" return res def createCryptoConax(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xb00', 16) <= int(self.current_caid, 16) <= int('0xbff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xb00', 16) <= caid <= int('0xbff', 16): color="\c00eeee00" except: pass res = color + 'CO' res += "\c00??????" return res def createCryptoCryptoW(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xd00', 16) <= int(self.current_caid, 16) <= int('0xdff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xd00', 16) <= caid <= int('0xdff', 16): color="\c00eeee00" except: pass res = color + 'CW' res += "\c00??????" return res def createCryptoPowerVU(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xe00', 16) <= int(self.current_caid, 16) <= int('0xeff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xe00', 16) <= caid <= int('0xeff', 16): color="\c00eeee00" except: pass res = color + 'P' res += "\c00??????" return res def createCryptoBeta(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1700', 16) <= int(self.current_caid, 16) <= int('0x17ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x1700', 16) <= caid <= int('0x17ff', 16): color="\c00eeee00" except: pass res = color + 'B' res += "\c00??????" return res def createCryptoNagra(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1800', 16) <= int(self.current_caid, 16) <= int('0x18ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x1800', 16) <= caid <= int('0x18ff', 16): color="\c00eeee00" except: pass res = color + 'N' res += "\c00??????" return res def createCryptoBiss(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x2600', 16) <= int(self.current_caid, 16) <= int('0x26ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x2600', 16) <= caid <= int('0x26ff', 16): color="\c00eeee00" except: pass res = color + 'BI' res += "\c00??????" return res def createCryptoDre(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x4ae0', 16) <= int(self.current_caid, 16) <= int('0x4ae1', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x4ae0', 16) <= caid <= int('0x4ae1', 16): color="\c00eeee00" except: pass res = color + 'DC' res += "\c00??????" return res def createCryptoSpecial(self, info): caid_name = "FTA" try: for caid_entry in self.caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ":%04x:%04x:%04x" % (int(self.current_caid,16), int(self.current_provid,16), info.getInfo(iServiceInformation.sSID)) except: pass return "" def createResolution(self, info): video_height = 0 video_width = 0 video_pol = " " video_rate = 0 if path.exists("/proc/stb/vmpeg/0/yres"): f = open("/proc/stb/vmpeg/0/yres", "r") try: video_height = int(f.read(),16) except: pass f.close() if path.exists("/proc/stb/vmpeg/0/xres"): f = open("/proc/stb/vmpeg/0/xres", "r") try: video_width = int(f.read(),16) except: pass f.close() if path.exists("/proc/stb/vmpeg/0/progressive"): f = open("/proc/stb/vmpeg/0/progressive", "r") try: video_pol = "p" if int(f.read(),16) else "i" except: pass f.close() if path.exists("/proc/stb/vmpeg/0/framerate"): f = open("/proc/stb/vmpeg/0/framerate", "r") try: video_rate = int(f.read()) except: pass f.close() fps = str((video_rate + 500) / 1000) return str(video_width) + "x" + str(video_height) + video_pol + fps def createVideoCodec(self, info): return ("MPEG2", "AVC", "MPEG1", "MPEG4-VC", "VC1", "VC1-SM", "HEVC", "")[info.getInfo(iServiceInformation.sVideoType)] def createServiceRef(self, info): return info.getInfoString(iServiceInformation.sServiceref) def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) tsid = info.getInfo(iServiceInformation.sTSID) onid = info.getInfo(iServiceInformation.sONID) if vpid < 0 : vpid = 0 if apid < 0 : apid = 0 if pcrpid < 0 : pcrpid = 0 if sidpid < 0 : sidpid = 0 if tsid < 0 : tsid = 0 if onid < 0 : onid = 0 return "%d-%d:%05d:%04d:%04d:%04d" % (onid, tsid, sidpid, vpid, apid, pcrpid) def createTransponderInfo(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): tmp = addspace(self.createChannelNumber(fedata, feraw)) + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata)) else: tmp = addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata)) return addspace(self.createTunerSystem(fedata)) + tmp + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) \ + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) def createFrequency(self, fedata): frequency = fedata.get("frequency") if frequency: return str(frequency) return "" def createChannelNumber(self, fedata, feraw): return "DVB-T" in feraw.get("tuner_type") and fedata.get("channel") or "" def createSymbolRate(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): bandwidth = fedata.get("bandwidth") if bandwidth: return bandwidth else: symbolrate = fedata.get("symbol_rate") if symbolrate: return str(symbolrate) return "" def createPolarization(self, fedata): return fedata.get("polarization_abbreviation") or "" def createFEC(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): code_rate_lp = fedata.get("code_rate_lp") code_rate_hp = fedata.get("code_rate_hp") if code_rate_lp and code_rate_hp: return code_rate_lp + "-" + code_rate_hp else: fec = fedata.get("fec_inner") if fec: return fec return "" def createModulation(self, fedata): if fedata.get("tuner_type") == _("Terrestrial"): constellation = fedata.get("constellation") if constellation: return constellation else: modulation = fedata.get("modulation") if modulation: return modulation return "" def createTunerType(self, feraw): return feraw.get("tuner_type") or "" def createTunerSystem(self, fedata): return fedata.get("system") or "" def createOrbPos(self, feraw): orbpos = feraw.get("orbital_position") if orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "\xc2\xb0 W" elif orbpos > 0: return str((float(orbpos)) / 10.0) + "\xc2\xb0 E" return "" def createOrbPosOrTunerSystem(self, fedata,feraw): orbpos = self.createOrbPos(feraw) if orbpos is not "": return orbpos return self.createTunerSystem(fedata) def createTransponderName(self,feraw): orbpos = feraw.get("orbital_position") if orbpos is None: # Not satellite return "" freq = feraw.get("frequency") if freq and freq < 10700000: # C-band if orbpos > 1800: orbpos += 1 else: orbpos -= 1 sat_names = { 30: 'Rascom/Eutelsat 3E', 48: 'SES 5', 70: 'Eutelsat 7E', 90: 'Eutelsat 9E', 100: 'Eutelsat 10E', 130: 'Hot Bird', 160: 'Eutelsat 16E', 192: 'Astra 1KR/1L/1M/1N', 200: 'Arabsat 20E', 216: 'Eutelsat 21.5E', 235: 'Astra 3', 255: 'Eutelsat 25.5E', 260: 'Badr 4/5/6', 282: 'Astra 2E/2F/2G', 305: 'Arabsat 30.5E', 315: 'Astra 5', 330: 'Eutelsat 33E', 360: 'Eutelsat 36E', 380: 'Paksat', 390: 'Hellas Sat', 400: 'Express 40E', 420: 'Turksat', 450: 'Intelsat 45E', 480: 'Afghansat', 490: 'Yamal 49E', 530: 'Express 53E', 570: 'NSS 57E', 600: 'Intelsat 60E', 620: 'Intelsat 62E', 685: 'Intelsat 68.5E', 705: 'Eutelsat 70.5E', 720: 'Intelsat 72E', 750: 'ABS', 765: 'Apstar', 785: 'ThaiCom', 800: 'Express 80E', 830: 'Insat', 851: 'Intelsat/Horizons', 880: 'ST2', 900: 'Yamal 90E', 915: 'Mesat', 950: 'NSS/SES 95E', 1005: 'AsiaSat 100E', 1030: 'Express 103E', 1055: 'Asiasat 105E', 1082: 'NSS/SES 108E', 1100: 'BSat/NSAT', 1105: 'ChinaSat', 1130: 'KoreaSat', 1222: 'AsiaSat 122E', 1380: 'Telstar 18', 1440: 'SuperBird', 2310: 'Ciel', 2390: 'Echostar/Galaxy 121W', 2410: 'Echostar/DirectTV 119W', 2500: 'Echostar/DirectTV 110W', 2630: 'Galaxy 97W', 2690: 'NIMIQ 91W', 2780: 'NIMIQ 82W', 2830: 'Echostar/QuetzSat', 2880: 'AMC 72W', 2900: 'Star One', 2985: 'Echostar 61.5W', 2990: 'Amazonas', 3020: 'Intelsat 58W', 3045: 'Intelsat 55.5W', 3070: 'Intelsat 53W', 3100: 'Intelsat 50W', 3150: 'Intelsat 45W', 3169: 'Intelsat 43.1W', 3195: 'SES 40.5W', 3225: 'NSS/Telstar 37W', 3255: 'Intelsat 34.5W', 3285: 'Intelsat 31.5W', 3300: 'Hispasat', 3325: 'Intelsat 27.5W', 3355: 'Intelsat 24.5W', 3380: 'SES 22W', 3400: 'NSS 20W', 3420: 'Intelsat 18W', 3450: 'Telstar 15W', 3460: 'Express 14W', 3475: 'Eutelsat 12.5W', 3490: 'Express 11W', 3520: 'Eutelsat 8W', 3530: 'Nilesat/Eutelsat 7W', 3550: 'Eutelsat 5W', 3560: 'Amos', 3592: 'Thor/Intelsat' } if orbpos in sat_names: return sat_names[orbpos] elif orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "W" else: return str((float(orbpos)) / 10.0) + "E" def createProviderName(self,info): return info.getInfoString(iServiceInformation.sProvider) @cached def getText(self): service = self.source.service if service is None: return "" info = service and service.info() if not info: return "" if self.type == "CryptoInfo": self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createCryptoBar(info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace(self.current_source) + self.createCryptoSpecial(info) if self.type == "CryptoBar": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBar(info) else: return "" if self.type == "CryptoSeca": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSeca(info) else: return "" if self.type == "CryptoVia": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoVia(info) else: return "" if self.type == "CryptoIrdeto": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoIrdeto(info) else: return "" if self.type == "CryptoNDS": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNDS(info) else: return "" if self.type == "CryptoConax": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoConax(info) else: return "" if self.type == "CryptoCryptoW": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoCryptoW(info) else: return "" if self.type == "CryptoBeta": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBeta(info) else: return "" if self.type == "CryptoNagra": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNagra(info) else: return "" if self.type == "CryptoBiss": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBiss(info) else: return "" if self.type == "CryptoDre": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoDre(info) else: return "" if self.type == "CryptoSpecial": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSpecial(info) else: return "" if self.type == "ResolutionString": return self.createResolution(info) if self.type == "VideoCodec": return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll(config.usage.infobar_frontend_source.value == "settings") if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw if not feraw: feraw = info.getInfoObject(iServiceInformation.sTransponderData) if not feraw: return "" fedata = ConvertToHumanReadable(feraw) else: fedata = self.fedata if self.type == "All": self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata,feraw) + addspace(self.createTransponderName(feraw)) + "\n"\ + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + "\n"\ + addspace(self.createPIDInfo(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata,feraw) + addspace(self.createTransponderName(feraw)) + "\n" \ + addspace(self.createCryptoBar(info)) + self.current_source + "\n" \ + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "ServiceInfo": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) \ + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) + addspace(self.createTransponderName(feraw))\ + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "TransponderInfo2line": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createTransponderName(feraw)) + '\n'\ + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata))\ + addspace(self.createSymbolRate(fedata, feraw)) + self.createModulation(fedata) + '-' + addspace(self.createFEC(fedata, feraw)) if self.type == "PIDInfo": return self.createPIDInfo(info) if self.type == "ServiceRef": return self.createServiceRef(info) if not feraw: return "" if self.type == "TransponderInfo": return self.createTransponderInfo(fedata, feraw) if self.type == "TransponderFrequency": return self.createFrequency(feraw) if self.type == "TransponderSymbolRate": return self.createSymbolRate(fedata, feraw) if self.type == "TransponderPolarization": return self.createPolarization(fedata) if self.type == "TransponderFEC": return self.createFEC(fedata, feraw) if self.type == "TransponderModulation": return self.createModulation(fedata) if self.type == "OrbitalPosition": return self.createOrbPos(feraw) if self.type == "TunerType": return self.createTunerType(feraw) if self.type == "TunerSystem": return self.createTunerSystem(fedata) if self.type == "OrbitalPositionOrTunerSystem": return self.createOrbPosOrTunerSystem(fedata,feraw) if self.type == "TerrestrialChannelNumber": return self.createChannelNumber(fedata, feraw) return _("invalid type") text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if caid_entry[3] == request_caid: if request_selected: if int(caid_entry[0], 16) <= int(current_caid, 16) <= int(caid_entry[1], 16): return True else: # request available try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int(caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what)
class pliExpertInfo(Poll, Converter, object): SMART_LABEL = 0 SMART_INFO_H = 1 SMART_INFO_V = 2 SERVICE_INFO = 3 CRYPTO_INFO = 4 def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = { "ShowMe": self.SMART_LABEL, "ExpertInfo": self.SMART_INFO_H, "ExpertInfoVertical": self.SMART_INFO_V, "ServiceInfo": self.SERVICE_INFO, "CryptoInfo": self.CRYPTO_INFO }[type] self.poll_interval = 1000 self.poll_enabled = True self.idnames = ( ( "0x100", "0x1FF","Seca" ,"S" ), ( "0x500", "0x5FF","Via" ,"V" ), ( "0x600", "0x6FF","Irdeto" ,"I" ), ( "0x900", "0x9FF","NDS" ,"Nd"), ( "0xB00", "0xBFF","Conax" ,"Co"), ( "0xD00", "0xDFF","CryptoW","Cw"), ("0x1700","0x17FF","Beta" ,"B" ), ("0x1800","0x18FF","Nagra" ,"N" )) self.ecmdata = GetEcmInfo() @cached def getText(self): service = self.source.service info = service and service.info() if not info: return "" Ret_Text = "" Sec_Text = "" Res_Text = "" showCryptoInfo = False if (self.type == self.SMART_INFO_H or self.type == self.SERVICE_INFO or self.type == self.CRYPTO_INFO): # HORIZONTAL sep = " " sep2 = " - " elif (self.type == self.SMART_INFO_V): # VERTIKAL sep = "\n" sep2 = "\n" else: return "" # unsupported orientation if (self.type == self.SMART_INFO_H or self.type == self.SMART_INFO_V or self.type == self.SERVICE_INFO): xresol = info.getInfo(iServiceInformation.sVideoWidth) yresol = info.getInfo(iServiceInformation.sVideoHeight) feinfo = (service and service.frontendInfo()) prvd = info.getInfoString(iServiceInformation.sProvider) Ret_Text = self.short(prvd) frontendDataOrg = (feinfo and feinfo.getAll(False)) if (frontendDataOrg is not None): frontendData = ConvertToHumanReadable(frontendDataOrg) if ((frontendDataOrg.get("tuner_type") == "DVB-S") or (frontendDataOrg.get("tuner_type") == "DVB-C")): frequency = (str((frontendData.get("frequency") / 1000))) symbolrate = (str((frontendData.get("symbol_rate") / 1000))) fec_inner = frontendData.get("fec_inner") if (frontendDataOrg.get("tuner_type") == "DVB-S"): Ret_Text += sep + frontendData.get("system") Ret_Text += sep + frequency + frontendData.get("polarization_abbreviation") Ret_Text += sep + symbolrate Ret_Text += sep + fec_inner + " " + frontendData.get("modulation") orbital_pos = int(frontendDataOrg["orbital_position"]) if orbital_pos > 1800: orb_pos = str((float(3600 - orbital_pos)) / 10.0) + "W" elif orbital_pos > 0: orb_pos = str((float(orbital_pos)) / 10.0) + "E" Ret_Text += sep + orb_pos else: Ret_Text += sep + "DVB-C " + frequency + " MHz" + sep + fec_inner + sep + symbolrate elif (frontendDataOrg.get("tuner_type") == "DVB-T"): frequency = (str((frontendData.get("frequency") / 1000))) Ret_Text += sep + "DVB-T" + sep + "Frequency:" + sep + frequency + " MHz" if (feinfo is not None) and (xresol > 0): Res_Text += ("MPEG2 ", "MPEG4 ", "MPEG1 ", "MPEG4-II ", "VC1 ", "VC1-SM ", "")[info.getInfo(iServiceInformation.sVideoType)] Res_Text += str(xresol) + "x" + str(yresol) Res_Text += ("i", "p", "")[info.getInfo(iServiceInformation.sProgressive)] Res_Text += str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) if (self.type == self.SMART_INFO_H or self.type == self.SMART_INFO_V or self.type == self.CRYPTO_INFO): decCI = "0" Sec_Text = "" if (info.getInfo(iServiceInformation.sIsCrypted) == 1): data = self.ecmdata.getEcmData() if not config.usage.show_cryptoinfo.value: showCryptoInfo = True Sec_Text = data[0] + "\n" decCI = data[1] provid = data[2] pid = data[3] if decCI != '0': decCIfull = "%04x" % int(decCI, 16) for idline in self.idnames: if int(decCI, 16) >= int(idline[0], 16) and int(decCI, 16) <= int(idline[1], 16): decCIfull = idline[2] + ":" + decCIfull break Sec_Text += decCIfull if provid != '0': Sec_Text += ":%04x" % int(provid, 16) else: Sec_Text += ":" if pid != '0': Sec_Text += ":%04x:%04x" % (info.getInfo(iServiceInformation.sSID),int(pid, 16)) elif not config.usage.show_cryptoinfo.value: showCryptoInfo = True Sec_Text = "FTA" res = "" searchIDs = (info.getInfoObject(iServiceInformation.sCAIDs)) for idline in self.idnames: if int(decCI, 16) >= int(idline[0], 16) and int(decCI, 16) <= int(idline[1], 16): color="\c0000??00" else: color = "\c007?7?7?" try: for oneID in searchIDs: if oneID >= int(idline[0], 16) and oneID <= int(idline[1], 16): color="\c00????00" except: pass res += color + idline[3] + " " if (self.type != self.CRYPTO_INFO): Ret_Text += "\n" Ret_Text += res + "\c00?????? " + Sec_Text if Res_Text != "": if showCryptoInfo: Ret_Text += sep + Res_Text else: Ret_Text += "\n" + Res_Text return Ret_Text text = property(getText) def changed(self, what): Converter.changed(self, what) def short(self, langTxt): if (self.type == self.SMART_INFO_V and len(langTxt)>23): retT = langTxt[:20] + "..." return retT else: return langTxt
class PliExtraInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.caid_data = (('0x100', '0x1ff', 'Seca', 'S', True), ('0x500', '0x5ff', 'Via', 'V', True), ('0x600', '0x6ff', 'Irdeto', 'I', True), ('0x900', '0x9ff', 'NDS', 'Nd', True), ('0xb00', '0xbff', 'Conax', 'Co', True), ('0xd00', '0xdff', 'CryptoW', 'Cw', True), ('0xe00', '0xeff', 'PowerVU', 'P', False), ('0x1700', '0x17ff', 'Beta', 'B', True), ('0x1800', '0x18ff', 'Nagra', 'N', True), ('0x2600', '0x2600', 'Biss', 'Bi', False), ('0x4ae0', '0x4ae1', 'Dre', 'D', False), ('0x4aee', '0x4aee', 'BulCrypt', 'B1', False), ('0x5581', '0x5581', 'BulCrypt', 'B2', False)) self.ca_table = (('CryptoCaidSecaAvailable', 'S', False), ('CryptoCaidViaAvailable', 'V', False), ('CryptoCaidIrdetoAvailable', 'I', False), ('CryptoCaidNDSAvailable', 'Nd', False), ('CryptoCaidConaxAvailable', 'Co', False), ('CryptoCaidCryptoWAvailable', 'Cw', False), ('CryptoCaidPowerVUAvailable', 'P', False), ('CryptoCaidBetaAvailable', 'B', False), ('CryptoCaidNagraAvailable', 'N', False), ('CryptoCaidBissAvailable', 'Bi', False), ('CryptoCaidDreAvailable', 'D', False), ('CryptoCaidBulCrypt1Available', 'B1', False), ('CryptoCaidBulCrypt2Available', 'B2', False), ('CryptoCaidSecaSelected', 'S', True), ('CryptoCaidViaSelected', 'V', True), ('CryptoCaidIrdetoSelected', 'I', True), ('CryptoCaidNDSSelected', 'Nd', True), ('CryptoCaidConaxSelected', 'Co', True), ('CryptoCaidCryptoWSelected', 'Cw', True), ('CryptoCaidPowerVUSelected', 'P', True), ('CryptoCaidBetaSelected', 'B', True), ('CryptoCaidNagraSelected', 'N', True), ('CryptoCaidBissSelected', 'Bi', True), ('CryptoCaidDreSelected', 'D', True), ('CryptoCaidBulCrypt1Selected', 'B1', True), ('CryptoCaidBulCrypt2Selected', 'B2', True)) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None return def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = '' self.current_caid = '0' self.current_provid = '0' self.current_ecmpid = '0' def createCryptoBar(self, info): res = '' available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int( caid_entry[1], 16): color = '\\c0000??00' else: color = '\\c007?7?7?' try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int( caid_entry[1], 16): color = '\\c00????00' except: pass if color != '\\c007?7?7?' or caid_entry[4]: if res: res += ' ' res += color + caid_entry[3] res += '\\c00??????' return res def createCryptoSeca(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x100', 16) <= int(self.current_caid, 16) <= int('0x1ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x100', 16) <= caid <= int('0x1ff', 16): color = '\\c00eeee00' except: pass res = color + 'S' res += '\\c00??????' return res def createCryptoVia(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x500', 16) <= int(self.current_caid, 16) <= int('0x5ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x500', 16) <= caid <= int('0x5ff', 16): color = '\\c00eeee00' except: pass res = color + 'V' res += '\\c00??????' return res def createCryptoIrdeto(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x600', 16) <= int(self.current_caid, 16) <= int('0x6ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x600', 16) <= caid <= int('0x6ff', 16): color = '\\c00eeee00' except: pass res = color + 'I' res += '\\c00??????' return res def createCryptoNDS(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x900', 16) <= int(self.current_caid, 16) <= int('0x9ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x900', 16) <= caid <= int('0x9ff', 16): color = '\\c00eeee00' except: pass res = color + 'NDS' res += '\\c00??????' return res def createCryptoConax(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xb00', 16) <= int(self.current_caid, 16) <= int('0xbff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0xb00', 16) <= caid <= int('0xbff', 16): color = '\\c00eeee00' except: pass res = color + 'CO' res += '\\c00??????' return res def createCryptoCryptoW(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xd00', 16) <= int(self.current_caid, 16) <= int('0xdff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0xd00', 16) <= caid <= int('0xdff', 16): color = '\\c00eeee00' except: pass res = color + 'CW' res += '\\c00??????' return res def createCryptoPowerVU(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xe00', 16) <= int(self.current_caid, 16) <= int('0xeff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0xe00', 16) <= caid <= int('0xeff', 16): color = '\\c00eeee00' except: pass res = color + 'P' res += '\\c00??????' return res def createCryptoBeta(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1700', 16) <= int(self.current_caid, 16) <= int( '0x17ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x1700', 16) <= caid <= int('0x17ff', 16): color = '\\c00eeee00' except: pass res = color + 'B' res += '\\c00??????' return res def createCryptoNagra(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1800', 16) <= int(self.current_caid, 16) <= int( '0x18ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x1800', 16) <= caid <= int('0x18ff', 16): color = '\\c00eeee00' except: pass res = color + 'N' res += '\\c00??????' return res def createCryptoBiss(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x2600', 16) <= int(self.current_caid, 16) <= int( '0x26ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x2600', 16) <= caid <= int('0x26ff', 16): color = '\\c00eeee00' except: pass res = color + 'BI' res += '\\c00??????' return res def createCryptoDre(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x4ae0', 16) <= int(self.current_caid, 16) <= int( '0x4ae1', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x4ae0', 16) <= caid <= int('0x4ae1', 16): color = '\\c00eeee00' except: pass res = color + 'DC' res += '\\c00??????' return res def createCryptoSpecial(self, info): caid_name = 'FTA' try: for caid_entry in self.caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int( caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ':%04x:%04x:%04x' % ( int(self.current_caid, 16), int(self.current_provid, 16), info.getInfo(iServiceInformation.sSID)) except: pass return '' def createResolution(self, info): video_height = 0 video_width = 0 video_pol = ' ' video_rate = 0 if path.exists('/proc/stb/vmpeg/0/yres'): f = open('/proc/stb/vmpeg/0/yres', 'r') try: video_height = int(f.read(), 16) except: pass f.close() if path.exists('/proc/stb/vmpeg/0/xres'): f = open('/proc/stb/vmpeg/0/xres', 'r') try: video_width = int(f.read(), 16) except: pass f.close() if path.exists('/proc/stb/vmpeg/0/progressive'): f = open('/proc/stb/vmpeg/0/progressive', 'r') try: video_pol = 'p' if int(f.read(), 16) else 'i' except: pass f.close() if path.exists('/proc/stb/vmpeg/0/framerate'): f = open('/proc/stb/vmpeg/0/framerate', 'r') try: video_rate = int(f.read()) except: pass f.close() fps = str((video_rate + 500) / 1000) return str(video_width) + 'x' + str(video_height) + video_pol + fps def createVideoCodec(self, info): return ('MPEG2', 'MPEG4', 'MPEG1', 'MPEG4-II', 'VC1', 'VC1-SM', '')[info.getInfo(iServiceInformation.sVideoType)] def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) tsid = info.getInfo(iServiceInformation.sTSID) onid = info.getInfo(iServiceInformation.sONID) if vpid < 0: vpid = 0 if apid < 0: apid = 0 if pcrpid < 0: pcrpid = 0 if sidpid < 0: sidpid = 0 if tsid < 0: tsid = 0 if onid < 0: onid = 0 return '%d-%d:%05d:%04d:%04d:%04d' % (onid, tsid, sidpid, vpid, apid, pcrpid) def createTransponderInfo(self, fedata, feraw): if 'DVB-T' in feraw.get('tuner_type'): tmp = addspace(self.createChannelNumber(fedata, feraw)) + addspace( self.createFrequency(fedata)) + addspace( self.createPolarization(fedata)) else: tmp = addspace(self.createFrequency(fedata)) + addspace( self.createPolarization(fedata)) return addspace(self.createTunerSystem(fedata)) + tmp + addspace( self.createSymbolRate(fedata, feraw)) + addspace( self.createFEC(fedata, feraw)) + addspace( self.createModulation(fedata)) + addspace( self.createOrbPos(feraw)) def createFrequency(self, fedata): frequency = fedata.get('frequency') if frequency: return str(frequency) return '' def createChannelNumber(self, fedata, feraw): return 'DVB-T' in feraw.get('tuner_type') and fedata.get( 'channel') or '' def createSymbolRate(self, fedata, feraw): if 'DVB-T' in feraw.get('tuner_type'): bandwidth = fedata.get('bandwidth') if bandwidth: return bandwidth else: symbolrate = fedata.get('symbol_rate') if symbolrate: return str(symbolrate) return '' def createPolarization(self, fedata): return fedata.get('polarization_abbreviation') or '' def createFEC(self, fedata, feraw): if 'DVB-T' in feraw.get('tuner_type'): code_rate_lp = fedata.get('code_rate_lp') code_rate_hp = fedata.get('code_rate_hp') if code_rate_lp and code_rate_hp: return code_rate_lp + '-' + code_rate_hp else: fec = fedata.get('fec_inner') if fec: return fec return '' def createModulation(self, fedata): if fedata.get('tuner_type') == _('Terrestrial'): constellation = fedata.get('constellation') if constellation: return constellation else: modulation = fedata.get('modulation') if modulation: return modulation return '' def createTunerType(self, feraw): return feraw.get('tuner_type') or '' def createTunerSystem(self, fedata): return fedata.get('system') or '' def createOrbPos(self, feraw): orbpos = feraw.get('orbital_position') if orbpos > 1800: return str(float(3600 - orbpos) / 10.0) + '\xc2\xb0 W' if orbpos > 0: return str(float(orbpos) / 10.0) + '\xc2\xb0 E' return '' def createOrbPosOrTunerSystem(self, fedata, feraw): orbpos = self.createOrbPos(feraw) if orbpos is not '': return orbpos return self.createTunerSystem(fedata) def createTransponderName(self, feraw): orbpos = feraw.get('orbital_position') if orbpos is None: return '' else: freq = feraw.get('frequency') if freq and freq < 10700000: if orbpos > 1800: orbpos += 1 else: orbpos -= 1 sat_names = { 30: 'Rascom/Eutelsat 3E', 48: 'SES 5', 70: 'Eutelsat 7E', 90: 'Eutelsat 9E', 100: 'Eutelsat 10E', 130: 'Hot Bird', 160: 'Eutelsat 16E', 192: 'Astra 1KR/1L/1M/1N', 200: 'Arabsat 20E', 216: 'Eutelsat 21.5E', 235: 'Astra 3', 255: 'Eutelsat 25.5E', 260: 'Badr 4/5/6', 282: 'Astra 2E/2F/2G', 305: 'Arabsat 30.5E', 315: 'Astra 5', 330: 'Eutelsat 33E', 360: 'Eutelsat 36E', 380: 'Paksat', 390: 'Hellas Sat', 400: 'Express 40E', 420: 'Turksat', 450: 'Intelsat 45E', 480: 'Afghansat', 490: 'Yamal 49E', 530: 'Express 53E', 570: 'NSS 57E', 600: 'Intelsat 60E', 620: 'Intelsat 62E', 685: 'Intelsat 68.5E', 705: 'Eutelsat 70.5E', 720: 'Intelsat 72E', 750: 'ABS', 765: 'Apstar', 785: 'ThaiCom', 800: 'Express 80E', 830: 'Insat', 851: 'Intelsat/Horizons', 880: 'ST2', 900: 'Yamal 90E', 915: 'Mesat', 950: 'NSS/SES 95E', 1005: 'AsiaSat 100E', 1030: 'Express 103E', 1055: 'Asiasat 105E', 1082: 'NSS/SES 108E', 1100: 'BSat/NSAT', 1105: 'ChinaSat', 1130: 'KoreaSat', 1222: 'AsiaSat 122E', 1380: 'Telstar 18', 1440: 'SuperBird', 2310: 'Ciel', 2390: 'Echostar/Galaxy 121W', 2410: 'Echostar/DirectTV 119W', 2500: 'Echostar/DirectTV 110W', 2630: 'Galaxy 97W', 2690: 'NIMIQ 91W', 2780: 'NIMIQ 82W', 2830: 'Echostar/QuetzSat', 2880: 'AMC 72W', 2900: 'Star One', 2985: 'Echostar 61.5W', 2990: 'Amazonas', 3020: 'Intelsat 58W', 3045: 'Intelsat 55.5W', 3070: 'Intelsat 53W', 3100: 'Intelsat 50W', 3150: 'Intelsat 45W', 3169: 'Intelsat 43.1W', 3195: 'SES 40.5W', 3225: 'NSS/Telstar 37W', 3255: 'Intelsat 34.5W', 3285: 'Intelsat 31.5W', 3300: 'Hispasat', 3325: 'Intelsat 27.5W', 3355: 'Intelsat 24.5W', 3380: 'SES 22W', 3400: 'NSS 20W', 3420: 'Intelsat 18W', 3450: 'Telstar 15W', 3460: 'Express 14W', 3475: 'Eutelsat 12.5W', 3490: 'Express 11W', 3520: 'Eutelsat 8W', 3530: 'Nilesat/Eutelsat 7W', 3550: 'Eutelsat 5W', 3560: 'Amos', 3592: 'Thor/Intelsat' } if orbpos in sat_names: return sat_names[orbpos] if orbpos > 1800: return str(float(3600 - orbpos) / 10.0) + 'W' return str(float(orbpos) / 10.0) + 'E' return def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) @cached def getText(self): service = self.source.service if service is None: return '' info = service and service.info() if not info: return '' if self.type == 'CryptoInfo': self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createCryptoBar( info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace( self.current_source) + self.createCryptoSpecial(info) if self.type == 'CryptoBar': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBar(info) else: return '' if self.type == 'CryptoSeca': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSeca(info) else: return '' if self.type == 'CryptoVia': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoVia(info) else: return '' if self.type == 'CryptoIrdeto': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoIrdeto(info) else: return '' if self.type == 'CryptoNDS': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNDS(info) else: return '' if self.type == 'CryptoConax': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoConax(info) else: return '' if self.type == 'CryptoCryptoW': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoCryptoW(info) else: return '' if self.type == 'CryptoBeta': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBeta(info) else: return '' if self.type == 'CryptoNagra': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNagra(info) else: return '' if self.type == 'CryptoBiss': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBiss(info) else: return '' if self.type == 'CryptoDre': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoDre(info) else: return '' if self.type == 'CryptoSpecial': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSpecial(info) else: return '' if self.type == 'ResolutionString': return self.createResolution(info) elif self.type == 'VideoCodec': return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll( config.usage.infobar_frontend_source.value == 'settings') if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw if not feraw: feraw = info.getInfoObject(iServiceInformation.sTransponderData) if not feraw: return '' fedata = ConvertToHumanReadable(feraw) else: fedata = self.fedata if self.type == 'All': self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace( self.createProviderName(info) ) + self.createTransponderInfo(fedata, feraw) + addspace( self.createTransponderName(feraw)) + '\n' + addspace( self.createCryptoBar(info)) + addspace( self.createCryptoSpecial(info)) + '\n' + addspace( self.createPIDInfo(info)) + addspace( self.createVideoCodec( info)) + self.createResolution(info) else: return addspace( self.createProviderName(info) ) + self.createTransponderInfo(fedata, feraw) + addspace( self.createTransponderName(feraw)) + '\n' + addspace( self.createCryptoBar( info)) + self.current_source + '\n' + addspace( self.createCryptoSpecial(info)) + addspace( self.createVideoCodec( info)) + self.createResolution(info) if self.type == 'ServiceInfo': return addspace(self.createProviderName(info)) + addspace( self.createTunerSystem(fedata)) + addspace( self.createFrequency(feraw)) + addspace( self.createPolarization(fedata)) + addspace( self.createSymbolRate(fedata, feraw)) + addspace( self.createFEC(fedata, feraw)) + addspace( self.createModulation(fedata)) + addspace( self.createOrbPos(feraw)) + addspace( self.createTransponderName( feraw)) + addspace( self.createVideoCodec(info) ) + self.createResolution(info) elif self.type == 'ServiceInfoFreq': return addspace( self.createFrequency(feraw)) + ' POL : ' + addspace( self.createPolarization(fedata)) + ' FEC : ' + addspace( self.createFEC(fedata, feraw)) + ' SR : ' + addspace( self.createSymbolRate( fedata, feraw)) + ' MOD : ' + addspace( self.createModulation(fedata)) if self.type == 'ServiceInfoCrypt': self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createCryptoBar(info)) + addspace( self.createCryptoSpecial(info)) else: return "'Emu Info'" if self.type == 'EmuInfoCrypt': self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createCryptoBar(info)) else: return "'Emu Info'" if self.type == 'EmuInfoCryptSpecial': self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createCryptoSpecial(info)) else: return "'Emu Info'" if self.type == 'TransponderInfo2line': return addspace(self.createProviderName(info)) + addspace( self.createTunerSystem(fedata)) + addspace( self.createTransponderName(feraw)) + '\n' + addspace( self.createFrequency(fedata)) + addspace( self.createPolarization(fedata)) + addspace( self.createSymbolRate(fedata, feraw) ) + self.createModulation(fedata) + '-' + addspace( self.createFEC(fedata, feraw)) elif self.type == 'ProviderName': return self.createProviderName(info) elif self.type == 'TransponderName': return self.createTransponderName(feraw) elif self.type == 'TunerSystem': return self.createTunerSystem(fedata) elif self.type == 'PIDInfo': return self.createPIDInfo(info) elif not feraw: return '' elif self.type == 'TransponderInfo': return self.createTransponderInfo(fedata, feraw) elif self.type == 'TransponderFrequency': return self.createFrequency(feraw) elif self.type == 'TransponderSymbolRate': return self.createSymbolRate(fedata, feraw) elif self.type == 'TransponderPolarization': return self.createPolarization(fedata) elif self.type == 'TransponderFEC': return self.createFEC(fedata, feraw) elif self.type == 'TransponderModulation': return self.createModulation(fedata) elif self.type == 'OrbitalPosition': return self.createOrbPos(feraw) elif self.type == 'TunerType': return self.createTunerType(feraw) elif self.type == 'TunerSystem': return self.createTunerSystem(fedata) elif self.type == 'OrbitalPositionOrTunerSystem': return self.createOrbPosOrTunerSystem(fedata, feraw) elif self.type == 'TerrestrialChannelNumber': return self.createChannelNumber(fedata, feraw) else: return _('invalid type') text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False else: request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if caid_entry[3] == request_caid: if request_selected: if int(caid_entry[0], 16) <= int( current_caid, 16) <= int(caid_entry[1], 16): return True else: try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int( caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what) return
class pliExpertInfo(Poll, Converter, object): SMART_LABEL = 0 SMART_INFO_H = 1 SMART_INFO_V = 2 SERVICE_INFO = 3 CRYPTO_INFO = 4 FREQUENCY_INFO = 5 def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = { 'ShowMe': self.SMART_LABEL, 'ExpertInfo': self.SMART_INFO_H, 'ExpertInfoVertical': self.SMART_INFO_V, 'ServiceInfo': self.SERVICE_INFO, 'CryptoInfo': self.CRYPTO_INFO, 'FrequencyInfo': self.FREQUENCY_INFO }[type] self.poll_interval = 1000 self.poll_enabled = True self.idnames = (('0x100', '0x1FF', 'Seca', 'S'), ('0x500', '0x5FF', 'Via', 'V'), ('0x600', '0x6FF', 'Irdeto', 'I'), ('0x900', '0x9FF', 'NDS', 'Nd'), ('0xB00', '0xBFF', 'Conax', 'Co'), ('0xD00', '0xDFF', 'CryptoW', 'Cw'), ('0x1700', '0x17FF', 'Beta', 'B'), ('0x1800', '0x18FF', 'Nagra', 'N')) self.ecmdata = GetEcmInfo() @cached def getText(self): service = self.source.service try: info = service and service.info() except: try: info = eServiceCenter.getInstance().info(service) except: pass if not info: return '' else: Ret_Text = '' Sec_Text = '' Res_Text = '' showCryptoInfo = False if self.type == self.SMART_INFO_H or self.type == self.SERVICE_INFO or self.type == self.CRYPTO_INFO or self.type == self.FREQUENCY_INFO: sep = ' ' sep2 = ' - ' elif self.type == self.SMART_INFO_V: sep = '\n' sep2 = '\n' else: return '' if self.type == self.FREQUENCY_INFO: try: feinfo = service and service.frontendInfo() prvd = info.getInfoString(iServiceInformation.sProvider) Ret_Text = self.short(prvd) frontendDataOrg = feinfo and feinfo.getAll(True) except: try: frontendDataOrg = info.getInfoObject( service, iServiceInformation.sTransponderData) prvd = info.getInfoString( service, iServiceInformation.sProvider) except: pass if frontendDataOrg is not None: frontendData = ConvertToHumanReadable(frontendDataOrg) if frontendDataOrg.get( 'tuner_type') == 'DVB-S' or frontendDataOrg.get( 'tuner_type') == 'DVB-C': frequency = str( frontendData.get('frequency') / 1000) + ' MHz' symbolrate = str( frontendData.get('symbol_rate') / 1000) fec_inner = frontendData.get('fec_inner') if frontendDataOrg.get('tuner_type') == 'DVB-S': Ret_Text += sep + frontendData.get('system') orbital_pos = int( frontendDataOrg['orbital_position']) if orbital_pos > 1800: if orbital_pos == 3590: orb_pos = 'Thor/Intelsat' elif orbital_pos == 3560: orb_pos = 'Amos (4' elif orbital_pos == 3550: orb_pos = 'Atlantic Bird' elif orbital_pos == 3530: orb_pos = 'Nilesat/Atlantic Bird' elif orbital_pos == 3520: orb_pos = 'Atlantic Bird' elif orbital_pos == 3475: orb_pos = 'Atlantic Bird' elif orbital_pos == 3460: orb_pos = 'Express' elif orbital_pos == 3450: orb_pos = 'Telstar' elif orbital_pos == 3420: orb_pos = 'Intelsat' elif orbital_pos == 3380: orb_pos = 'Nss' elif orbital_pos == 3355: orb_pos = 'Intelsat' elif orbital_pos == 3325: orb_pos = 'Intelsat' elif orbital_pos == 3300: orb_pos = 'Hispasat' elif orbital_pos == 3285: orb_pos = 'Intelsat' elif orbital_pos == 3170: orb_pos = 'Intelsat' elif orbital_pos == 3150: orb_pos = 'Intelsat' elif orbital_pos == 3070: orb_pos = 'Intelsat' elif orbital_pos == 3045: orb_pos = 'Intelsat' elif orbital_pos == 3020: orb_pos = 'Intelsat 9' elif orbital_pos == 2990: orb_pos = 'Amazonas' elif orbital_pos == 2900: orb_pos = 'Star One' elif orbital_pos == 2880: orb_pos = 'AMC 6 (72' elif orbital_pos == 2875: orb_pos = 'Echostar 6' elif orbital_pos == 2860: orb_pos = 'Horizons' elif orbital_pos == 2810: orb_pos = 'AMC5' elif orbital_pos == 2780: orb_pos = 'NIMIQ 4' elif orbital_pos == 2690: orb_pos = 'NIMIQ 1' elif orbital_pos == 3592: orb_pos = 'Thor/Intelsat' elif orbital_pos == 2985: orb_pos = 'Echostar 3,12' elif orbital_pos == 2830: orb_pos = 'Echostar 8' elif orbital_pos == 2630: orb_pos = 'Galaxy 19' elif orbital_pos == 2500: orb_pos = 'Echostar 10,11' elif orbital_pos == 2502: orb_pos = 'DirectTV 5' elif orbital_pos == 2410: orb_pos = 'Echostar 7 Anik F3' elif orbital_pos == 2391: orb_pos = 'Galaxy 23' elif orbital_pos == 2390: orb_pos = 'Echostar 9' elif orbital_pos == 2412: orb_pos = 'DirectTV 7S' elif orbital_pos == 2310: orb_pos = 'Galaxy 27' elif orbital_pos == 2311: orb_pos = 'Ciel 2' elif orbital_pos == 2120: orb_pos = 'Echostar 2' else: orb_pos = str( float(3600 - orbital_pos) / 10.0) + 'W' elif orbital_pos > 0: if orbital_pos == 192: orb_pos = 'Astra 1F' elif orbital_pos == 130: orb_pos = 'Hot Bird 6,7A,8' elif orbital_pos == 235: orb_pos = 'Astra 1E' elif orbital_pos == 1100: orb_pos = 'BSat 1A,2A' elif orbital_pos == 1101: orb_pos = 'N-Sat 110' elif orbital_pos == 1131: orb_pos = 'KoreaSat 5' elif orbital_pos == 1440: orb_pos = 'SuperBird 7,C2' elif orbital_pos == 1006: orb_pos = 'AsiaSat 2' elif orbital_pos == 1030: orb_pos = 'Express A2' elif orbital_pos == 1056: orb_pos = 'Asiasat 3S' elif orbital_pos == 1082: orb_pos = 'NSS 11' elif orbital_pos == 881: orb_pos = 'ST1' elif orbital_pos == 900: orb_pos = 'Yamal 201' elif orbital_pos == 917: orb_pos = 'Mesat' elif orbital_pos == 950: orb_pos = 'Insat 4B' elif orbital_pos == 951: orb_pos = 'NSS 6' elif orbital_pos == 765: orb_pos = 'Telestar' elif orbital_pos == 785: orb_pos = 'ThaiCom 5' elif orbital_pos == 800: orb_pos = 'Express' elif orbital_pos == 830: orb_pos = 'Insat 4A' elif orbital_pos == 850: orb_pos = 'Intelsat 709' elif orbital_pos == 750: orb_pos = 'Abs' elif orbital_pos == 720: orb_pos = 'Intelsat' elif orbital_pos == 705: orb_pos = 'Eutelsat W5' elif orbital_pos == 685: orb_pos = 'Intelsat' elif orbital_pos == 620: orb_pos = 'Intelsat 902' elif orbital_pos == 600: orb_pos = 'Intelsat 904' elif orbital_pos == 570: orb_pos = 'Nss' elif orbital_pos == 530: orb_pos = 'Express AM22' elif orbital_pos == 480: orb_pos = 'Eutelsat 2F2' elif orbital_pos == 450: orb_pos = 'Intelsat' elif orbital_pos == 420: orb_pos = 'Turksat 2A' elif orbital_pos == 400: orb_pos = 'Express AM1' elif orbital_pos == 390: orb_pos = 'Hellas Sat 2' elif orbital_pos == 380: orb_pos = 'Paksat 1' elif orbital_pos == 360: orb_pos = 'Eutelsat Sesat' elif orbital_pos == 335: orb_pos = 'Astra 1M' elif orbital_pos == 330: orb_pos = 'Eurobird 3' elif orbital_pos == 328: orb_pos = 'Galaxy 11' elif orbital_pos == 315: orb_pos = 'Astra 5A' elif orbital_pos == 310: orb_pos = 'Turksat' elif orbital_pos == 305: orb_pos = 'Arabsat' elif orbital_pos == 285: orb_pos = 'Eurobird 1' elif orbital_pos == 284: orb_pos = 'Eurobird/Astra' elif orbital_pos == 282: orb_pos = 'Eurobird/Astra' elif orbital_pos == 1220: orb_pos = 'AsiaSat' elif orbital_pos == 1380: orb_pos = 'Telstar 18' elif orbital_pos == 260: orb_pos = 'Badr 3/4' elif orbital_pos == 255: orb_pos = 'Eurobird 2' elif orbital_pos == 215: orb_pos = 'Eutelsat' elif orbital_pos == 216: orb_pos = 'Eutelsat W6' elif orbital_pos == 210: orb_pos = 'AfriStar 1' elif orbital_pos == 160: orb_pos = 'Eutelsat W2' elif orbital_pos == 100: orb_pos = 'Eutelsat W1' elif orbital_pos == 90: orb_pos = 'Eurobird 9' elif orbital_pos == 70: orb_pos = 'Eutelsat W3A' elif orbital_pos == 50: orb_pos = 'Sirius 4' elif orbital_pos == 48: orb_pos = 'Sirius 4' elif orbital_pos == 30: orb_pos = 'Telecom 2' else: orb_pos = str( float(orbital_pos) / 10.0) + 'E' Ret_Text += sep + orb_pos + '\n' Ret_Text += frequency + sep + frontendData.get( 'polarization_abbreviation') Ret_Text += sep + symbolrate Ret_Text += sep + frontendData.get( 'modulation') + '-' + fec_inner else: Ret_Text += sep + 'DVB-C ' + frequency + ' MHz' + sep + fec_inner + sep + symbolrate elif frontendData.get('tuner_type') == 'DVB-T': frequency = str( frontendData.get('frequency') / 1000) + ' MHz' Ret_Text = 'Frequency: ' + frequency if self.type == self.SMART_INFO_H or self.type == self.SMART_INFO_V or self.type == self.SERVICE_INFO: xresol = info.getInfo(iServiceInformation.sVideoWidth) yresol = info.getInfo(iServiceInformation.sVideoHeight) feinfo = service and service.frontendInfo() prvd = info.getInfoString(iServiceInformation.sProvider) Ret_Text = self.short(prvd) frontendDataOrg = feinfo and feinfo.getAll(True) if frontendDataOrg is not None: frontendData = ConvertToHumanReadable(frontendDataOrg) if frontendDataOrg.get( 'tuner_type') == 'DVB-S' or frontendDataOrg.get( 'tuner_type') == 'DVB-C': frequency = str(frontendData.get('frequency') / 1000) symbolrate = str( frontendData.get('symbol_rate') / 1000) fec_inner = frontendData.get('fec_inner') if frontendDataOrg.get('tuner_type') == 'DVB-S': Ret_Text += sep + frontendData.get('system') Ret_Text += sep + frequency + frontendData.get( 'polarization_abbreviation') Ret_Text += sep + symbolrate Ret_Text += sep + fec_inner + ' ' + frontendData.get( 'modulation') orbital_pos = int( frontendDataOrg['orbital_position']) if orbital_pos > 1800: orb_pos = str( float(3600 - orbital_pos) / 10.0) + 'W' elif orbital_pos > 0: orb_pos = str(float(orbital_pos) / 10.0) + 'E' Ret_Text += sep + orb_pos else: Ret_Text += sep + 'DVB-C ' + frequency + ' MHz' + sep + fec_inner + sep + symbolrate elif frontendDataOrg.get('tuner_type') == 'DVB-T': frequency = str(frontendData.get('frequency') / 1000) Ret_Text += sep + 'DVB-T' + sep + 'Frequency:' + sep + frequency + ' MHz' if feinfo is not None and xresol > 0: Res_Text += ('MPEG2 ', 'MPEG4 ', 'MPEG1 ', 'MPEG4-II ', 'VC1 ', 'VC1-SM ', '')[info.getInfo( iServiceInformation.sVideoType)] Res_Text += str(xresol) + 'x' + str(yresol) Res_Text += ('i', 'p', '')[info.getInfo( iServiceInformation.sProgressive)] Res_Text += str( (info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) if self.type == self.SMART_INFO_H or self.type == self.SMART_INFO_V or self.type == self.CRYPTO_INFO: decCI = '0' Sec_Text = '' if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() if not config.usage.show_cryptoinfo.value: showCryptoInfo = True Sec_Text = data[0] + '\n' decCI = data[1] provid = data[2] pid = data[3] if decCI != '0': decCIfull = '%04x' % int(decCI, 16) for idline in self.idnames: if int(decCI, 16) >= int(idline[0], 16) and int( decCI, 16) <= int(idline[1], 16): decCIfull = idline[2] + ':' + decCIfull break Sec_Text += decCIfull if provid != '0': Sec_Text += ':%04x' % int(provid, 16) else: Sec_Text += ':' if pid != '0': Sec_Text += ':%04x:%04x' % (info.getInfo( iServiceInformation.sSID), int(pid, 16)) elif not config.usage.show_cryptoinfo.value: showCryptoInfo = True Sec_Text = 'FTA' res = '' searchIDs = info.getInfoObject(iServiceInformation.sCAIDs) for idline in self.idnames: if int(decCI, 16) >= int(idline[0], 16) and int( decCI, 16) <= int(idline[1], 16): color = '\\c0000??00' else: color = '\\c007?7?7?' try: for oneID in searchIDs: if oneID >= int(idline[0], 16) and oneID <= int( idline[1], 16): color = '\\c00????00' except: pass res += color + idline[3] + ' ' if self.type != self.CRYPTO_INFO: Ret_Text += '\n' Ret_Text += res + '\\c00?????? ' + Sec_Text if Res_Text != '': if showCryptoInfo: Ret_Text += sep + Res_Text else: Ret_Text += '\n' + Res_Text return Ret_Text text = property(getText) def changed(self, what): Converter.changed(self, what) def short(self, langTxt): if self.type == self.SMART_INFO_V and len(langTxt) > 23: retT = langTxt[:20] + '...' return retT else: return langTxt
class PliExtraInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.caid_data = (("0x100", "0x1ff", "Seca", "S", True), ("0x500", "0x5ff", "Via", "V", True), ("0x600", "0x6ff", "Irdeto", "I", True), ("0x900", "0x9ff", "NDS", "Nd", True), ("0xb00", "0xbff", "Conax", "Co", True), ("0xd00", "0xdff", "CryptoW", "Cw", True), ("0xe00", "0xeff", "PowerVU", "P", False), ("0x1700", "0x17ff", "Beta", "B", True), ("0x1800", "0x18ff", "Nagra", "N", True), ("0x2600", "0x2600", "Biss", "Bi", False), ("0x4ae0", "0x4ae1", "Dre", "D", False), ("0x4aee", "0x4aee", "BulCrypt", "B1", False), ("0x5581", "0x5581", "BulCrypt", "B2", False)) self.ca_table = ( ("CryptoCaidSecaAvailable", "S", False), ("CryptoCaidViaAvailable", "V", False), ("CryptoCaidIrdetoAvailable", "I", False), ("CryptoCaidNDSAvailable", "Nd", False), ("CryptoCaidConaxAvailable", "Co", False), ("CryptoCaidCryptoWAvailable", "Cw", False), ("CryptoCaidPowerVUAvailable", "P", False), ("CryptoCaidBetaAvailable", "B", False), ("CryptoCaidNagraAvailable", "N", False), ("CryptoCaidBissAvailable", "Bi", False), ("CryptoCaidDreAvailable", "D", False), ("CryptoCaidBulCrypt1Available", "B1", False), ("CryptoCaidBulCrypt2Available", "B2", False), ("CryptoCaidSecaSelected", "S", True), ("CryptoCaidViaSelected", "V", True), ("CryptoCaidIrdetoSelected", "I", True), ("CryptoCaidNDSSelected", "Nd", True), ("CryptoCaidConaxSelected", "Co", True), ("CryptoCaidCryptoWSelected", "Cw", True), ("CryptoCaidPowerVUSelected", "P", True), ("CryptoCaidBetaSelected", "B", True), ("CryptoCaidNagraSelected", "N", True), ("CryptoCaidBissSelected", "Bi", True), ("CryptoCaidDreSelected", "D", True), ("CryptoCaidBulCrypt1Selected", "B1", True), ("CryptoCaidBulCrypt2Selected", "B2", True), ) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = "" self.current_caid = "0" self.current_provid = "0" self.current_ecmpid = "0" def createCryptoBar(self, info): res = "" available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int( caid_entry[1], 16): color = "\c0000??00" else: color = "\c007?7?7?" try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int( caid_entry[1], 16): color = "\c00????00" except: pass if color != "\c007?7?7?" or caid_entry[4]: if res: res += " " res += color + caid_entry[3] res += "\c00??????" return res def createCryptoSeca(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x100', 16) <= int(self.current_caid, 16) <= int('0x1ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x100', 16) <= caid <= int('0x1ff', 16): color = "\c00eeee00" except: pass res = color + 'S' res += "\c00??????" return res def createCryptoVia(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x500', 16) <= int(self.current_caid, 16) <= int('0x5ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x500', 16) <= caid <= int('0x5ff', 16): color = "\c00eeee00" except: pass res = color + 'V' res += "\c00??????" return res def createCryptoIrdeto(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x600', 16) <= int(self.current_caid, 16) <= int('0x6ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x600', 16) <= caid <= int('0x6ff', 16): color = "\c00eeee00" except: pass res = color + 'I' res += "\c00??????" return res def createCryptoNDS(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x900', 16) <= int(self.current_caid, 16) <= int('0x9ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x900', 16) <= caid <= int('0x9ff', 16): color = "\c00eeee00" except: pass res = color + 'NDS' res += "\c00??????" return res def createCryptoConax(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xb00', 16) <= int(self.current_caid, 16) <= int('0xbff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xb00', 16) <= caid <= int('0xbff', 16): color = "\c00eeee00" except: pass res = color + 'CO' res += "\c00??????" return res def createCryptoCryptoW(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xd00', 16) <= int(self.current_caid, 16) <= int('0xdff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xd00', 16) <= caid <= int('0xdff', 16): color = "\c00eeee00" except: pass res = color + 'CW' res += "\c00??????" return res def createCryptoPowerVU(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xe00', 16) <= int(self.current_caid, 16) <= int('0xeff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xe00', 16) <= caid <= int('0xeff', 16): color = "\c00eeee00" except: pass res = color + 'P' res += "\c00??????" return res def createCryptoBeta(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1700', 16) <= int(self.current_caid, 16) <= int( '0x17ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x1700', 16) <= caid <= int('0x17ff', 16): color = "\c00eeee00" except: pass res = color + 'B' res += "\c00??????" return res def createCryptoNagra(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1800', 16) <= int(self.current_caid, 16) <= int( '0x18ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x1800', 16) <= caid <= int('0x18ff', 16): color = "\c00eeee00" except: pass res = color + 'N' res += "\c00??????" return res def createCryptoBiss(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x2600', 16) <= int(self.current_caid, 16) <= int( '0x26ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x2600', 16) <= caid <= int('0x26ff', 16): color = "\c00eeee00" except: pass res = color + 'BI' res += "\c00??????" return res def createCryptoDre(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x4ae0', 16) <= int(self.current_caid, 16) <= int( '0x4ae1', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x4ae0', 16) <= caid <= int('0x4ae1', 16): color = "\c00eeee00" except: pass res = color + 'DC' res += "\c00??????" return res def createCryptoSpecial(self, info): caid_name = "FTA" try: for caid_entry in self.caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int( caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ":%04x:%04x:%04x" % ( int(self.current_caid, 16), int(self.current_provid, 16), info.getInfo(iServiceInformation.sSID)) except: pass return "" def createResolution(self, info): video_height = 0 video_width = 0 video_pol = " " video_rate = 0 if path.exists("/proc/stb/vmpeg/0/yres"): f = open("/proc/stb/vmpeg/0/yres", "r") try: video_height = int(f.read(), 16) except: pass f.close() if path.exists("/proc/stb/vmpeg/0/xres"): f = open("/proc/stb/vmpeg/0/xres", "r") try: video_width = int(f.read(), 16) except: pass f.close() if path.exists("/proc/stb/vmpeg/0/progressive"): f = open("/proc/stb/vmpeg/0/progressive", "r") try: video_pol = "p" if int(f.read(), 16) else "i" except: pass f.close() if path.exists("/proc/stb/vmpeg/0/framerate"): f = open("/proc/stb/vmpeg/0/framerate", "r") try: video_rate = int(f.read()) except: pass f.close() fps = str((video_rate + 500) / 1000) return str(video_width) + "x" + str(video_height) + video_pol + fps def createVideoCodec(self, info): return ("MPEG2", "MPEG4", "MPEG1", "MPEG4-II", "VC1", "VC1-SM", "")[info.getInfo(iServiceInformation.sVideoType)] def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) tsid = info.getInfo(iServiceInformation.sTSID) onid = info.getInfo(iServiceInformation.sONID) if vpid < 0: vpid = 0 if apid < 0: apid = 0 if pcrpid < 0: pcrpid = 0 if sidpid < 0: sidpid = 0 if tsid < 0: tsid = 0 if onid < 0: onid = 0 return "%d-%d:%05d:%04d:%04d:%04d" % (onid, tsid, sidpid, vpid, apid, pcrpid) def createTransponderInfo(self, fedata, feraw): if not feraw: return "" elif "DVB-T" in feraw.get("tuner_type"): tmp = addspace(self.createChannelNumber(fedata, feraw)) + addspace( self.createFrequency(feraw)) + addspace( self.createPolarization(fedata)) else: tmp = addspace(self.createFrequency(feraw)) + addspace( self.createPolarization(fedata)) return addspace(self.createTunerSystem(fedata)) + tmp + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) \ + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) def createFrequency(self, fedata): frequency = fedata.get("frequency") if frequency: return str(frequency) return "" def createChannelNumber(self, fedata, feraw): return "DVB-T" in feraw.get("tuner_type") and fedata.get( "channel") or "" def createSymbolRate(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): bandwidth = fedata.get("bandwidth") if bandwidth: return bandwidth else: symbolrate = fedata.get("symbol_rate") if symbolrate: return str(symbolrate) return "" def createPolarization(self, fedata): return fedata.get("polarization_abbreviation") or "" def createFEC(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): code_rate_lp = fedata.get("code_rate_lp") code_rate_hp = fedata.get("code_rate_hp") if code_rate_lp and code_rate_hp: return code_rate_lp + "-" + code_rate_hp else: fec = fedata.get("fec_inner") if fec: return fec return "" def createModulation(self, fedata): if fedata.get("tuner_type") == _("Terrestrial"): constellation = fedata.get("constellation") if constellation: return constellation else: modulation = fedata.get("modulation") if modulation: return modulation return "" def createTunerType(self, feraw): return feraw.get("tuner_type") or "" def createTunerSystem(self, fedata): return fedata.get("system") or "" def createOrbPos(self, feraw): orbpos = feraw.get("orbital_position") if orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "\xc2\xb0 W" elif orbpos > 0: return str((float(orbpos)) / 10.0) + "\xc2\xb0 E" return "" def createOrbPosOrTunerSystem(self, fedata, feraw): orbpos = self.createOrbPos(feraw) if orbpos is not "": return orbpos return self.createTunerSystem(fedata) def createTransponderName(self, feraw): freq = feraw.get("frequency") c_band = False if freq and freq < 10700000: c_band = True orb_pos = "" orbpos = feraw.get("orbital_position") if orbpos > 1800: if c_band: orbpos += 1 if orbpos == 3592: orb_pos = 'Thor/Intelsat' elif orbpos == 3560: orb_pos = 'Amos' elif orbpos == 3550: orb_pos = 'Eutelsat 5W' elif orbpos == 3530: orb_pos = 'Nilesat/Eutelsat 7W' elif orbpos == 3520: orb_pos = 'Eutelsat 8W' elif orbpos == 3490: orb_pos = 'Express 11W' elif orbpos == 3475: orb_pos = 'Eutelsat 12.5W' elif orbpos == 3460: orb_pos = 'Express 14W' elif orbpos == 3450: orb_pos = 'Telstar 15W' elif orbpos == 3420: orb_pos = 'Intelsat 18W' elif orbpos == 3400: orb_pos = 'NSS 20W' elif orbpos == 3380: orb_pos = 'SES 22W' elif orbpos == 3355: orb_pos = 'Intelsat 24.5W' elif orbpos == 3325: orb_pos = 'Intelsat 27.5W' elif orbpos == 3300: orb_pos = 'Hispasat' elif orbpos == 3285: orb_pos = 'Intelsat 31.5W' elif orbpos == 3255: orb_pos = 'Intelsat 34.5W' elif orbpos == 3225: orb_pos = 'NSS/Telstar 37W' elif orbpos == 3195: orb_pos = 'SES 40.5W' elif orbpos == 3169: orb_pos = 'Intelsat 43.1W' elif orbpos == 3150: orb_pos = 'Intelsat 45W' elif orbpos == 3100: orb_pos = 'Intelsat 50W' elif orbpos == 3070: orb_pos = 'Intelsat 53W' elif orbpos == 3045: orb_pos = 'Intelsat 55.5W' elif orbpos == 3020: orb_pos = 'Intelsat 58W' elif orbpos == 2990: orb_pos = 'Amazonas' elif orbpos == 2985: orb_pos = 'Echostar 61.5W' elif orbpos == 2900: orb_pos = 'Star One' elif orbpos == 2880: orb_pos = 'AMC 72W' elif orbpos == 2830: orb_pos = 'Echostar/QuetzSat' elif orbpos == 2780: orb_pos = 'NIMIQ 82W' elif orbpos == 2690: orb_pos = 'NIMIQ 91W' elif orbpos == 2630: orb_pos = 'Galaxy 97W' elif orbpos == 2500: orb_pos = 'Echostar/DirectTV 110W' elif orbpos == 2410: orb_pos = 'Echostar/DirectTV 119W' elif orbpos == 2390: orb_pos = 'Echostar/Galaxy 121W' elif orbpos == 2310: orb_pos = 'Ciel' elif c_band: orb_pos = str((float(3600 - orbpos)) / 10.0) + "W C-band" else: orb_pos = str((float(3600 - orbpos)) / 10.0) + "W" elif orbpos > 0: if c_band: orbpos -= 1 if orbpos == 130: orb_pos = 'Hot Bird' elif orbpos == 192: orb_pos = 'Astra 1KR/1L/1M/1N' elif orbpos == 235: orb_pos = 'Astra 3' elif orbpos == 1100: orb_pos = 'BSat/NSAT' elif orbpos == 1105: orb_pos = 'ChinaSat' elif orbpos == 1130: orb_pos = 'KoreaSat' elif orbpos == 1440: orb_pos = 'SuperBird' elif orbpos == 1005: orb_pos = 'AsiaSat 100E' elif orbpos == 1030: orb_pos = 'Express 103E' elif orbpos == 1055: orb_pos = 'Asiasat 105E' elif orbpos == 1082: orb_pos = 'NSS/SES 108E' elif orbpos == 880: orb_pos = 'ST2' elif orbpos == 900: orb_pos = 'Yamal 90E' elif orbpos == 915: orb_pos = 'Mesat' elif orbpos == 950: orb_pos = 'NSS/SES 95E' elif orbpos == 765: orb_pos = 'Apstar' elif orbpos == 785: orb_pos = 'ThaiCom' elif orbpos == 800: orb_pos = 'Express 80E' elif orbpos == 830: orb_pos = 'Insat' elif orbpos == 851: orb_pos = 'Intelsat/Horizons' elif orbpos == 750: orb_pos = 'ABS' elif orbpos == 720: orb_pos = 'Intelsat 72E' elif orbpos == 705: orb_pos = 'Eutelsat 70.5E' elif orbpos == 685: orb_pos = 'Intelsat 68.5E' elif orbpos == 620: orb_pos = 'Intelsat 902' elif orbpos == 600: orb_pos = 'Intelsat 904' elif orbpos == 570: orb_pos = 'NSS 57E' elif orbpos == 530: orb_pos = 'Express 53E' elif orbpos == 490: orb_pos = 'Yamal 49E' elif orbpos == 480: orb_pos = 'Afghansat' elif orbpos == 450: orb_pos = 'Intelsat 45E' elif orbpos == 420: orb_pos = 'Turksat' elif orbpos == 400: orb_pos = 'Express 40E' elif orbpos == 390: orb_pos = 'Hellas Sat' elif orbpos == 380: orb_pos = 'Paksat' elif orbpos == 360: orb_pos = 'Eutelsat 36E' elif orbpos == 330: orb_pos = 'Eutelsat 33E' elif orbpos == 315: orb_pos = 'Astra 5' elif orbpos == 305: orb_pos = 'Arabsat 30.5E' elif orbpos == 282: orb_pos = 'Astra 2E/2F/2G' elif orbpos == 1222: orb_pos = 'AsiaSat 122E' elif orbpos == 1380: orb_pos = 'Telstar 18' elif orbpos == 260: orb_pos = 'Badr 4/5/6' elif orbpos == 255: orb_pos = 'Eutelsat 25.5E' elif orbpos == 215: orb_pos = 'Eutelsat 21.5E' elif orbpos == 200: orb_pos = 'Arabsat 20E' elif orbpos == 160: orb_pos = 'Eutelsat 16E' elif orbpos == 100: orb_pos = 'Eutelsat 10E' elif orbpos == 90: orb_pos = 'Eutelsat 9E' elif orbpos == 70: orb_pos = 'Eutelsat 7E' elif orbpos == 48: orb_pos = 'SES 5' elif orbpos == 30: orb_pos = 'Rascom/Eutelsat 3E' elif c_band: orb_pos = str((float(orbpos)) / 10.0) + "E C-band" else: orb_pos = str((float(orbpos)) / 10.0) + "E" return orb_pos def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) @cached def getText(self): service = self.source.service if service is None: return "" info = service and service.info() if not info: return "" if self.type == "CryptoInfo": self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createCryptoBar( info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace( self.current_source) + self.createCryptoSpecial(info) if self.type == "CryptoBar": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBar(info) else: return "" if self.type == "CryptoSeca": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSeca(info) else: return "" if self.type == "CryptoVia": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoVia(info) else: return "" if self.type == "CryptoIrdeto": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoIrdeto(info) else: return "" if self.type == "CryptoNDS": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNDS(info) else: return "" if self.type == "CryptoConax": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoConax(info) else: return "" if self.type == "CryptoCryptoW": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoCryptoW(info) else: return "" if self.type == "CryptoBeta": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBeta(info) else: return "" if self.type == "CryptoNagra": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNagra(info) else: return "" if self.type == "CryptoBiss": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBiss(info) else: return "" if self.type == "CryptoDre": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoDre(info) else: return "" if self.type == "CryptoSpecial": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSpecial(info) else: return "" if self.type == "ResolutionString": return self.createResolution(info) if self.type == "VideoCodec": return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll( config.usage.infobar_frontend_source.value == "settings") if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw if not feraw: feraw = info.getInfoObject(iServiceInformation.sTransponderData) fedata = ConvertToHumanReadable(feraw) else: fedata = self.fedata if self.type == "All": self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata,feraw) + addspace(self.createTransponderName(feraw)) + "\n"\ + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + "\n"\ + addspace(self.createPIDInfo(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata,feraw) + addspace(self.createTransponderName(feraw)) + "\n" \ + addspace(self.createCryptoBar(info)) + self.current_source + "\n" \ + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "PIDInfo": return self.createPIDInfo(info) if not feraw: return "" if self.type == "ServiceInfo": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) \ + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) + addspace(self.createTransponderName(feraw))\ + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "TransponderInfo2line": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createTransponderName(feraw)) + '\n'\ + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata))\ + addspace(self.createSymbolRate(fedata, feraw)) + self.createModulation(fedata) + '-' + addspace(self.createFEC(fedata, feraw)) if self.type == "TransponderInfo": return self.createTransponderInfo(fedata, feraw) if self.type == "TransponderFrequency": return self.createFrequency(feraw) if self.type == "TransponderSymbolRate": return self.createSymbolRate(fedata, feraw) if self.type == "TransponderPolarization": return self.createPolarization(fedata) if self.type == "TransponderFEC": return self.createFEC(fedata, feraw) if self.type == "TransponderModulation": return self.createModulation(fedata) if self.type == "OrbitalPosition": return self.createOrbPos(feraw) if self.type == "TunerType": return self.createTunerType(feraw) if self.type == "TunerSystem": return self.createTunerSystem(fedata) if self.type == "OrbitalPositionOrTunerSystem": return self.createOrbPosOrTunerSystem(fedata, feraw) if self.type == "TerrestrialChannelNumber": return self.createChannelNumber(fedata, feraw) return _("invalid type") text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if caid_entry[3] == request_caid: if request_selected: if int(caid_entry[0], 16) <= int(current_caid, 16) <= int( caid_entry[1], 16): return True else: # request available try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int( caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what)
class j00zekModPliExtraInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.ca_table = (('CryptoCaidSeca MediaguardAvailable', 'S', False), ('CryptoCaidViaccessAvailable', 'V', False), ('CryptoCaidIrdetoAvailable', 'I', False), ('CryptoCaidNDS VideoguardAvailable', 'ND', False), ('CryptoCaidConaxAvailable', 'CO', False), ('CryptoCaidCryptoWorksAvailable', 'CW', False), ('CryptoCaidPowerVUAvailable', 'PV', False), ('CryptoCaidBetaCryptAvailable', 'BC', False), ('CryptoCaidNagravisionAvailable', 'N', False), ('CryptoCaidBissAvailable', 'B', False), ('CryptoCaidDreCryptAvailable', 'DC', False), ('CryptoCaidBulCrypt1Available', 'B1', False), ('CryptoCaidBulCrypt2Available', 'B2', False), ('CryptoCaidDG-CryptAvailable', 'DG', False), ('CryptoCaidCryptoGuardAvailable', 'CG', False), ('CryptoCaidVerimatrixAvailable', 'VM', False), ('CryptoCaidTandbergAvailable', 'TB', False), ('CryptoCaidSeca MediaguardSelected', 'S', True), ('CryptoCaidViaccessSelected', 'V', True), ('CryptoCaidIrdetoSelected', 'I', True), ('CryptoCaidNDS VideoguardSelected', 'ND', True), ('CryptoCaidConaxSelected', 'CO', True), ('CryptoCaidCryptoWorksSelected', 'CW', True), ('CryptoCaidPowerVUSelected', 'PV', True), ('CryptoCaidBetaCryptSelected', 'BC', True), ('CryptoCaidNagravisionSelected', 'N', True), ('CryptoCaidBissSelected', 'B', True), ('CryptoCaidDreCryptSelected', 'DC', True), ('CryptoCaidBulCrypt1Selected', 'B1', True), ('CryptoCaidBulCrypt2Selected', 'B2', True), ('CryptoCaidDG-CryptSelected', 'DG', True), ('CryptoCaidCryptoGuardSelected', 'CG', True), ('CryptoCaidVerimatrixSelected', 'VM', True), ('CryptoCaidTandbergSelected', 'TB', True)) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None return def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = '' self.current_caid = '0' self.current_provid = '0' self.current_ecmpid = '0' def createCryptoBar(self, info): res = '' available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int( caid_entry[1], 16): color = '\\c0000??00' else: color = '\\c007?7?7?' try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int( caid_entry[1], 16): color = '\\c00????00' except: pass if color != '\\c007?7?7?' or caid_entry[4]: if res: res += ' ' res += color + caid_entry[3] res += '\\c00??????' return res def createCryptoSpecial(self, info): caid_name = 'FTA' try: for caid_entry in caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int( caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ':%04x:%04x:%04x:%04x' % ( int(self.current_caid, 16), int(self.current_provid, 16), info.getInfo( iServiceInformation.sSID), int(self.current_ecmpid, 16)) except: pass return '' def createResolution(self, info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return '' yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ('i', 'p', ' ')[info.getInfo(iServiceInformation.sProgressive)] fps = (info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000 if not fps: try: fps = (int(open('/proc/stb/vmpeg/0/framerate', 'r').read()) + 500) / 1000 except: pass gamma = ('SDR', 'HDR', 'HDR10', 'HLG', '')[info.getInfo(iServiceInformation.sGamma)] return '%sx%s%s%s %s' % (xres, yres, mode, fps, gamma) def createVideoCodec(self, info): return codec_data.get(info.getInfo(iServiceInformation.sVideoType), 'N/A') def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) tsid = info.getInfo(iServiceInformation.sTSID) onid = info.getInfo(iServiceInformation.sONID) if vpid < 0: vpid = 0 if apid < 0: apid = 0 if pcrpid < 0: pcrpid = 0 if sidpid < 0: sidpid = 0 if tsid < 0: tsid = 0 if onid < 0: onid = 0 return '%d-%d:%05d:%04d:%04d:%04d' % (onid, tsid, sidpid, vpid, apid, pcrpid) def createTransponderInfo(self, fedata, feraw, info): if not feraw: refstr = info.getInfoString(iServiceInformation.sServiceref) if '%3a//' in refstr.lower(): return refstr.split(':')[10].replace('%3a', ':').replace('%3A', ':') return '' if 'DVB-T' in feraw.get('tuner_type'): tmp = addspace(self.createChannelNumber(fedata, feraw)) + addspace( self.createFrequency(feraw)) + addspace( self.createPolarization(fedata)) else: tmp = addspace(self.createFrequency(feraw)) + addspace( self.createPolarization(fedata)) return addspace(self.createTunerSystem(fedata)) + tmp + addspace( self.createSymbolRate(fedata, feraw)) + addspace( self.createFEC(fedata, feraw)) + addspace( self.createModulation(fedata)) + addspace( self.createOrbPos(feraw)) + addspace( self.createMisPls(fedata)) def createFrequency(self, feraw): frequency = feraw.get('frequency') if frequency: if 'DVB-T' in feraw.get('tuner_type'): return str(int(frequency / 1000000.0 + 0.5)) else: return str(int(frequency / 1000 + 0.5)) return '' def createChannelNumber(self, fedata, feraw): return 'DVB-T' in feraw.get('tuner_type') and fedata.get( 'channel') or '' def createSymbolRate(self, fedata, feraw): if 'DVB-T' in feraw.get('tuner_type'): bandwidth = fedata.get('bandwidth') if bandwidth: return bandwidth else: symbolrate = fedata.get('symbol_rate') if symbolrate: return str(symbolrate / 1000) return '' def createPolarization(self, fedata): return fedata.get('polarization_abbreviation') or '' def createFEC(self, fedata, feraw): if 'DVB-T' in feraw.get('tuner_type'): code_rate_lp = fedata.get('code_rate_lp') code_rate_hp = fedata.get('code_rate_hp') guard_interval = fedata.get('guard_interval') if code_rate_lp and code_rate_hp and guard_interval: return code_rate_lp + '-' + code_rate_hp + '-' + guard_interval else: fec = fedata.get('fec_inner') if fec: return fec return '' def createModulation(self, fedata): if fedata.get('tuner_type') == _('Terrestrial'): constellation = fedata.get('constellation') if constellation: return constellation else: modulation = fedata.get('modulation') if modulation: return modulation return '' def createTunerType(self, feraw): return feraw.get('tuner_type') or '' def createTunerSystem(self, fedata): return fedata.get('system') or '' def createOrbPos(self, feraw): orbpos = feraw.get('orbital_position') if orbpos > 1800: return str(float(3600 - orbpos) / 10.0) + '\xc2\xb0 W' if orbpos > 0: return str(float(orbpos) / 10.0) + '\xc2\xb0 E' return '' def createOrbPosOrTunerSystem(self, fedata, feraw): orbpos = self.createOrbPos(feraw) if orbpos is not '': return orbpos return self.createTunerSystem(fedata) def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) def createMisPls(self, fedata): tmp = '' if fedata.get('is_id') > -1: tmp = 'MIS %d' % fedata.get('is_id') if fedata.get('pls_code') > 0: tmp = addspace(tmp) + '%s %d' % (fedata.get('pls_mode'), fedata.get('pls_code')) if fedata.get('t2mi_plp_id') > -1: tmp = addspace(tmp) + 'T2MI %d PID %d' % ( fedata.get('t2mi_plp_id'), fedata.get('t2mi_pid')) return tmp @cached def getText(self): try: self.showCryptoinfo = config.usage.show_cryptoinfo.value except Exception: self.showCryptoinfo = True try: self.infobarFrontendSource = config.usage.infobar_frontend_source.value except Exception: self.infobarFrontendSource = "settings" service = self.source.service if service is None: return '' info = service and service.info() if not info: return '' if self.type == 'CryptoInfo': self.getCryptoInfo(info) if self.showCryptoinfo: return addspace(self.createCryptoBar( info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace( self.current_source) + self.createCryptoSpecial(info) if self.type == 'CryptoBar': self.getCryptoInfo(info) return self.createCryptoBar(info) elif self.type == 'CryptoSpecial': self.getCryptoInfo(info) return self.createCryptoSpecial(info) elif self.type == 'ResolutionString': return self.createResolution(info) elif self.type == 'VideoCodec': return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll( self.infobarFrontendSource == 'settings') if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw if not feraw: feraw = info.getInfoObject(iServiceInformation.sTransponderData) fedata = ConvertToHumanReadable(feraw) else: fedata = self.fedata if self.type == 'All': self.getCryptoInfo(info) if self.showCryptoinfo: return addspace( self.createProviderName(info) ) + self.createTransponderInfo( fedata, feraw, info) + '\n' + addspace( self.createCryptoBar(info)) + addspace( self.createCryptoSpecial(info)) + '\n' + addspace( self.createPIDInfo(info)) + addspace( self.createVideoCodec( info)) + self.createResolution(info) else: return addspace(self.createProviderName( info)) + self.createTransponderInfo( fedata, feraw, info) + '\n' + addspace(self.createCryptoBar( info)) + self.current_source + '\n' + addspace( self.createCryptoSpecial(info)) + addspace( self.createVideoCodec( info)) + self.createResolution(info) if self.type == 'PIDInfo': return self.createPIDInfo(info) elif not feraw: return '' elif self.type == 'ServiceInfo': return addspace(self.createProviderName(info)) + addspace( self.createTunerSystem(fedata)) + addspace( self.createFrequency(feraw)) + addspace( self.createPolarization(fedata)) + addspace( self.createSymbolRate(fedata, feraw)) + addspace( self.createFEC(fedata, feraw)) + addspace( self.createModulation(fedata)) + addspace( self.createOrbPos(feraw)) + addspace( self.createVideoCodec(info) ) + self.createResolution(info) elif self.type == 'TransponderInfo': return self.createTransponderInfo(fedata, feraw, info) elif self.type == 'TransponderFrequency': return self.createFrequency(feraw) elif self.type == 'TransponderSymbolRate': return self.createSymbolRate(fedata, feraw) elif self.type == 'TransponderPolarization': return self.createPolarization(fedata) elif self.type == 'TransponderFEC': return self.createFEC(fedata, feraw) elif self.type == 'TransponderModulation': return self.createModulation(fedata) elif self.type == 'OrbitalPosition': return self.createOrbPos(feraw) elif self.type == 'TunerType': return self.createTunerType(feraw) elif self.type == 'TunerSystem': return self.createTunerSystem(fedata) elif self.type == 'OrbitalPositionOrTunerSystem': return self.createOrbPosOrTunerSystem(fedata, feraw) elif self.type == 'TerrestrialChannelNumber': return self.createChannelNumber(fedata, feraw) else: return _('invalid type') text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False else: request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in caid_data: if caid_entry[3] == request_caid: if request_selected: if int(caid_entry[0], 16) <= int( current_caid, 16) <= int(caid_entry[1], 16): return True else: try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int( caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what) return
class PliExtraInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.ca_table = ( ("CryptoCaidSecaAvailable", "S", False), ("CryptoCaidViaAvailable", "V", False), ("CryptoCaidIrdetoAvailable", "I", False), ("CryptoCaidNDSAvailable", "Nd", False), ("CryptoCaidConaxAvailable", "Co", False), ("CryptoCaidCryptoWAvailable", "Cw", False), ("CryptoCaidPowerVUAvailable", "P", False), ("CryptoCaidBetaAvailable", "B", False), ("CryptoCaidNagraAvailable", "N", False), ("CryptoCaidBissAvailable", "Bi", False), ("CryptoCaidDreAvailable", "D", False), ("CryptoCaidBulCrypt1Available", "B1", False), ("CryptoCaidBulCrypt2Available", "B2", False), ("CryptoCaidTandbergAvailable", "TB", False), ("CryptoCaidSecaSelected", "S", True), ("CryptoCaidViaSelected", "V", True), ("CryptoCaidIrdetoSelected", "I", True), ("CryptoCaidNDSSelected", "Nd", True), ("CryptoCaidConaxSelected", "Co", True), ("CryptoCaidCryptoWSelected", "Cw", True), ("CryptoCaidPowerVUSelected", "P", True), ("CryptoCaidBetaSelected", "B", True), ("CryptoCaidNagraSelected", "N", True), ("CryptoCaidBissSelected", "Bi", True), ("CryptoCaidDreSelected", "D", True), ("CryptoCaidBulCrypt1Selected", "B1", True), ("CryptoCaidBulCrypt2Selected", "B2", True), ("CryptoCaidTandbergSelected", "TB", True), ) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = "" self.current_caid = "0" self.current_provid = "0" self.current_ecmpid = "0" def createCryptoBar(self, info): res = "" available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int( caid_entry[1], 16): color = "\c0000??00" else: color = "\c007?7?7?" try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int( caid_entry[1], 16): color = "\c00????00" except: pass if color != "\c007?7?7?" or caid_entry[4]: if res: res += " " res += color + caid_entry[3] res += "\c00??????" return res def createCryptoSpecial(self, info): caid_name = "FTA" try: for caid_entry in caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int( caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ":%04x:%04x:%04x:%04x" % ( int(self.current_caid, 16), int(self.current_provid, 16), info.getInfo( iServiceInformation.sSID), int(self.current_ecmpid, 16)) except: pass return "" def createResolution(self, info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return "" yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ("i", "p", " ")[info.getInfo(iServiceInformation.sProgressive)] fps = str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) return str(xres) + "x" + str(yres) + mode + fps def createVideoCodec(self, info): return codec_data.get(info.getInfo(iServiceInformation.sVideoType), "N/A") def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) tsid = info.getInfo(iServiceInformation.sTSID) onid = info.getInfo(iServiceInformation.sONID) if vpid < 0: vpid = 0 if apid < 0: apid = 0 if pcrpid < 0: pcrpid = 0 if sidpid < 0: sidpid = 0 if tsid < 0: tsid = 0 if onid < 0: onid = 0 return "%d-%d:%05d:%04d:%04d:%04d" % (onid, tsid, sidpid, vpid, apid, pcrpid) def createTransponderInfo(self, fedata, feraw, info): if not feraw: refstr = info.getInfoString(iServiceInformation.sServiceref) if "%3a//" in refstr.lower(): return refstr.split(":")[10].replace("%3a", ":").replace("%3A", ":") return "" elif "DVB-T" in feraw.get("tuner_type"): tmp = addspace(self.createChannelNumber(fedata, feraw)) + addspace( self.createFrequency(feraw)) + addspace( self.createPolarization(fedata)) else: tmp = addspace(self.createFrequency(feraw)) + addspace( self.createPolarization(fedata)) return addspace(self.createTunerSystem(fedata)) + tmp + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) \ + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) + addspace(self.createMisPls(fedata)) def createFrequency(self, feraw): frequency = feraw.get("frequency") if frequency: if "DVB-T" in feraw.get("tuner_type"): return str(int(frequency / 1000000. + 0.5)) else: return str(int(frequency / 1000 + 0.5)) return "" def createChannelNumber(self, fedata, feraw): return "DVB-T" in feraw.get("tuner_type") and fedata.get( "channel") or "" def createSymbolRate(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): bandwidth = fedata.get("bandwidth") if bandwidth: return bandwidth else: symbolrate = fedata.get("symbol_rate") if symbolrate: return str(symbolrate / 1000) return "" def createPolarization(self, fedata): return fedata.get("polarization_abbreviation") or "" def createFEC(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): code_rate_lp = fedata.get("code_rate_lp") code_rate_hp = fedata.get("code_rate_hp") if code_rate_lp and code_rate_hp: return code_rate_lp + "-" + code_rate_hp else: fec = fedata.get("fec_inner") if fec: return fec return "" def createModulation(self, fedata): if fedata.get("tuner_type") == _("Terrestrial"): constellation = fedata.get("constellation") if constellation: return constellation else: modulation = fedata.get("modulation") if modulation: return modulation return "" def createTunerType(self, feraw): return feraw.get("tuner_type") or "" def createTunerSystem(self, fedata): return fedata.get("system") or "" def createOrbPos(self, feraw): orbpos = feraw.get("orbital_position") if orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "\xc2\xb0 W" elif orbpos > 0: return str((float(orbpos)) / 10.0) + "\xc2\xb0 E" return "" def createOrbPosOrTunerSystem(self, fedata, feraw): orbpos = self.createOrbPos(feraw) if orbpos is not "": return orbpos return self.createTunerSystem(fedata) def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) def createMisPls(self, fedata): tmp = "" if fedata.get("is_id") > -1: tmp = "MIS %d" % fedata.get("is_id") if fedata.get("pls_code") > 0: tmp = addspace(tmp) + "%s %d" % (fedata.get("pls_mode"), fedata.get("pls_code")) return tmp @cached def getText(self): service = self.source.service if service is None: return "" info = service and service.info() if not info: return "" if self.type == "CryptoInfo": self.getCryptoInfo(info) if config.usage.show_cryptoinfo.value: return addspace(self.createCryptoBar( info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace( self.current_source) + self.createCryptoSpecial(info) if self.type == "CryptoBar": self.getCryptoInfo(info) return self.createCryptoBar(info) if self.type == "CryptoSpecial": self.getCryptoInfo(info) return self.createCryptoSpecial(info) if self.type == "ResolutionString": return self.createResolution(info) if self.type == "VideoCodec": return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll( config.usage.infobar_frontend_source.value == "settings") if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw if not feraw: feraw = info.getInfoObject(iServiceInformation.sTransponderData) fedata = ConvertToHumanReadable(feraw) else: fedata = self.fedata if self.type == "All": self.getCryptoInfo(info) if config.usage.show_cryptoinfo.value: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw, info) + "\n" \ + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + "\n" \ + addspace(self.createPIDInfo(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw, info) + "\n" \ + addspace(self.createCryptoBar(info)) + self.current_source + "\n" \ + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "PIDInfo": return self.createPIDInfo(info) if not feraw: return "" if self.type == "ServiceInfo": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) \ + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) \ + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "TransponderInfo": return self.createTransponderInfo(fedata, feraw, info) if self.type == "TransponderFrequency": return self.createFrequency(feraw) if self.type == "TransponderSymbolRate": return self.createSymbolRate(fedata, feraw) if self.type == "TransponderPolarization": return self.createPolarization(fedata) if self.type == "TransponderFEC": return self.createFEC(fedata, feraw) if self.type == "TransponderModulation": return self.createModulation(fedata) if self.type == "OrbitalPosition": return self.createOrbPos(feraw) if self.type == "TunerType": return self.createTunerType(feraw) if self.type == "TunerSystem": return self.createTunerSystem(fedata) if self.type == "OrbitalPositionOrTunerSystem": return self.createOrbPosOrTunerSystem(fedata, feraw) if self.type == "TerrestrialChannelNumber": return self.createChannelNumber(fedata, feraw) return _("invalid type") text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in caid_data: if caid_entry[3] == request_caid: if request_selected: if int(caid_entry[0], 16) <= int(current_caid, 16) <= int( caid_entry[1], 16): return True else: # request available try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int( caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what)
class PliExtraInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.caid_data = ( ("0x100", "0x1ff", "Seca", "S", True), ("0x500", "0x5ff", "Via", "V", True), ("0x600", "0x6ff", "Irdeto", "I", True), ("0x900", "0x9ff", "NDS", "Nd", True), ("0xb00", "0xbff", "Conax", "Co", True), ("0xd00", "0xdff", "CryptoW", "Cw", True), ("0xe00", "0xeff", "PowerVU", "P", False), ("0x1700", "0x17ff", "Beta", "B", True), ("0x1800", "0x18ff", "Nagra", "N", True), ("0x2600", "0x2600", "Biss", "Bi", False), ("0x4ae0", "0x4ae1", "Dre", "D", False), ("0x4aee", "0x4aee", "BulCrypt", "B1", False), ("0x5581", "0x5581", "BulCrypt", "B2", False), ) self.ca_table = ( ("CryptoCaidSecaAvailable", "S", False), ("CryptoCaidViaAvailable", "V", False), ("CryptoCaidIrdetoAvailable", "I", False), ("CryptoCaidNDSAvailable", "Nd", False), ("CryptoCaidConaxAvailable", "Co", False), ("CryptoCaidCryptoWAvailable", "Cw", False), ("CryptoCaidPowerVUAvailable", "P", False), ("CryptoCaidBetaAvailable", "B", False), ("CryptoCaidNagraAvailable", "N", False), ("CryptoCaidBissAvailable", "Bi", False), ("CryptoCaidDreAvailable", "D", False), ("CryptoCaidBulCrypt1Available", "B1", False), ("CryptoCaidBulCrypt2Available", "B2", False), ("CryptoCaidSecaSelected", "S", True), ("CryptoCaidViaSelected", "V", True), ("CryptoCaidIrdetoSelected", "I", True), ("CryptoCaidNDSSelected", "Nd", True), ("CryptoCaidConaxSelected", "Co", True), ("CryptoCaidCryptoWSelected", "Cw", True), ("CryptoCaidPowerVUSelected", "P", True), ("CryptoCaidBetaSelected", "B", True), ("CryptoCaidNagraSelected", "N", True), ("CryptoCaidBissSelected", "Bi", True), ("CryptoCaidDreSelected", "D", True), ("CryptoCaidBulCrypt1Selected", "B1", True), ("CryptoCaidBulCrypt2Selected", "B2", True), ) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = "" self.current_caid = "0" self.current_provid = "0" self.current_ecmpid = "0" def createCryptoBar(self, info): res = "" available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int(self.current_caid, 16) <= int( caid_entry[1], 16 ): color = "\c0000??00" else: color = "\c007?7?7?" try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int(caid_entry[1], 16): color = "\c00????00" except: pass if color != "\c007?7?7?" or caid_entry[4]: if res: res += " " res += color + caid_entry[3] res += "\c00??????" return res def createCryptoSeca(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int("0x100", 16) and int(self.current_caid, 16) <= int("0x1ff", 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int("0x100", 16) and caid <= int("0x1ff", 16): color = "\c00eeee00" except: pass res = color + "S" res += "\c00??????" return res def createCryptoVia(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int("0x500", 16) and int(self.current_caid, 16) <= int("0x5ff", 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int("0x500", 16) and caid <= int("0x5ff", 16): color = "\c00eeee00" except: pass res = color + "V" res += "\c00??????" return res def createCryptoIrdeto(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int("0x600", 16) and int(self.current_caid, 16) <= int("0x6ff", 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int("0x600", 16) and caid <= int("0x6ff", 16): color = "\c00eeee00" except: pass res = color + "I" res += "\c00??????" return res def createCryptoNDS(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int("0x900", 16) and int(self.current_caid, 16) <= int("0x9ff", 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int("0x900", 16) and caid <= int("0x9ff", 16): color = "\c00eeee00" except: pass res = color + "NDS" res += "\c00??????" return res def createCryptoConax(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int("0xb00", 16) and int(self.current_caid, 16) <= int("0xbff", 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int("0xb00", 16) and caid <= int("0xbff", 16): color = "\c00eeee00" except: pass res = color + "CO" res += "\c00??????" return res def createCryptoCryptoW(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int("0xd00", 16) and int(self.current_caid, 16) <= int("0xdff", 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int("0xd00", 16) and caid <= int("0xdff", 16): color = "\c00eeee00" except: pass res = color + "CW" res += "\c00??????" return res def createCryptoPowerVU(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int("0xe00", 16) and int(self.current_caid, 16) <= int("0xeff", 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int("0xe00", 16) and caid <= int("0xeff", 16): color = "\c00eeee00" except: pass res = color + "P" res += "\c00??????" return res def createCryptoBeta(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int("0x1700", 16) and int(self.current_caid, 16) <= int("0x17ff", 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int("0x1700", 16) and caid <= int("0x17ff", 16): color = "\c00eeee00" except: pass res = color + "B" res += "\c00??????" return res def createCryptoNagra(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int("0x1800", 16) and int(self.current_caid, 16) <= int("0x18ff", 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int("0x1800", 16) and caid <= int("0x18ff", 16): color = "\c00eeee00" except: pass res = color + "N" res += "\c00??????" return res def createCryptoBiss(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int("0x2600", 16) and int(self.current_caid, 16) <= int("0x26ff", 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int("0x2600", 16) and caid <= int("0x26ff", 16): color = "\c00eeee00" except: pass res = color + "BI" res += "\c00??????" return res def createCryptoDre(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int("0x4ae0", 16) and int(self.current_caid, 16) <= int("0x4ae1", 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int("0x4ae0", 16) and caid <= int("0x4ae1", 16): color = "\c00eeee00" except: pass res = color + "DC" res += "\c00??????" return res def createCryptoSpecial(self, info): caid_name = "FTA" try: for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int(self.current_caid, 16) <= int( caid_entry[1], 16 ): caid_name = caid_entry[2] break return caid_name + ":%04x:%04x:%04x:%04x" % ( int(self.current_caid, 16), int(self.current_provid, 16), info.getInfo(iServiceInformation.sSID), int(self.current_ecmpid, 16), ) except: pass return "" def createResolution(self, info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return "" yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ("i", "p", "")[info.getInfo(iServiceInformation.sProgressive)] fps = str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) return str(xres) + "x" + str(yres) + mode + fps def createVideoCodec(self, info): return ("MPEG2", "MPEG4", "MPEG1", "MPEG4-II", "VC1", "VC1-SM", "")[ info.getInfo(iServiceInformation.sVideoType) ] def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) if vpid < 0: vpid = 0 if apid < 0: apid = 0 if pcrpid < 0: pcrpid = 0 if sidpid < 0: sidpid = 0 return "Pids:%04d:%04d:%04d:%05d" % (vpid, apid, pcrpid, sidpid) def createTransponderInfo(self, fedata, feraw): return ( addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata)) + addspace(self.createSymbolRate(fedata)) + addspace(self.createFEC(fedata)) + addspace(self.createModulation(fedata)) + self.createOrbPos(feraw) ) def createFrequency(self, fedata): frequency = fedata.get("frequency") if frequency: return str(frequency / 1000) return "" def createSymbolRate(self, fedata): symbolrate = fedata.get("symbol_rate") if symbolrate: return str(symbolrate / 1000) return "" def createPolarization(self, fedata): polarization = fedata.get("polarization_abbreviation") if polarization: return polarization return "" def createFEC(self, fedata): fec = fedata.get("fec_inner") if fec: return fec return "" def createModulation(self, fedata): modulation = fedata.get("modulation") if modulation: return modulation return "" def createTunerType(self, feraw): tunertype = feraw.get("tuner_type") if tunertype: return tunertype return "" def createTunerSystem(self, fedata): tunersystem = fedata.get("system") if tunersystem: return tunersystem return "" def createOrbPos(self, feraw): orbpos = feraw.get("orbital_position") if orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "\xc2\xb0 W" elif orbpos > 0: return str((float(orbpos)) / 10.0) + "\xc2\xb0 E" return "" def createOrbPosOrTunerSystem(self, fedata, feraw): orbpos = self.createOrbPos(feraw) if orbpos is not "": return orbpos return self.createTunerSystem(fedata) def createTransponderName(self, feraw): orb_pos = "" orbpos = feraw.get("orbital_position") if orbpos > 1800: if orbpos == 3590: orb_pos = "Thor/Intelsat" elif orbpos == 3560: orb_pos = "Amos (4" elif orbpos == 3550: orb_pos = "Atlantic Bird" elif orbpos == 3530: orb_pos = "Nilesat/Atlantic Bird" elif orbpos == 3520: orb_pos = "Atlantic Bird" elif orbpos == 3475: orb_pos = "Atlantic Bird" elif orbpos == 3460: orb_pos = "Express" elif orbpos == 3450: orb_pos = "Telstar" elif orbpos == 3420: orb_pos = "Intelsat" elif orbpos == 3380: orb_pos = "Nss" elif orbpos == 3355: orb_pos = "Intelsat" elif orbpos == 3325: orb_pos = "Intelsat" elif orbpos == 3300: orb_pos = "Hispasat" elif orbpos == 3285: orb_pos = "Intelsat" elif orbpos == 3170: orb_pos = "Intelsat" elif orbpos == 3150: orb_pos = "Intelsat" elif orbpos == 3070: orb_pos = "Intelsat" elif orbpos == 3045: orb_pos = "Intelsat" elif orbpos == 3020: orb_pos = "Intelsat 9" elif orbpos == 2990: orb_pos = "Amazonas" elif orbpos == 2900: orb_pos = "Star One" elif orbpos == 2880: orb_pos = "AMC 6 (72" elif orbpos == 2875: orb_pos = "Echostar 6" elif orbpos == 2860: orb_pos = "Horizons" elif orbpos == 2810: orb_pos = "AMC5" elif orbpos == 2780: orb_pos = "NIMIQ 4" elif orbpos == 2690: orb_pos = "NIMIQ 1" elif orbpos == 3592: orb_pos = "Thor/Intelsat" elif orbpos == 2985: orb_pos = "Echostar 3,12" elif orbpos == 2830: orb_pos = "Echostar 8" elif orbpos == 2630: orb_pos = "Galaxy 19" elif orbpos == 2500: orb_pos = "Echostar 10,11" elif orbpos == 2502: orb_pos = "DirectTV 5" elif orbpos == 2410: orb_pos = "Echostar 7 Anik F3" elif orbpos == 2391: orb_pos = "Galaxy 23" elif orbpos == 2390: orb_pos = "Echostar 9" elif orbpos == 2412: orb_pos = "DirectTV 7S" elif orbpos == 2310: orb_pos = "Galaxy 27" elif orbpos == 2311: orb_pos = "Ciel 2" elif orbpos == 2120: orb_pos = "Echostar 2" else: orb_pos = str((float(3600 - orbpos)) / 10.0) + "W" elif orbpos > 0: if orbpos == 192: orb_pos = "Astra 1F" elif orbpos == 130: orb_pos = "Hot Bird 6,7A,8" elif orbpos == 235: orb_pos = "Astra 1E" elif orbpos == 1100: orb_pos = "BSat 1A,2A" elif orbpos == 1101: orb_pos = "N-Sat 110" elif orbpos == 1131: orb_pos = "KoreaSat 5" elif orbpos == 1440: orb_pos = "SuperBird 7,C2" elif orbpos == 1006: orb_pos = "AsiaSat 2" elif orbpos == 1030: orb_pos = "Express A2" elif orbpos == 1056: orb_pos = "Asiasat 3S" elif orbpos == 1082: orb_pos = "NSS 11" elif orbpos == 881: orb_pos = "ST1" elif orbpos == 900: orb_pos = "Yamal 201" elif orbpos == 917: orb_pos = "Mesat" elif orbpos == 950: orb_pos = "Insat 4B" elif orbpos == 951: orb_pos = "NSS 6" elif orbpos == 765: orb_pos = "Telestar" elif orbpos == 785: orb_pos = "ThaiCom 5" elif orbpos == 800: orb_pos = "Express" elif orbpos == 830: orb_pos = "Insat 4A" elif orbpos == 850: orb_pos = "Intelsat 709" elif orbpos == 750: orb_pos = "Abs" elif orbpos == 720: orb_pos = "Intelsat" elif orbpos == 705: orb_pos = "Eutelsat W5" elif orbpos == 685: orb_pos = "Intelsat" elif orbpos == 620: orb_pos = "Intelsat 902" elif orbpos == 600: orb_pos = "Intelsat 904" elif orbpos == 570: orb_pos = "Nss" elif orbpos == 530: orb_pos = "Express AM22" elif orbpos == 480: orb_pos = "Eutelsat 2F2" elif orbpos == 450: orb_pos = "Intelsat" elif orbpos == 420: orb_pos = "Turksat 2A" elif orbpos == 400: orb_pos = "Express AM1" elif orbpos == 390: orb_pos = "Hellas Sat 2" elif orbpos == 380: orb_pos = "Paksat 1" elif orbpos == 360: orb_pos = "Eutelsat Sesat" elif orbpos == 335: orb_pos = "Astra 1M" elif orbpos == 330: orb_pos = "Eurobird 3" elif orbpos == 328: orb_pos = "Galaxy 11" elif orbpos == 315: orb_pos = "Astra 5A" elif orbpos == 310: orb_pos = "Turksat" elif orbpos == 305: orb_pos = "Arabsat" elif orbpos == 285: orb_pos = "Eurobird 1" elif orbpos == 284: orb_pos = "Eurobird/Astra" elif orbpos == 282: orb_pos = "Eurobird/Astra" elif orbpos == 1220: orb_pos = "AsiaSat" elif orbpos == 1380: orb_pos = "Telstar 18" elif orbpos == 260: orb_pos = "Badr 3/4" elif orbpos == 255: orb_pos = "Eurobird 2" elif orbpos == 215: orb_pos = "Eutelsat" elif orbpos == 216: orb_pos = "Eutelsat W6" elif orbpos == 210: orb_pos = "AfriStar 1" elif orbpos == 160: orb_pos = "Eutelsat W2" elif orbpos == 100: orb_pos = "Eutelsat W1" elif orbpos == 90: orb_pos = "Eurobird 9" elif orbpos == 70: orb_pos = "Eutelsat W3A" elif orbpos == 50: orb_pos = "Sirius 4" elif orbpos == 48: orb_pos = "Sirius 4" elif orbpos == 30: orb_pos = "Telecom 2" else: orb_pos = str((float(orbpos)) / 10.0) + "E" return orb_pos def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) @cached def getText(self): service = self.source.service if service is None: return "" info = service and service.info() if not info: return "" if self.type == "CryptoInfo": self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.getValue()) > 0: return addspace(self.createCryptoBar(info)) + self.createCryptoSpecial(info) else: return ( addspace(self.createCryptoBar(info)) + addspace(self.current_source) + self.createCryptoSpecial(info) ) if self.type == "CryptoBar": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoBar(info) else: return "" if self.type == "CryptoSeca": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoSeca(info) else: return "" if self.type == "CryptoVia": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoVia(info) else: return "" if self.type == "CryptoIrdeto": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoIrdeto(info) else: return "" if self.type == "CryptoNDS": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoNDS(info) else: return "" if self.type == "CryptoConax": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoConax(info) else: return "" if self.type == "CryptoCryptoW": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoCryptoW(info) else: return "" if self.type == "CryptoBeta": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoBeta(info) else: return "" if self.type == "CryptoNagra": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoNagra(info) else: return "" if self.type == "CryptoBiss": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoBiss(info) else: return "" if self.type == "CryptoDre": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoDre(info) else: return "" if self.type == "CryptoSpecial": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoSpecial(info) else: return "" if self.type == "ResolutionString": return self.createResolution(info) if self.type == "VideoCodec": return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll(True) if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw fedata = self.fedata if not feraw or not fedata: return "" if self.type == "All": self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.getValue()) > 0: return ( addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw) + "\n" + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + "\n" + addspace(self.createPIDInfo(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) ) else: return ( addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw) + "\n" + addspace(self.createCryptoBar(info)) + self.current_source + "\n" + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) ) if self.type == "ServiceInfo": return ( addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata)) + addspace(self.createSymbolRate(fedata)) + addspace(self.createFEC(fedata)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) ) if self.type == "TransponderInfo2line": return ( addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createTransponderName(feraw)) + "\n" + self.createFrequency(fedata) + addspace(" MHz") + addspace(self.createPolarization(fedata)) + addspace(self.createSymbolRate(fedata)) + self.createModulation(fedata) + "-" + addspace(self.createFEC(fedata)) ) if self.type == "TransponderInfo": return self.createTransponderInfo(fedata, feraw) if self.type == "TransponderFrequency": return self.createFrequency(fedata) if self.type == "TransponderSymbolRate": return self.createSymbolRate(fedata) if self.type == "TransponderPolarization": return self.createPolarization(fedata) if self.type == "TransponderFEC": return self.createFEC(fedata) if self.type == "TransponderModulation": return self.createModulation(fedata) if self.type == "OrbitalPosition": return self.createOrbPos(feraw) if self.type == "TunerType": return self.createTunerType(feraw) if self.type == "TunerSystem": return self.createTunerSystem(fedata) if self.type == "OrbitalPositionOrTunerSystem": return self.createOrbPosOrTunerSystem(fedata, feraw) if self.type == "PIDInfo": return self.createPIDInfo(info) return _("invalid type") text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if caid_entry[3] == request_caid: if request_selected: if int(current_caid, 16) >= int(caid_entry[0], 16) and int(current_caid, 16) <= int( caid_entry[1], 16 ): return True else: # request available try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int(caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what)
class PliExtraInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.ca_table = ( ("CryptoCaidDvnAvailable", "TB", False), ("CryptoCaidSmsxAvailable", "SM", False), ("CryptoCaidTongfangAvailable", "TF", False), ("CryptoCaidSecaAvailable", "S", False), ("CryptoCaidViaAvailable", "V", False), ("CryptoCaidIrdetoAvailable", "I", False), ("CryptoCaidNDSAvailable", "Nd", False), ("CryptoCaidConaxAvailable", "Co", False), ("CryptoCaidCryptoWAvailable", "Cw", False), ("CryptoCaidPowerVUAvailable", "P", False), ("CryptoCaidBetaAvailable", "B", False), ("CryptoCaidNagraAvailable", "N", False), ("CryptoCaidBissAvailable", "Bi", False), ("CryptoCaidDre3Available", "D3", False), ("CryptoCaidDreAvailable", "D", False), ("CryptoCaidBulCrypt1Available", "B1", False), ("CryptoCaidBulCrypt2Available", "B2", False), ("CryptoCaidVerimatrixAvailable", "Vm", False), ("CryptoCaidTandbergAvailable", "T", False), ("CryptoCaidDvnSelected", "TB", True), ("CryptoCaidSmsxSelected", "SM", True), ("CryptoCaidTongfangSelected", "TF", True), ("CryptoCaidSecaSelected", "S", True), ("CryptoCaidViaSelected", "V", True), ("CryptoCaidIrdetoSelected", "I", True), ("CryptoCaidNDSSelected", "Nd", True), ("CryptoCaidConaxSelected", "Co", True), ("CryptoCaidCryptoWSelected", "Cw", True), ("CryptoCaidPowerVUSelected", "P", True), ("CryptoCaidBetaSelected", "B", True), ("CryptoCaidNagraSelected", "N", True), ("CryptoCaidBissSelected", "Bi", True), ("CryptoCaidDre3Selected", "D3", True), ("CryptoCaidDreSelected", "D", True), ("CryptoCaidBulCrypt1Selected", "B1", True), ("CryptoCaidBulCrypt2Selected", "B2", True), ("CryptoCaidVerimatrixSelected", "Vm", True), ("CryptoCaidTandbergSelected", "T", True), ) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = "" self.current_caid = "0" self.current_provid = "0" self.current_ecmpid = "0" def createCryptoBar(self, info): res = "" available_caids = info.getInfoObject(iServiceInformation.sCAIDs) colors = parameters.get("PliExtraInfoColors", ( 0x0000FF00, 0x00FFFF00, 0x007F7F7F, 0x00FFFFFF)) # "found", "not found", "available", "default" colors for caid_entry in caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int( caid_entry[1], 16): color = Hex2strColor(colors[0]) # green else: color = Hex2strColor(colors[2]) # grey try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int( caid_entry[1], 16): color = Hex2strColor(colors[1]) # yellow except: pass if color != Hex2strColor(colors[2]) or caid_entry[4]: if res: res += " " res += color + caid_entry[3] res += Hex2strColor( colors[3] ) # white (this acts like a color "reset" for following strings return res def createCryptoSeca(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x100', 16) <= int(self.current_caid, 16) <= int('0x1ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x100', 16) <= caid <= int('0x1ff', 16): color = "\c00eeee00" except: pass res = color + 'S' res += "\c00??????" return res def createCryptoVia(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x500', 16) <= int(self.current_caid, 16) <= int('0x5ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x500', 16) <= caid <= int('0x5ff', 16): color = "\c00eeee00" except: pass res = color + 'V' res += "\c00??????" return res def createCryptoIrdeto(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x600', 16) <= int(self.current_caid, 16) <= int('0x6ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x600', 16) <= caid <= int('0x6ff', 16): color = "\c00eeee00" except: pass res = color + 'I' res += "\c00??????" return res def createCryptoNDS(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x900', 16) <= int(self.current_caid, 16) <= int('0x9ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x900', 16) <= caid <= int('0x9ff', 16): color = "\c00eeee00" except: pass res = color + 'NDS' res += "\c00??????" return res def createCryptoConax(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xb00', 16) <= int(self.current_caid, 16) <= int('0xbff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xb00', 16) <= caid <= int('0xbff', 16): color = "\c00eeee00" except: pass res = color + 'CO' res += "\c00??????" return res def createCryptoCryptoW(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xd00', 16) <= int(self.current_caid, 16) <= int('0xdff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xd00', 16) <= caid <= int('0xdff', 16): color = "\c00eeee00" except: pass res = color + 'CW' res += "\c00??????" return res def createCryptoPowerVU(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xe00', 16) <= int(self.current_caid, 16) <= int('0xeff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xe00', 16) <= caid <= int('0xeff', 16): color = "\c00eeee00" except: pass res = color + 'P' res += "\c00??????" return res def createCryptoTandberg(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1010', 16) <= int(self.current_caid, 16) <= int( '0x1010', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x1010', 16) <= caid <= int('0x1010', 16): color = "\c00eeee00" except: pass res = color + 'T' res += "\c00??????" return res def createCryptoBeta(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1700', 16) <= int(self.current_caid, 16) <= int( '0x17ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x1700', 16) <= caid <= int('0x17ff', 16): color = "\c00eeee00" except: pass res = color + 'B' res += "\c00??????" return res def createCryptoNagra(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1800', 16) <= int(self.current_caid, 16) <= int( '0x18ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x1800', 16) <= caid <= int('0x18ff', 16): color = "\c00eeee00" except: pass res = color + 'N' res += "\c00??????" return res def createCryptoBiss(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x2600', 16) <= int(self.current_caid, 16) <= int( '0x26ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x2600', 16) <= caid <= int('0x26ff', 16): color = "\c00eeee00" except: pass res = color + 'BI' res += "\c00??????" return res def createCryptoDre(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x4ae0', 16) <= int(self.current_caid, 16) <= int( '0x4ae1', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x4ae0', 16) <= caid <= int('0x4ae1', 16): color = "\c00eeee00" except: pass res = color + 'DC' res += "\c00??????" return res def createCryptoSpecial(self, info): caid_system = _("CA System: ") caid_name = _("FTA") if int(self.current_caid, 16) == 0: return caid_system + caid_name try: for caid_entry in caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int( caid_entry[1], 16): caid_name = caid_entry[2] break caid_num = "%04x" % (int(self.current_caid, 16)) caid_num = caid_num.upper() return caid_system + caid_name + "@" + caid_num except: pass return "" def createCryptoNameCaid(self, info): caid_name = "FTA" if int(self.current_caid, 16) == 0: return caid_name try: for caid_entry in self.caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int( caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ":%04x" % (int(self.current_caid, 16)) except: pass return "" def createResolution(self, info): video_height = 0 video_width = 0 video_pol = " " video_rate = 0 fps = 0 if path.exists("/proc/stb/vmpeg/0/yres"): f = open("/proc/stb/vmpeg/0/yres", "r") try: video_height = int(f.read(), 16) except: pass f.close() if path.exists("/proc/stb/vmpeg/0/xres"): f = open("/proc/stb/vmpeg/0/xres", "r") try: video_width = int(f.read(), 16) except: pass f.close() if path.exists("/proc/stb/vmpeg/0/progressive"): f = open("/proc/stb/vmpeg/0/progressive", "r") try: video_pol = "p" if int(f.read(), 16) else "i" except: pass f.close() fps = (info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000 if not fps and path.exists("/proc/stb/vmpeg/0/fallback_framerate"): fps = ( int(open("/proc/stb/vmpeg/0/fallback_framerate", "r").read()) + 0) / 1000 if not fps and path.exists("/proc/stb/vmpeg/0/framerate"): fps = (int(open("/proc/stb/vmpeg/0/framerate", "r").read()) + 500) / 1000 gamma = ("SDR", "HDR", "HDR10", "HLG", "")[info.getInfo(iServiceInformation.sGamma)] return str(video_width) + "x" + str(video_height) + video_pol + str( fps) + addspace(gamma) def createVideoCodec(self, info): return codec_data.get(info.getInfo(iServiceInformation.sVideoType), _("N/A")) def createServiceRef(self, info): return info.getInfoString(iServiceInformation.sServiceref) def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) tsid = info.getInfo(iServiceInformation.sTSID) onid = info.getInfo(iServiceInformation.sONID) if vpid < 0: vpid = 0 if apid < 0: apid = 0 if pcrpid < 0: pcrpid = 0 if sidpid < 0: sidpid = 0 if tsid < 0: tsid = 0 if onid < 0: onid = 0 return "%d-%d:%05d:%04d:%04d:%04d" % (onid, tsid, sidpid, vpid, apid, pcrpid) def createTransponderInfo(self, fedata, feraw, info): if not feraw: refstr = info.getInfoString(iServiceInformation.sServiceref) if "%3a//" in refstr.lower(): return refstr.split(":")[10].replace("%3a", ":").replace("%3A", ":") return "" elif "DVB-T" in feraw.get("tuner_type"): tmp = addspace(self.createChannelNumber(fedata, feraw)) + addspace( self.createFrequency(fedata)) + addspace( self.createPolarization(fedata)) else: tmp = addspace(self.createFrequency(fedata)) + addspace( self.createPolarization(fedata)) return addspace(self.createTunerSystem(fedata)) + tmp + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) \ + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) + addspace(self.createMisPls(fedata)) def createFrequency(self, fedata): frequency = fedata.get("frequency") if frequency: return str(frequency) return "" def createChannelNumber(self, fedata, feraw): return "DVB-T" in feraw.get("tuner_type") and fedata.get( "channel") or "" def createSymbolRate(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): bandwidth = fedata.get("bandwidth") if bandwidth: return bandwidth else: symbolrate = fedata.get("symbol_rate") if symbolrate: return str(symbolrate) return "" def createPolarization(self, fedata): return fedata.get("polarization_abbreviation") or "" def createFEC(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): code_rate_lp = fedata.get("code_rate_lp") code_rate_hp = fedata.get("code_rate_hp") guard_interval = fedata.get('guard_interval') if code_rate_lp and code_rate_hp and guard_interval: return code_rate_lp + "-" + code_rate_hp + "-" + guard_interval else: fec = fedata.get("fec_inner") if fec: return fec return "" def createModulation(self, fedata): if fedata.get("tuner_type") == _("Terrestrial"): constellation = fedata.get("constellation") if constellation: return constellation else: modulation = fedata.get("modulation") if modulation: return modulation return "" def createTunerType(self, feraw): return feraw.get("tuner_type") or "" def createTunerSystem(self, fedata): return fedata.get("system") or "" def createOrbPos(self, feraw): orbpos = feraw.get("orbital_position") if orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "\xc2\xb0 W" elif orbpos > 0: return str((float(orbpos)) / 10.0) + "\xc2\xb0 E" return "" def createOrbPosOrTunerSystem(self, fedata, feraw): orbpos = self.createOrbPos(feraw) if orbpos is not "": return orbpos return self.createTunerSystem(fedata) def createTransponderName(self, feraw): orbpos = feraw.get("orbital_position") if orbpos is None: # Not satellite return "" freq = feraw.get("frequency") if freq and freq < 10700000: # C-band if orbpos > 1800: orbpos += 1 else: orbpos -= 1 sat_names = { 30: 'Rascom/Eutelsat 3E', 48: 'SES 5', 70: 'Eutelsat 7E', 90: 'Eutelsat 9E', 100: 'Eutelsat 10E', 130: 'Hot Bird', 160: 'Eutelsat 16E', 192: 'Astra 1KR/1L/1M/1N', 200: 'Arabsat 20E', 216: 'Eutelsat 21.5E', 235: 'Astra 3', 255: 'Eutelsat 25.5E', 260: 'Badr 4/5/6', 282: 'Astra 2E/2F/2G', 305: 'Arabsat 30.5E', 315: 'Astra 5', 330: 'Eutelsat 33E', 360: 'Eutelsat 36E', 380: 'Paksat', 390: 'Hellas Sat', 400: 'Express 40E', 420: 'Turksat', 450: 'Intelsat 45E', 480: 'Afghansat', 490: 'Yamal 49E', 530: 'Express 53E', 570: 'NSS 57E', 600: 'Intelsat 60E', 620: 'Intelsat 62E', 685: 'Intelsat 68.5E', 705: 'Eutelsat 70.5E', 720: 'Intelsat 72E', 750: 'ABS', 765: 'Apstar', 785: 'ThaiCom', 800: 'Express 80E', 830: 'Insat', 851: 'Intelsat/Horizons', 880: 'ST2', 900: 'Yamal 90E', 915: 'Mesat', 950: 'NSS/SES 95E', 1005: 'AsiaSat 100E', 1030: 'Express 103E', 1055: 'Asiasat 105E', 1082: 'NSS/SES 108E', 1100: 'BSat/NSAT', 1105: 'ChinaSat', 1130: 'KoreaSat', 1222: 'AsiaSat 122E', 1380: 'Telstar 18', 1440: 'SuperBird', 2310: 'Ciel', 2390: 'Echostar/Galaxy 121W', 2410: 'Echostar/DirectTV 119W', 2500: 'Echostar/DirectTV 110W', 2630: 'Galaxy 97W', 2690: 'NIMIQ 91W', 2780: 'NIMIQ 82W', 2830: 'Echostar/QuetzSat', 2880: 'AMC 72W', 2900: 'Star One', 2985: 'Echostar 61.5W', 2990: 'Amazonas', 3020: 'Intelsat 58W', 3045: 'Intelsat 55.5W', 3070: 'Intelsat 53W', 3100: 'Intelsat 50W', 3150: 'Intelsat 45W', 3169: 'Intelsat 43.1W', 3195: 'SES 40.5W', 3225: 'NSS/Telstar 37W', 3255: 'Intelsat 34.5W', 3285: 'Intelsat 31.5W', 3300: 'Hispasat', 3325: 'Intelsat 27.5W', 3355: 'Intelsat 24.5W', 3380: 'SES 22W', 3400: 'NSS 20W', 3420: 'Intelsat 18W', 3450: 'Telstar 15W', 3460: 'Express 14W', 3475: 'Eutelsat 12.5W', 3490: 'Express 11W', 3520: 'Eutelsat 8W', 3530: 'Nilesat/Eutelsat 7W', 3550: 'Eutelsat 5W', 3560: 'Amos', 3592: 'Thor/Intelsat' } if orbpos in sat_names: return sat_names[orbpos] elif orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "W" else: return str((float(orbpos)) / 10.0) + "E" def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) def createMisPls(self, fedata): tmp = "" if fedata.get("is_id") > -1: tmp = "MIS %d" % fedata.get("is_id") if fedata.get("pls_code") > 0: tmp = addspace(tmp) + "%s %d" % (fedata.get("pls_mode"), fedata.get("pls_code")) if fedata.get("t2mi_plp_id") > -1: tmp = addspace(tmp) + "T2MI %d PID %d" % ( fedata.get("t2mi_plp_id"), fedata.get("t2mi_pid")) return tmp @cached def getText(self): service = self.source.service if service is None: return "" info = service and service.info() if not info: return "" if self.type == "CryptoInfo": self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createCryptoBar( info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace( self.current_source) + self.createCryptoSpecial(info) if self.type == "CryptoBar": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBar(info) else: return "" if self.type == "CryptoSeca": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSeca(info) else: return "" if self.type == "CryptoVia": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoVia(info) else: return "" if self.type == "CryptoIrdeto": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoIrdeto(info) else: return "" if self.type == "CryptoNDS": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNDS(info) else: return "" if self.type == "CryptoConax": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoConax(info) else: return "" if self.type == "CryptoCryptoW": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoCryptoW(info) else: return "" if self.type == "CryptoBeta": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBeta(info) else: return "" if self.type == "CryptoNagra": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNagra(info) else: return "" if self.type == "CryptoBiss": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBiss(info) else: return "" if self.type == "CryptoDre": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoDre(info) else: return "" if self.type == "CryptoTandberg": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoTandberg(info) else: return "" if self.type == "CryptoSpecial": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSpecial(info) else: return "" if self.type == "CryptoNameCaid": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNameCaid(info) else: return "" if self.type == "ResolutionString": return self.createResolution(info) if self.type == "VideoCodec": return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll( config.usage.infobar_frontend_source.value == "settings") if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw if not feraw: feraw = info.getInfoObject(iServiceInformation.sTransponderData) if not feraw: return "" fedata = ConvertToHumanReadable(feraw) else: fedata = self.fedata if self.type == "All": self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw, info) + addspace(self.createTransponderName(feraw)) + "\n"\ + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + "\n"\ + addspace(self.createPIDInfo(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw, info) + addspace(self.createTransponderName(feraw)) + "\n" \ + addspace(self.createCryptoBar(info)) + self.current_source + "\n" \ + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "ServiceInfo": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) \ + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) + addspace(self.createTransponderName(feraw))\ + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "TransponderInfo2line": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createTransponderName(feraw)) + '\n'\ + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata))\ + addspace(self.createSymbolRate(fedata, feraw)) + self.createModulation(fedata) + '-' + addspace(self.createFEC(fedata, feraw)) if self.type == "PIDInfo": return self.createPIDInfo(info) if self.type == "ServiceRef": return self.createServiceRef(info) if not feraw: return "" if self.type == "TransponderInfo": return self.createTransponderInfo(fedata, feraw, info) if self.type == "TransponderFrequency": return self.createFrequency(feraw) if self.type == "TransponderSymbolRate": return self.createSymbolRate(fedata, feraw) if self.type == "TransponderPolarization": return self.createPolarization(fedata) if self.type == "TransponderFEC": return self.createFEC(fedata, feraw) if self.type == "TransponderModulation": return self.createModulation(fedata) if self.type == "OrbitalPosition": return self.createOrbPos(feraw) if self.type == "TunerType": return self.createTunerType(feraw) if self.type == "TunerSystem": return self.createTunerSystem(fedata) if self.type == "OrbitalPositionOrTunerSystem": return self.createOrbPosOrTunerSystem(fedata, feraw) if self.type == "TerrestrialChannelNumber": return self.createChannelNumber(fedata, feraw) if self.type == "TransponderInfoMisPls": return self.createMisPls(fedata) return _("invalid type") text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in caid_data: if caid_entry[3] == request_caid: if request_selected: if int(caid_entry[0], 16) <= int(current_caid, 16) <= int( caid_entry[1], 16): return True else: # request available try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int( caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what)
class PliExtraInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.caid_data = (('0x100', '0x1ff', 'Seca', 'S', True), ('0x500', '0x5ff', 'Via', 'V', True), ('0x600', '0x6ff', 'Irdeto', 'I', True), ('0x900', '0x9ff', 'NDS', 'Nd', True), ('0xb00', '0xbff', 'Conax', 'Co', True), ('0xd00', '0xdff', 'CryptoW', 'Cw', True), ('0xe00', '0xeff', 'PowerVU', 'P', False), ('0x1700', '0x17ff', 'Beta', 'B', True), ('0x1800', '0x18ff', 'Nagra', 'N', True), ('0x2600', '0x2600', 'Biss', 'Bi', False), ('0x4ae0', '0x4ae1', 'Dre', 'D', False), ('0x4aee', '0x4aee', 'BulCrypt', 'B1', False), ('0x5581', '0x5581', 'BulCrypt', 'B2', False)) self.ca_table = (('CryptoCaidSecaAvailable', 'S', False), ('CryptoCaidViaAvailable', 'V', False), ('CryptoCaidIrdetoAvailable', 'I', False), ('CryptoCaidNDSAvailable', 'Nd', False), ('CryptoCaidConaxAvailable', 'Co', False), ('CryptoCaidCryptoWAvailable', 'Cw', False), ('CryptoCaidPowerVUAvailable', 'P', False), ('CryptoCaidBetaAvailable', 'B', False), ('CryptoCaidNagraAvailable', 'N', False), ('CryptoCaidBissAvailable', 'Bi', False), ('CryptoCaidDreAvailable', 'D', False), ('CryptoCaidBulCrypt1Available', 'B1', False), ('CryptoCaidBulCrypt2Available', 'B2', False), ('CryptoCaidSecaSelected', 'S', True), ('CryptoCaidViaSelected', 'V', True), ('CryptoCaidIrdetoSelected', 'I', True), ('CryptoCaidNDSSelected', 'Nd', True), ('CryptoCaidConaxSelected', 'Co', True), ('CryptoCaidCryptoWSelected', 'Cw', True), ('CryptoCaidPowerVUSelected', 'P', True), ('CryptoCaidBetaSelected', 'B', True), ('CryptoCaidNagraSelected', 'N', True), ('CryptoCaidBissSelected', 'Bi', True), ('CryptoCaidDreSelected', 'D', True), ('CryptoCaidBulCrypt1Selected', 'B1', True), ('CryptoCaidBulCrypt2Selected', 'B2', True)) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None return def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = '' self.current_caid = '0' self.current_provid = '0' self.current_ecmpid = '0' def createCryptoBar(self, info): res = '' available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): color = '\\c0000??00' else: color = '\\c007?7?7?' try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int(caid_entry[1], 16): color = '\\c00????00' except: pass if color != '\\c007?7?7?' or caid_entry[4]: if res: res += ' ' res += color + caid_entry[3] res += '\\c00??????' return res def createCryptoSeca(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x100', 16) <= int(self.current_caid, 16) <= int('0x1ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x100', 16) <= caid <= int('0x1ff', 16): color = '\\c00eeee00' except: pass res = color + 'S' res += '\\c00??????' return res def createCryptoVia(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x500', 16) <= int(self.current_caid, 16) <= int('0x5ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x500', 16) <= caid <= int('0x5ff', 16): color = '\\c00eeee00' except: pass res = color + 'V' res += '\\c00??????' return res def createCryptoIrdeto(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x600', 16) <= int(self.current_caid, 16) <= int('0x6ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x600', 16) <= caid <= int('0x6ff', 16): color = '\\c00eeee00' except: pass res = color + 'I' res += '\\c00??????' return res def createCryptoNDS(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x900', 16) <= int(self.current_caid, 16) <= int('0x9ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x900', 16) <= caid <= int('0x9ff', 16): color = '\\c00eeee00' except: pass res = color + 'NDS' res += '\\c00??????' return res def createCryptoConax(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xb00', 16) <= int(self.current_caid, 16) <= int('0xbff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0xb00', 16) <= caid <= int('0xbff', 16): color = '\\c00eeee00' except: pass res = color + 'CO' res += '\\c00??????' return res def createCryptoCryptoW(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xd00', 16) <= int(self.current_caid, 16) <= int('0xdff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0xd00', 16) <= caid <= int('0xdff', 16): color = '\\c00eeee00' except: pass res = color + 'CW' res += '\\c00??????' return res def createCryptoPowerVU(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xe00', 16) <= int(self.current_caid, 16) <= int('0xeff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0xe00', 16) <= caid <= int('0xeff', 16): color = '\\c00eeee00' except: pass res = color + 'P' res += '\\c00??????' return res def createCryptoBeta(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1700', 16) <= int(self.current_caid, 16) <= int('0x17ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x1700', 16) <= caid <= int('0x17ff', 16): color = '\\c00eeee00' except: pass res = color + 'B' res += '\\c00??????' return res def createCryptoNagra(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1800', 16) <= int(self.current_caid, 16) <= int('0x18ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x1800', 16) <= caid <= int('0x18ff', 16): color = '\\c00eeee00' except: pass res = color + 'N' res += '\\c00??????' return res def createCryptoBiss(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x2600', 16) <= int(self.current_caid, 16) <= int('0x26ff', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x2600', 16) <= caid <= int('0x26ff', 16): color = '\\c00eeee00' except: pass res = color + 'BI' res += '\\c00??????' return res def createCryptoDre(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x4ae0', 16) <= int(self.current_caid, 16) <= int('0x4ae1', 16): color = '\\c004c7d3f' else: color = '\\c009?9?9?' try: for caid in available_caids: if int('0x4ae0', 16) <= caid <= int('0x4ae1', 16): color = '\\c00eeee00' except: pass res = color + 'DC' res += '\\c00??????' return res def createCryptoSpecial(self, info): caid_name = 'FTA' try: for caid_entry in self.caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ':%04x:%04x:%04x' % (int(self.current_caid, 16), int(self.current_provid, 16), info.getInfo(iServiceInformation.sSID)) except: pass return '' def createResolution(self, info): video_height = 0 video_width = 0 video_pol = ' ' video_rate = 0 if path.exists('/proc/stb/vmpeg/0/yres'): f = open('/proc/stb/vmpeg/0/yres', 'r') try: video_height = int(f.read(), 16) except: pass f.close() if path.exists('/proc/stb/vmpeg/0/xres'): f = open('/proc/stb/vmpeg/0/xres', 'r') try: video_width = int(f.read(), 16) except: pass f.close() if path.exists('/proc/stb/vmpeg/0/progressive'): f = open('/proc/stb/vmpeg/0/progressive', 'r') try: video_pol = 'p' if int(f.read(), 16) else 'i' except: pass f.close() if path.exists('/proc/stb/vmpeg/0/framerate'): f = open('/proc/stb/vmpeg/0/framerate', 'r') try: video_rate = int(f.read()) except: pass f.close() fps = str((video_rate + 500) / 1000) return str(video_width) + 'x' + str(video_height) + video_pol + fps def createVideoCodec(self, info): return ('MPEG2', 'MPEG4', 'MPEG1', 'MPEG4-II', 'VC1', 'VC1-SM', '')[info.getInfo(iServiceInformation.sVideoType)] def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) tsid = info.getInfo(iServiceInformation.sTSID) onid = info.getInfo(iServiceInformation.sONID) if vpid < 0: vpid = 0 if apid < 0: apid = 0 if pcrpid < 0: pcrpid = 0 if sidpid < 0: sidpid = 0 if tsid < 0: tsid = 0 if onid < 0: onid = 0 return '%d-%d:%05d:%04d:%04d:%04d' % (onid, tsid, sidpid, vpid, apid, pcrpid) def createTransponderInfo(self, fedata, feraw): if 'DVB-T' in feraw.get('tuner_type'): tmp = addspace(self.createChannelNumber(fedata, feraw)) + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata)) else: tmp = addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata)) return addspace(self.createTunerSystem(fedata)) + tmp + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) def createFrequency(self, fedata): frequency = fedata.get('frequency') if frequency: return str(frequency) return '' def createChannelNumber(self, fedata, feraw): return 'DVB-T' in feraw.get('tuner_type') and fedata.get('channel') or '' def createSymbolRate(self, fedata, feraw): if 'DVB-T' in feraw.get('tuner_type'): bandwidth = fedata.get('bandwidth') if bandwidth: return bandwidth else: symbolrate = fedata.get('symbol_rate') if symbolrate: return str(symbolrate) return '' def createPolarization(self, fedata): return fedata.get('polarization_abbreviation') or '' def createFEC(self, fedata, feraw): if 'DVB-T' in feraw.get('tuner_type'): code_rate_lp = fedata.get('code_rate_lp') code_rate_hp = fedata.get('code_rate_hp') if code_rate_lp and code_rate_hp: return code_rate_lp + '-' + code_rate_hp else: fec = fedata.get('fec_inner') if fec: return fec return '' def createModulation(self, fedata): if fedata.get('tuner_type') == _('Terrestrial'): constellation = fedata.get('constellation') if constellation: return constellation else: modulation = fedata.get('modulation') if modulation: return modulation return '' def createTunerType(self, feraw): return feraw.get('tuner_type') or '' def createTunerSystem(self, fedata): return fedata.get('system') or '' def createOrbPos(self, feraw): orbpos = feraw.get('orbital_position') if orbpos > 1800: return str(float(3600 - orbpos) / 10.0) + '\xc2\xb0 W' if orbpos > 0: return str(float(orbpos) / 10.0) + '\xc2\xb0 E' return '' def createOrbPosOrTunerSystem(self, fedata, feraw): orbpos = self.createOrbPos(feraw) if orbpos is not '': return orbpos return self.createTunerSystem(fedata) def createTransponderName(self, feraw): orbpos = feraw.get('orbital_position') if orbpos is None: return '' else: freq = feraw.get('frequency') if freq and freq < 10700000: if orbpos > 1800: orbpos += 1 else: orbpos -= 1 sat_names = {30: 'Rascom/Eutelsat 3E', 48: 'SES 5', 70: 'Eutelsat 7E', 90: 'Eutelsat 9E', 100: 'Eutelsat 10E', 130: 'Hot Bird', 160: 'Eutelsat 16E', 192: 'Astra 1KR/1L/1M/1N', 200: 'Arabsat 20E', 216: 'Eutelsat 21.5E', 235: 'Astra 3', 255: 'Eutelsat 25.5E', 260: 'Badr 4/5/6', 282: 'Astra 2E/2F/2G', 305: 'Arabsat 30.5E', 315: 'Astra 5', 330: 'Eutelsat 33E', 360: 'Eutelsat 36E', 380: 'Paksat', 390: 'Hellas Sat', 400: 'Express 40E', 420: 'Turksat', 450: 'Intelsat 45E', 480: 'Afghansat', 490: 'Yamal 49E', 530: 'Express 53E', 570: 'NSS 57E', 600: 'Intelsat 60E', 620: 'Intelsat 62E', 685: 'Intelsat 68.5E', 705: 'Eutelsat 70.5E', 720: 'Intelsat 72E', 750: 'ABS', 765: 'Apstar', 785: 'ThaiCom', 800: 'Express 80E', 830: 'Insat', 851: 'Intelsat/Horizons', 880: 'ST2', 900: 'Yamal 90E', 915: 'Mesat', 950: 'NSS/SES 95E', 1005: 'AsiaSat 100E', 1030: 'Express 103E', 1055: 'Asiasat 105E', 1082: 'NSS/SES 108E', 1100: 'BSat/NSAT', 1105: 'ChinaSat', 1130: 'KoreaSat', 1222: 'AsiaSat 122E', 1380: 'Telstar 18', 1440: 'SuperBird', 2310: 'Ciel', 2390: 'Echostar/Galaxy 121W', 2410: 'Echostar/DirectTV 119W', 2500: 'Echostar/DirectTV 110W', 2630: 'Galaxy 97W', 2690: 'NIMIQ 91W', 2780: 'NIMIQ 82W', 2830: 'Echostar/QuetzSat', 2880: 'AMC 72W', 2900: 'Star One', 2985: 'Echostar 61.5W', 2990: 'Amazonas', 3020: 'Intelsat 58W', 3045: 'Intelsat 55.5W', 3070: 'Intelsat 53W', 3100: 'Intelsat 50W', 3150: 'Intelsat 45W', 3169: 'Intelsat 43.1W', 3195: 'SES 40.5W', 3225: 'NSS/Telstar 37W', 3255: 'Intelsat 34.5W', 3285: 'Intelsat 31.5W', 3300: 'Hispasat', 3325: 'Intelsat 27.5W', 3355: 'Intelsat 24.5W', 3380: 'SES 22W', 3400: 'NSS 20W', 3420: 'Intelsat 18W', 3450: 'Telstar 15W', 3460: 'Express 14W', 3475: 'Eutelsat 12.5W', 3490: 'Express 11W', 3520: 'Eutelsat 8W', 3530: 'Nilesat/Eutelsat 7W', 3550: 'Eutelsat 5W', 3560: 'Amos', 3592: 'Thor/Intelsat'} if orbpos in sat_names: return sat_names[orbpos] if orbpos > 1800: return str(float(3600 - orbpos) / 10.0) + 'W' return str(float(orbpos) / 10.0) + 'E' return def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) @cached def getText(self): service = self.source.service if service is None: return '' info = service and service.info() if not info: return '' if self.type == 'CryptoInfo': self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createCryptoBar(info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace(self.current_source) + self.createCryptoSpecial(info) if self.type == 'CryptoBar': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBar(info) else: return '' if self.type == 'CryptoSeca': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSeca(info) else: return '' if self.type == 'CryptoVia': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoVia(info) else: return '' if self.type == 'CryptoIrdeto': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoIrdeto(info) else: return '' if self.type == 'CryptoNDS': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNDS(info) else: return '' if self.type == 'CryptoConax': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoConax(info) else: return '' if self.type == 'CryptoCryptoW': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoCryptoW(info) else: return '' if self.type == 'CryptoBeta': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBeta(info) else: return '' if self.type == 'CryptoNagra': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNagra(info) else: return '' if self.type == 'CryptoBiss': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBiss(info) else: return '' if self.type == 'CryptoDre': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoDre(info) else: return '' if self.type == 'CryptoSpecial': if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSpecial(info) else: return '' if self.type == 'ResolutionString': return self.createResolution(info) elif self.type == 'VideoCodec': return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll(config.usage.infobar_frontend_source.value == 'settings') if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw if not feraw: feraw = info.getInfoObject(iServiceInformation.sTransponderData) if not feraw: return '' fedata = ConvertToHumanReadable(feraw) else: fedata = self.fedata if self.type == 'All': self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw) + addspace(self.createTransponderName(feraw)) + '\n' + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + '\n' + addspace(self.createPIDInfo(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw) + addspace(self.createTransponderName(feraw)) + '\n' + addspace(self.createCryptoBar(info)) + self.current_source + '\n' + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == 'ServiceInfo': return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) + addspace(self.createTransponderName(feraw)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) elif self.type == 'ServiceInfoFreq': return addspace(self.createFrequency(feraw)) + ' POL : ' + addspace(self.createPolarization(fedata)) + ' FEC : ' + addspace(self.createFEC(fedata, feraw)) + ' SR : ' + addspace(self.createSymbolRate(fedata, feraw)) + ' MOD : ' + addspace(self.createModulation(fedata)) if self.type == 'ServiceInfoCrypt': self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) else: return "'Emu Info'" if self.type == 'EmuInfoCrypt': self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createCryptoBar(info)) else: return "'Emu Info'" if self.type == 'EmuInfoCryptSpecial': self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createCryptoSpecial(info)) else: return "'Emu Info'" if self.type == 'TransponderInfo2line': return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createTransponderName(feraw)) + '\n' + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata)) + addspace(self.createSymbolRate(fedata, feraw)) + self.createModulation(fedata) + '-' + addspace(self.createFEC(fedata, feraw)) elif self.type == 'ProviderName': return self.createProviderName(info) elif self.type == 'TransponderName': return self.createTransponderName(feraw) elif self.type == 'TunerSystem': return self.createTunerSystem(fedata) elif self.type == 'PIDInfo': return self.createPIDInfo(info) elif not feraw: return '' elif self.type == 'TransponderInfo': return self.createTransponderInfo(fedata, feraw) elif self.type == 'TransponderFrequency': return self.createFrequency(feraw) elif self.type == 'TransponderSymbolRate': return self.createSymbolRate(fedata, feraw) elif self.type == 'TransponderPolarization': return self.createPolarization(fedata) elif self.type == 'TransponderFEC': return self.createFEC(fedata, feraw) elif self.type == 'TransponderModulation': return self.createModulation(fedata) elif self.type == 'OrbitalPosition': return self.createOrbPos(feraw) elif self.type == 'TunerType': return self.createTunerType(feraw) elif self.type == 'TunerSystem': return self.createTunerSystem(fedata) elif self.type == 'OrbitalPositionOrTunerSystem': return self.createOrbPosOrTunerSystem(fedata, feraw) elif self.type == 'TerrestrialChannelNumber': return self.createChannelNumber(fedata, feraw) else: return _('invalid type') text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False else: request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if caid_entry[3] == request_caid: if request_selected: if int(caid_entry[0], 16) <= int(current_caid, 16) <= int(caid_entry[1], 16): return True else: try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int(caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what) return
class PliExtraInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.caid_data = (("0x100", "0x1ff", "Seca", "S", True), ("0x500", "0x5ff", "Via", "V", True), ("0x600", "0x6ff", "Irdeto", "I", True), ("0x900", "0x9ff", "NDS", "Nd", True), ("0xb00", "0xbff", "Conax", "Co", True), ("0xd00", "0xdff", "CryptoW", "Cw", True), ("0xe00", "0xeff", "PowerVU", "P", False), ("0x1700", "0x17ff", "Beta", "B", True), ("0x1800", "0x18ff", "Nagra", "N", True), ("0x2600", "0x2600", "Biss", "Bi", False), ("0x4ae0", "0x4ae1", "Dre", "D", False), ("0x4aee", "0x4aee", "BulCrypt", "B1", False), ("0x5581", "0x5581", "BulCrypt", "B2", False)) self.ca_table = ( ("CryptoCaidSecaAvailable", "S", False), ("CryptoCaidViaAvailable", "V", False), ("CryptoCaidIrdetoAvailable", "I", False), ("CryptoCaidNDSAvailable", "Nd", False), ("CryptoCaidConaxAvailable", "Co", False), ("CryptoCaidCryptoWAvailable", "Cw", False), ("CryptoCaidPowerVUAvailable", "P", False), ("CryptoCaidBetaAvailable", "B", False), ("CryptoCaidNagraAvailable", "N", False), ("CryptoCaidBissAvailable", "Bi", False), ("CryptoCaidDreAvailable", "D", False), ("CryptoCaidBulCrypt1Available", "B1", False), ("CryptoCaidBulCrypt2Available", "B2", False), ("CryptoCaidSecaSelected", "S", True), ("CryptoCaidViaSelected", "V", True), ("CryptoCaidIrdetoSelected", "I", True), ("CryptoCaidNDSSelected", "Nd", True), ("CryptoCaidConaxSelected", "Co", True), ("CryptoCaidCryptoWSelected", "Cw", True), ("CryptoCaidPowerVUSelected", "P", True), ("CryptoCaidBetaSelected", "B", True), ("CryptoCaidNagraSelected", "N", True), ("CryptoCaidBissSelected", "Bi", True), ("CryptoCaidDreSelected", "D", True), ("CryptoCaidBulCrypt1Selected", "B1", True), ("CryptoCaidBulCrypt2Selected", "B2", True), ) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None def getCryptoInfo(self, info): if (info.getInfo(iServiceInformation.sIsCrypted) == 1): data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = "" self.current_caid = "0" self.current_provid = "0" self.current_ecmpid = "0" def createCryptoBar(self, info): res = "" available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int( self.current_caid, 16) <= int(caid_entry[1], 16): color = "\c0000??00" else: color = "\c007?7?7?" try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int( caid_entry[1], 16): color = "\c00????00" except: pass if color != "\c007?7?7?" or caid_entry[4]: if res: res += " " res += color + caid_entry[3] res += "\c00??????" return res def createCryptoSeca(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0x100', 16) and int( self.current_caid, 16) <= int('0x1ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int('0x100', 16) and caid <= int('0x1ff', 16): color = "\c00eeee00" except: pass res = color + 'S' res += "\c00??????" return res def createCryptoVia(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0x500', 16) and int( self.current_caid, 16) <= int('0x5ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int('0x500', 16) and caid <= int('0x5ff', 16): color = "\c00eeee00" except: pass res = color + 'V' res += "\c00??????" return res def createCryptoIrdeto(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0x600', 16) and int( self.current_caid, 16) <= int('0x6ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int('0x600', 16) and caid <= int('0x6ff', 16): color = "\c00eeee00" except: pass res = color + 'I' res += "\c00??????" return res def createCryptoNDS(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0x900', 16) and int( self.current_caid, 16) <= int('0x9ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int('0x900', 16) and caid <= int('0x9ff', 16): color = "\c00eeee00" except: pass res = color + 'NDS' res += "\c00??????" return res def createCryptoConax(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0xb00', 16) and int( self.current_caid, 16) <= int('0xbff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int('0xb00', 16) and caid <= int('0xbff', 16): color = "\c00eeee00" except: pass res = color + 'CO' res += "\c00??????" return res def createCryptoCryptoW(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0xd00', 16) and int( self.current_caid, 16) <= int('0xdff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int('0xd00', 16) and caid <= int('0xdff', 16): color = "\c00eeee00" except: pass res = color + 'CW' res += "\c00??????" return res def createCryptoPowerVU(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0xe00', 16) and int( self.current_caid, 16) <= int('0xeff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int('0xe00', 16) and caid <= int('0xeff', 16): color = "\c00eeee00" except: pass res = color + 'P' res += "\c00??????" return res def createCryptoBeta(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0x1700', 16) and int( self.current_caid, 16) <= int('0x17ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int('0x1700', 16) and caid <= int('0x17ff', 16): color = "\c00eeee00" except: pass res = color + 'B' res += "\c00??????" return res def createCryptoNagra(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0x1800', 16) and int( self.current_caid, 16) <= int('0x18ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int('0x1800', 16) and caid <= int('0x18ff', 16): color = "\c00eeee00" except: pass res = color + 'N' res += "\c00??????" return res def createCryptoBiss(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0x2600', 16) and int( self.current_caid, 16) <= int('0x26ff', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int('0x2600', 16) and caid <= int('0x26ff', 16): color = "\c00eeee00" except: pass res = color + 'BI' res += "\c00??????" return res def createCryptoDre(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int(self.current_caid, 16) >= int('0x4ae0', 16) and int( self.current_caid, 16) <= int('0x4ae1', 16): color = "\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if caid >= int('0x4ae0', 16) and caid <= int('0x4ae1', 16): color = "\c00eeee00" except: pass res = color + 'DC' res += "\c00??????" return res def createCryptoSpecial(self, info): caid_name = "FTA" try: for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int( self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ":%04x:%04x:%04x:%04x" % ( int(self.current_caid, 16), int(self.current_provid, 16), info.getInfo( iServiceInformation.sSID), int(self.current_ecmpid, 16)) except: pass return "" def createResolution(self, info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return "" yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ("i", "p", "", " ")[info.getInfo(iServiceInformation.sProgressive)] fps = str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) if int(fps) <= 0: fps = "" return str(xres) + "x" + str(yres) + mode + fps def createVideoCodec(self, info): return ("MPEG2", "MPEG4", "MPEG1", "MPEG4-II", "VC1", "VC1-SM", "")[info.getInfo(iServiceInformation.sVideoType)] def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) if vpid < 0: vpid = 0 if apid < 0: apid = 0 if pcrpid < 0: pcrpid = 0 if sidpid < 0: sidpid = 0 return "Pids:%04d:%04d:%04d:%05d" % (vpid, apid, pcrpid, sidpid) def createTransponderInfo(self, fedata, feraw): return addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata)) \ + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) \ + self.createOrbPos(feraw) def createFrequency(self, feraw): frequency = feraw.get("frequency") if frequency: return str(frequency) return "" def createSymbolRate(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): bandwidth = fedata.get("bandwidth") if bandwidth: return bandwidth else: symbolrate = fedata.get("symbol_rate") if symbolrate: return str(symbolrate) return "" def createPolarization(self, fedata): polarization = fedata.get("polarization_abbreviation") if polarization: return polarization return "" def createFEC(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): code_rate_lp = fedata.get("code_rate_lp") code_rate_hp = fedata.get("code_rate_hp") if code_rate_lp and code_rate_hp: return code_rate_lp + "-" + code_rate_hp else: fec = fedata.get("fec_inner") if fec: return fec return "" def createModulation(self, fedata): if fedata.get("tuner_type") == _("Terrestrial"): constellation = fedata.get("constellation") if constellation: return constellation else: modulation = fedata.get("modulation") if modulation: return modulation return "" def createTunerType(self, feraw): tunertype = feraw.get("tuner_type") if tunertype: return tunertype return "" def createTunerSystem(self, fedata): tunersystem = fedata.get("system") if tunersystem: return tunersystem return "" def createOrbPos(self, feraw): orbpos = feraw.get("orbital_position") if orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "\xc2\xb0 W" elif orbpos > 0: return str((float(orbpos)) / 10.0) + "\xc2\xb0 E" return "" def createOrbPosOrTunerSystem(self, fedata, feraw): orbpos = self.createOrbPos(feraw) if orbpos is not "": return orbpos return self.createTunerSystem(fedata) def createTransponderName(self, feraw): orb_pos = "" orbpos = feraw.get("orbital_position") if orbpos > 1800: if orbpos == 3590: orb_pos = 'Thor/Intelsat' elif orbpos == 3560: orb_pos = 'Amos (4' elif orbpos == 3550: orb_pos = 'Atlantic Bird' elif orbpos == 3530: orb_pos = 'Nilesat/Atlantic Bird' elif orbpos == 3520: orb_pos = 'Atlantic Bird' elif orbpos == 3475: orb_pos = 'Atlantic Bird' elif orbpos == 3460: orb_pos = 'Express' elif orbpos == 3450: orb_pos = 'Telstar' elif orbpos == 3420: orb_pos = 'Intelsat' elif orbpos == 3380: orb_pos = 'Nss' elif orbpos == 3355: orb_pos = 'Intelsat' elif orbpos == 3325: orb_pos = 'Intelsat' elif orbpos == 3300: orb_pos = 'Hispasat' elif orbpos == 3285: orb_pos = 'Intelsat' elif orbpos == 3170: orb_pos = 'Intelsat' elif orbpos == 3150: orb_pos = 'Intelsat' elif orbpos == 3070: orb_pos = 'Intelsat' elif orbpos == 3045: orb_pos = 'Intelsat' elif orbpos == 3020: orb_pos = 'Intelsat 9' elif orbpos == 2990: orb_pos = 'Amazonas' elif orbpos == 2900: orb_pos = 'Star One' elif orbpos == 2880: orb_pos = 'AMC 6 (72' elif orbpos == 2875: orb_pos = 'Echostar 6' elif orbpos == 2860: orb_pos = 'Horizons' elif orbpos == 2810: orb_pos = 'AMC5' elif orbpos == 2780: orb_pos = 'NIMIQ 4' elif orbpos == 2690: orb_pos = 'NIMIQ 1' elif orbpos == 3592: orb_pos = 'Thor/Intelsat' elif orbpos == 2985: orb_pos = 'Echostar 3,12' elif orbpos == 2830: orb_pos = 'Echostar 8' elif orbpos == 2630: orb_pos = 'Galaxy 19' elif orbpos == 2500: orb_pos = 'Echostar 10,11' elif orbpos == 2502: orb_pos = 'DirectTV 5' elif orbpos == 2410: orb_pos = 'Echostar 7 Anik F3' elif orbpos == 2391: orb_pos = 'Galaxy 23' elif orbpos == 2390: orb_pos = 'Echostar 9' elif orbpos == 2412: orb_pos = 'DirectTV 7S' elif orbpos == 2310: orb_pos = 'Galaxy 27' elif orbpos == 2311: orb_pos = 'Ciel 2' elif orbpos == 2120: orb_pos = 'Echostar 2' else: orb_pos = str((float(3600 - orbpos)) / 10.0) + "W" elif orbpos > 0: if orbpos == 192: orb_pos = 'Astra 1F' elif orbpos == 130: orb_pos = 'Hot Bird 6,7A,8' elif orbpos == 235: orb_pos = 'Astra 1E' elif orbpos == 1100: orb_pos = 'BSat 1A,2A' elif orbpos == 1101: orb_pos = 'N-Sat 110' elif orbpos == 1131: orb_pos = 'KoreaSat 5' elif orbpos == 1440: orb_pos = 'SuperBird 7,C2' elif orbpos == 1006: orb_pos = 'AsiaSat 2' elif orbpos == 1030: orb_pos = 'Express A2' elif orbpos == 1056: orb_pos = 'Asiasat 3S' elif orbpos == 1082: orb_pos = 'NSS 11' elif orbpos == 881: orb_pos = 'ST1' elif orbpos == 900: orb_pos = 'Yamal 201' elif orbpos == 917: orb_pos = 'Mesat' elif orbpos == 950: orb_pos = 'Insat 4B' elif orbpos == 951: orb_pos = 'NSS 6' elif orbpos == 765: orb_pos = 'Telestar' elif orbpos == 785: orb_pos = 'ThaiCom 5' elif orbpos == 800: orb_pos = 'Express' elif orbpos == 830: orb_pos = 'Insat 4A' elif orbpos == 850: orb_pos = 'Intelsat 709' elif orbpos == 750: orb_pos = 'Abs' elif orbpos == 720: orb_pos = 'Intelsat' elif orbpos == 705: orb_pos = 'Eutelsat W5' elif orbpos == 685: orb_pos = 'Intelsat' elif orbpos == 620: orb_pos = 'Intelsat 902' elif orbpos == 600: orb_pos = 'Intelsat 904' elif orbpos == 570: orb_pos = 'Nss' elif orbpos == 530: orb_pos = 'Express AM22' elif orbpos == 480: orb_pos = 'Eutelsat 2F2' elif orbpos == 450: orb_pos = 'Intelsat' elif orbpos == 420: orb_pos = 'Turksat 2A' elif orbpos == 400: orb_pos = 'Express AM1' elif orbpos == 390: orb_pos = 'Hellas Sat 2' elif orbpos == 380: orb_pos = 'Paksat 1' elif orbpos == 360: orb_pos = 'Eutelsat Sesat' elif orbpos == 335: orb_pos = 'Astra 1M' elif orbpos == 330: orb_pos = 'Eurobird 3' elif orbpos == 328: orb_pos = 'Galaxy 11' elif orbpos == 315: orb_pos = 'Astra 5A' elif orbpos == 310: orb_pos = 'Turksat' elif orbpos == 305: orb_pos = 'Arabsat' elif orbpos == 285: orb_pos = 'Eurobird 1' elif orbpos == 284: orb_pos = 'Eurobird/Astra' elif orbpos == 282: orb_pos = 'Eurobird/Astra' elif orbpos == 1220: orb_pos = 'AsiaSat' elif orbpos == 1380: orb_pos = 'Telstar 18' elif orbpos == 260: orb_pos = 'Badr 3/4' elif orbpos == 255: orb_pos = 'Eurobird 2' elif orbpos == 215: orb_pos = 'Eutelsat' elif orbpos == 216: orb_pos = 'Eutelsat W6' elif orbpos == 210: orb_pos = 'AfriStar 1' elif orbpos == 160: orb_pos = 'Eutelsat W2' elif orbpos == 100: orb_pos = 'Eutelsat W1' elif orbpos == 90: orb_pos = 'Eurobird 9' elif orbpos == 70: orb_pos = 'Eutelsat W3A' elif orbpos == 50: orb_pos = 'Sirius 4' elif orbpos == 48: orb_pos = 'Sirius 4' elif orbpos == 30: orb_pos = 'Telecom 2' else: orb_pos = str((float(orbpos)) / 10.0) + "E" return orb_pos def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) @cached def getText(self): service = self.source.service if service is None: return "" info = service and service.info() if not info: return "" if self.type == "CryptoInfo": self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.getValue()) > 0: return addspace(self.createCryptoBar( info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace( self.current_source) + self.createCryptoSpecial(info) if self.type == "CryptoBar": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoBar(info) else: return "" if self.type == "CryptoSeca": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoSeca(info) else: return "" if self.type == "CryptoVia": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoVia(info) else: return "" if self.type == "CryptoIrdeto": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoIrdeto(info) else: return "" if self.type == "CryptoNDS": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoNDS(info) else: return "" if self.type == "CryptoConax": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoConax(info) else: return "" if self.type == "CryptoCryptoW": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoCryptoW(info) else: return "" if self.type == "CryptoBeta": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoBeta(info) else: return "" if self.type == "CryptoNagra": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoNagra(info) else: return "" if self.type == "CryptoBiss": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoBiss(info) else: return "" if self.type == "CryptoDre": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoDre(info) else: return "" if self.type == "CryptoSpecial": if int(config.usage.show_cryptoinfo.getValue()) > 0: self.getCryptoInfo(info) return self.createCryptoSpecial(info) else: return "" if self.type == "ResolutionString": return self.createResolution(info) if self.type == "VideoCodec": return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll(True) if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw fedata = self.fedata if not feraw or not fedata: return "" if self.type == "All": self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.getValue()) > 0: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata,feraw) + "\n"\ + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + "\n"\ + addspace(self.createPIDInfo(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata,feraw) + "\n" \ + addspace(self.createCryptoBar(info)) + self.current_source + "\n" \ + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "ServiceInfo": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) \ + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) \ + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "TransponderInfo2line": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createTransponderName(feraw)) + '\n'\ + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata))\ + addspace(self.createSymbolRate(fedata, feraw)) + self.createModulation(fedata) + '-' + addspace(self.createFEC(fedata, feraw)) if self.type == "TransponderInfo": return self.createTransponderInfo(fedata, feraw) if self.type == "TransponderFrequency": return self.createFrequency(feraw) if self.type == "TransponderSymbolRate": return self.createSymbolRate(fedata, feraw) if self.type == "TransponderPolarization": return self.createPolarization(fedata) if self.type == "TransponderFEC": return self.createFEC(fedata, feraw) if self.type == "TransponderModulation": return self.createModulation(fedata) if self.type == "OrbitalPosition": return self.createOrbPos(feraw) if self.type == "TunerType": return self.createTunerType(feraw) if self.type == "TunerSystem": return self.createTunerSystem(fedata) if self.type == "OrbitalPositionOrTunerSystem": return self.createOrbPosOrTunerSystem(fedata, feraw) if self.type == "PIDInfo": return self.createPIDInfo(info) return _("invalid type") text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if caid_entry[3] == request_caid: if (request_selected): if int(current_caid, 16) >= int(caid_entry[0], 16) and int( current_caid, 16) <= int(caid_entry[1], 16): return True else: # request available try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int( caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what)
class pliExpertInfo(Poll, Converter, object): SMART_LABEL = 0 SMART_INFO_H = 1 SMART_INFO_V = 2 SERVICE_INFO = 3 CRYPTO_INFO = 4 FREQUENCY_INFO = 5 def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = {'ShowMe': self.SMART_LABEL, 'ExpertInfo': self.SMART_INFO_H, 'ExpertInfoVertical': self.SMART_INFO_V, 'ServiceInfo': self.SERVICE_INFO, 'CryptoInfo': self.CRYPTO_INFO, 'FrequencyInfo': self.FREQUENCY_INFO}[type] self.poll_interval = 1000 self.poll_enabled = True self.idnames = (('0x100', '0x1FF', 'Seca', 'S'), ('0x500', '0x5FF', 'Via', 'V'), ('0x600', '0x6FF', 'Irdeto', 'I'), ('0x900', '0x9FF', 'NDS', 'Nd'), ('0xB00', '0xBFF', 'Conax', 'Co'), ('0xD00', '0xDFF', 'CryptoW', 'Cw'), ('0x1700', '0x17FF', 'Beta', 'B'), ('0x1800', '0x18FF', 'Nagra', 'N')) self.ecmdata = GetEcmInfo() @cached def getText(self): service = self.source.service try: info = service and service.info() except: try: info = eServiceCenter.getInstance().info(service) except: pass if not info: return '' else: Ret_Text = '' Sec_Text = '' Res_Text = '' showCryptoInfo = False if self.type == self.SMART_INFO_H or self.type == self.SERVICE_INFO or self.type == self.CRYPTO_INFO or self.type == self.FREQUENCY_INFO: sep = ' ' sep2 = ' - ' elif self.type == self.SMART_INFO_V: sep = '\n' sep2 = '\n' else: return '' if self.type == self.FREQUENCY_INFO: try: feinfo = service and service.frontendInfo() prvd = info.getInfoString(iServiceInformation.sProvider) Ret_Text = self.short(prvd) frontendDataOrg = feinfo and feinfo.getAll(True) except: try: frontendDataOrg = info.getInfoObject(service, iServiceInformation.sTransponderData) prvd = info.getInfoString(service, iServiceInformation.sProvider) except: pass if frontendDataOrg is not None: frontendData = ConvertToHumanReadable(frontendDataOrg) if frontendDataOrg.get('tuner_type') == 'DVB-S' or frontendDataOrg.get('tuner_type') == 'DVB-C': frequency = str(frontendData.get('frequency') / 1000) + ' MHz' symbolrate = str(frontendData.get('symbol_rate') / 1000) fec_inner = frontendData.get('fec_inner') if frontendDataOrg.get('tuner_type') == 'DVB-S': Ret_Text += sep + frontendData.get('system') orbital_pos = int(frontendDataOrg['orbital_position']) if orbital_pos > 1800: if orbital_pos == 3590: orb_pos = 'Thor/Intelsat' elif orbital_pos == 3560: orb_pos = 'Amos (4' elif orbital_pos == 3550: orb_pos = 'Atlantic Bird' elif orbital_pos == 3530: orb_pos = 'Nilesat/Atlantic Bird' elif orbital_pos == 3520: orb_pos = 'Atlantic Bird' elif orbital_pos == 3475: orb_pos = 'Atlantic Bird' elif orbital_pos == 3460: orb_pos = 'Express' elif orbital_pos == 3450: orb_pos = 'Telstar' elif orbital_pos == 3420: orb_pos = 'Intelsat' elif orbital_pos == 3380: orb_pos = 'Nss' elif orbital_pos == 3355: orb_pos = 'Intelsat' elif orbital_pos == 3325: orb_pos = 'Intelsat' elif orbital_pos == 3300: orb_pos = 'Hispasat' elif orbital_pos == 3285: orb_pos = 'Intelsat' elif orbital_pos == 3170: orb_pos = 'Intelsat' elif orbital_pos == 3150: orb_pos = 'Intelsat' elif orbital_pos == 3070: orb_pos = 'Intelsat' elif orbital_pos == 3045: orb_pos = 'Intelsat' elif orbital_pos == 3020: orb_pos = 'Intelsat 9' elif orbital_pos == 2990: orb_pos = 'Amazonas' elif orbital_pos == 2900: orb_pos = 'Star One' elif orbital_pos == 2880: orb_pos = 'AMC 6 (72' elif orbital_pos == 2875: orb_pos = 'Echostar 6' elif orbital_pos == 2860: orb_pos = 'Horizons' elif orbital_pos == 2810: orb_pos = 'AMC5' elif orbital_pos == 2780: orb_pos = 'NIMIQ 4' elif orbital_pos == 2690: orb_pos = 'NIMIQ 1' elif orbital_pos == 3592: orb_pos = 'Thor/Intelsat' elif orbital_pos == 2985: orb_pos = 'Echostar 3,12' elif orbital_pos == 2830: orb_pos = 'Echostar 8' elif orbital_pos == 2630: orb_pos = 'Galaxy 19' elif orbital_pos == 2500: orb_pos = 'Echostar 10,11' elif orbital_pos == 2502: orb_pos = 'DirectTV 5' elif orbital_pos == 2410: orb_pos = 'Echostar 7 Anik F3' elif orbital_pos == 2391: orb_pos = 'Galaxy 23' elif orbital_pos == 2390: orb_pos = 'Echostar 9' elif orbital_pos == 2412: orb_pos = 'DirectTV 7S' elif orbital_pos == 2310: orb_pos = 'Galaxy 27' elif orbital_pos == 2311: orb_pos = 'Ciel 2' elif orbital_pos == 2120: orb_pos = 'Echostar 2' else: orb_pos = str(float(3600 - orbital_pos) / 10.0) + 'W' elif orbital_pos > 0: if orbital_pos == 192: orb_pos = 'Astra 1F' elif orbital_pos == 130: orb_pos = 'Hot Bird 6,7A,8' elif orbital_pos == 235: orb_pos = 'Astra 1E' elif orbital_pos == 1100: orb_pos = 'BSat 1A,2A' elif orbital_pos == 1101: orb_pos = 'N-Sat 110' elif orbital_pos == 1131: orb_pos = 'KoreaSat 5' elif orbital_pos == 1440: orb_pos = 'SuperBird 7,C2' elif orbital_pos == 1006: orb_pos = 'AsiaSat 2' elif orbital_pos == 1030: orb_pos = 'Express A2' elif orbital_pos == 1056: orb_pos = 'Asiasat 3S' elif orbital_pos == 1082: orb_pos = 'NSS 11' elif orbital_pos == 881: orb_pos = 'ST1' elif orbital_pos == 900: orb_pos = 'Yamal 201' elif orbital_pos == 917: orb_pos = 'Mesat' elif orbital_pos == 950: orb_pos = 'Insat 4B' elif orbital_pos == 951: orb_pos = 'NSS 6' elif orbital_pos == 765: orb_pos = 'Telestar' elif orbital_pos == 785: orb_pos = 'ThaiCom 5' elif orbital_pos == 800: orb_pos = 'Express' elif orbital_pos == 830: orb_pos = 'Insat 4A' elif orbital_pos == 850: orb_pos = 'Intelsat 709' elif orbital_pos == 750: orb_pos = 'Abs' elif orbital_pos == 720: orb_pos = 'Intelsat' elif orbital_pos == 705: orb_pos = 'Eutelsat W5' elif orbital_pos == 685: orb_pos = 'Intelsat' elif orbital_pos == 620: orb_pos = 'Intelsat 902' elif orbital_pos == 600: orb_pos = 'Intelsat 904' elif orbital_pos == 570: orb_pos = 'Nss' elif orbital_pos == 530: orb_pos = 'Express AM22' elif orbital_pos == 480: orb_pos = 'Eutelsat 2F2' elif orbital_pos == 450: orb_pos = 'Intelsat' elif orbital_pos == 420: orb_pos = 'Turksat 2A' elif orbital_pos == 400: orb_pos = 'Express AM1' elif orbital_pos == 390: orb_pos = 'Hellas Sat 2' elif orbital_pos == 380: orb_pos = 'Paksat 1' elif orbital_pos == 360: orb_pos = 'Eutelsat Sesat' elif orbital_pos == 335: orb_pos = 'Astra 1M' elif orbital_pos == 330: orb_pos = 'Eurobird 3' elif orbital_pos == 328: orb_pos = 'Galaxy 11' elif orbital_pos == 315: orb_pos = 'Astra 5A' elif orbital_pos == 310: orb_pos = 'Turksat' elif orbital_pos == 305: orb_pos = 'Arabsat' elif orbital_pos == 285: orb_pos = 'Eurobird 1' elif orbital_pos == 284: orb_pos = 'Eurobird/Astra' elif orbital_pos == 282: orb_pos = 'Eurobird/Astra' elif orbital_pos == 1220: orb_pos = 'AsiaSat' elif orbital_pos == 1380: orb_pos = 'Telstar 18' elif orbital_pos == 260: orb_pos = 'Badr 3/4' elif orbital_pos == 255: orb_pos = 'Eurobird 2' elif orbital_pos == 215: orb_pos = 'Eutelsat' elif orbital_pos == 216: orb_pos = 'Eutelsat W6' elif orbital_pos == 210: orb_pos = 'AfriStar 1' elif orbital_pos == 160: orb_pos = 'Eutelsat W2' elif orbital_pos == 100: orb_pos = 'Eutelsat W1' elif orbital_pos == 90: orb_pos = 'Eurobird 9' elif orbital_pos == 70: orb_pos = 'Eutelsat W3A' elif orbital_pos == 50: orb_pos = 'Sirius 4' elif orbital_pos == 48: orb_pos = 'Sirius 4' elif orbital_pos == 30: orb_pos = 'Telecom 2' else: orb_pos = str(float(orbital_pos) / 10.0) + 'E' Ret_Text += sep + orb_pos + '\n' Ret_Text += frequency + sep + frontendData.get('polarization_abbreviation') Ret_Text += sep + symbolrate Ret_Text += sep + frontendData.get('modulation') + '-' + fec_inner else: Ret_Text += sep + 'DVB-C ' + frequency + ' MHz' + sep + fec_inner + sep + symbolrate elif frontendData.get('tuner_type') == 'DVB-T': frequency = str(frontendData.get('frequency') / 1000) + ' MHz' Ret_Text = 'Frequency: ' + frequency if self.type == self.SMART_INFO_H or self.type == self.SMART_INFO_V or self.type == self.SERVICE_INFO: xresol = info.getInfo(iServiceInformation.sVideoWidth) yresol = info.getInfo(iServiceInformation.sVideoHeight) feinfo = service and service.frontendInfo() prvd = info.getInfoString(iServiceInformation.sProvider) Ret_Text = self.short(prvd) frontendDataOrg = feinfo and feinfo.getAll(True) if frontendDataOrg is not None: frontendData = ConvertToHumanReadable(frontendDataOrg) if frontendDataOrg.get('tuner_type') == 'DVB-S' or frontendDataOrg.get('tuner_type') == 'DVB-C': frequency = str(frontendData.get('frequency') / 1000) symbolrate = str(frontendData.get('symbol_rate') / 1000) fec_inner = frontendData.get('fec_inner') if frontendDataOrg.get('tuner_type') == 'DVB-S': Ret_Text += sep + frontendData.get('system') Ret_Text += sep + frequency + frontendData.get('polarization_abbreviation') Ret_Text += sep + symbolrate Ret_Text += sep + fec_inner + ' ' + frontendData.get('modulation') orbital_pos = int(frontendDataOrg['orbital_position']) if orbital_pos > 1800: orb_pos = str(float(3600 - orbital_pos) / 10.0) + 'W' elif orbital_pos > 0: orb_pos = str(float(orbital_pos) / 10.0) + 'E' Ret_Text += sep + orb_pos else: Ret_Text += sep + 'DVB-C ' + frequency + ' MHz' + sep + fec_inner + sep + symbolrate elif frontendDataOrg.get('tuner_type') == 'DVB-T': frequency = str(frontendData.get('frequency') / 1000) Ret_Text += sep + 'DVB-T' + sep + 'Frequency:' + sep + frequency + ' MHz' if feinfo is not None and xresol > 0: Res_Text += ('MPEG2 ', 'MPEG4 ', 'MPEG1 ', 'MPEG4-II ', 'VC1 ', 'VC1-SM ', '')[info.getInfo(iServiceInformation.sVideoType)] Res_Text += str(xresol) + 'x' + str(yresol) Res_Text += ('i', 'p', '')[info.getInfo(iServiceInformation.sProgressive)] Res_Text += str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) if self.type == self.SMART_INFO_H or self.type == self.SMART_INFO_V or self.type == self.CRYPTO_INFO: decCI = '0' Sec_Text = '' if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() if not config.usage.show_cryptoinfo.value: showCryptoInfo = True Sec_Text = data[0] + '\n' decCI = data[1] provid = data[2] pid = data[3] if decCI != '0': decCIfull = '%04x' % int(decCI, 16) for idline in self.idnames: if int(decCI, 16) >= int(idline[0], 16) and int(decCI, 16) <= int(idline[1], 16): decCIfull = idline[2] + ':' + decCIfull break Sec_Text += decCIfull if provid != '0': Sec_Text += ':%04x' % int(provid, 16) else: Sec_Text += ':' if pid != '0': Sec_Text += ':%04x:%04x' % (info.getInfo(iServiceInformation.sSID), int(pid, 16)) elif not config.usage.show_cryptoinfo.value: showCryptoInfo = True Sec_Text = 'FTA' res = '' searchIDs = info.getInfoObject(iServiceInformation.sCAIDs) for idline in self.idnames: if int(decCI, 16) >= int(idline[0], 16) and int(decCI, 16) <= int(idline[1], 16): color = '\\c0000??00' else: color = '\\c007?7?7?' try: for oneID in searchIDs: if oneID >= int(idline[0], 16) and oneID <= int(idline[1], 16): color = '\\c00????00' except: pass res += color + idline[3] + ' ' if self.type != self.CRYPTO_INFO: Ret_Text += '\n' Ret_Text += res + '\\c00?????? ' + Sec_Text if Res_Text != '': if showCryptoInfo: Ret_Text += sep + Res_Text else: Ret_Text += '\n' + Res_Text return Ret_Text text = property(getText) def changed(self, what): Converter.changed(self, what) def short(self, langTxt): if self.type == self.SMART_INFO_V and len(langTxt) > 23: retT = langTxt[:20] + '...' return retT else: return langTxt
class PliExtraInfo(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.caid_data = ( ( "0x100", "0x1ff", "Seca", "S", True ), ( "0x500", "0x5ff", "Via", "V", True ), ( "0x600", "0x6ff", "Irdeto", "I", True ), ( "0x900", "0x9ff", "NDS", "Nd", True ), ( "0xb00", "0xbff", "Conax", "Co", True ), ( "0xd00", "0xdff", "CryptoW", "Cw", True ), ( "0xe00", "0xeff", "PowerVU", "P", False ), ("0x1700", "0x17ff", "Beta", "B", True ), ("0x1800", "0x18ff", "Nagra", "N", True ), ("0x2600", "0x2600", "Biss", "Bi", False ), ("0x4ae0", "0x4ae1", "Dre", "D", False ), ("0x4aee", "0x4aee", "BulCrypt", "B1", False ), ("0x5581", "0x5581", "BulCrypt", "B2", False ) ) self.ca_table = ( ("CryptoCaidSecaAvailable", "S", False), ("CryptoCaidViaAvailable", "V", False), ("CryptoCaidIrdetoAvailable", "I", False), ("CryptoCaidNDSAvailable", "Nd", False), ("CryptoCaidConaxAvailable", "Co", False), ("CryptoCaidCryptoWAvailable", "Cw", False), ("CryptoCaidPowerVUAvailable", "P", False), ("CryptoCaidBetaAvailable", "B", False), ("CryptoCaidNagraAvailable", "N", False), ("CryptoCaidBissAvailable", "Bi", False), ("CryptoCaidDreAvailable", "D", False), ("CryptoCaidBulCrypt1Available","B1", False), ("CryptoCaidBulCrypt2Available","B2", False), ("CryptoCaidSecaSelected", "S", True), ("CryptoCaidViaSelected", "V", True), ("CryptoCaidIrdetoSelected", "I", True), ("CryptoCaidNDSSelected", "Nd", True), ("CryptoCaidConaxSelected", "Co", True), ("CryptoCaidCryptoWSelected", "Cw", True), ("CryptoCaidPowerVUSelected", "P", True), ("CryptoCaidBetaSelected", "B", True), ("CryptoCaidNagraSelected", "N", True), ("CryptoCaidBissSelected", "Bi", True), ("CryptoCaidDreSelected", "D", True), ("CryptoCaidBulCrypt1Selected", "B1", True), ("CryptoCaidBulCrypt2Selected", "B2", True), ) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None def getCryptoInfo(self, info): if info.getInfo(iServiceInformation.sIsCrypted) == 1: data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = "" self.current_caid = "0" self.current_provid = "0" self.current_ecmpid = "0" def createCryptoBar(self, info): res = "" available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): color="\c0000??00" else: color = "\c007?7?7?" try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int(caid_entry[1], 16): color="\c00????00" except: pass if color != "\c007?7?7?" or caid_entry[4]: if res: res += " " res += color + caid_entry[3] res += "\c00??????" return res def createCryptoSeca(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x100', 16) <= int(self.current_caid, 16) <= int('0x1ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x100', 16) <= caid <= int('0x1ff', 16): color="\c00eeee00" except: pass res = color + 'S' res += "\c00??????" return res def createCryptoVia(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x500', 16) <= int(self.current_caid, 16) <= int('0x5ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x500', 16) <= caid <= int('0x5ff', 16): color="\c00eeee00" except: pass res = color + 'V' res += "\c00??????" return res def createCryptoIrdeto(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x600', 16) <= int(self.current_caid, 16) <= int('0x6ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x600', 16) <= caid <= int('0x6ff', 16): color="\c00eeee00" except: pass res = color + 'I' res += "\c00??????" return res def createCryptoNDS(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x900', 16) <= int(self.current_caid, 16) <= int('0x9ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x900', 16) <= caid <= int('0x9ff', 16): color="\c00eeee00" except: pass res = color + 'NDS' res += "\c00??????" return res def createCryptoConax(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xb00', 16) <= int(self.current_caid, 16) <= int('0xbff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xb00', 16) <= caid <= int('0xbff', 16): color="\c00eeee00" except: pass res = color + 'CO' res += "\c00??????" return res def createCryptoCryptoW(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xd00', 16) <= int(self.current_caid, 16) <= int('0xdff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xd00', 16) <= caid <= int('0xdff', 16): color="\c00eeee00" except: pass res = color + 'CW' res += "\c00??????" return res def createCryptoPowerVU(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0xe00', 16) <= int(self.current_caid, 16) <= int('0xeff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0xe00', 16) <= caid <= int('0xeff', 16): color="\c00eeee00" except: pass res = color + 'P' res += "\c00??????" return res def createCryptoBeta(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1700', 16) <= int(self.current_caid, 16) <= int('0x17ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x1700', 16) <= caid <= int('0x17ff', 16): color="\c00eeee00" except: pass res = color + 'B' res += "\c00??????" return res def createCryptoNagra(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x1800', 16) <= int(self.current_caid, 16) <= int('0x18ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x1800', 16) <= caid <= int('0x18ff', 16): color="\c00eeee00" except: pass res = color + 'N' res += "\c00??????" return res def createCryptoBiss(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x2600', 16) <= int(self.current_caid, 16) <= int('0x26ff', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x2600', 16) <= caid <= int('0x26ff', 16): color="\c00eeee00" except: pass res = color + 'BI' res += "\c00??????" return res def createCryptoDre(self, info): available_caids = info.getInfoObject(iServiceInformation.sCAIDs) if int('0x4ae0', 16) <= int(self.current_caid, 16) <= int('0x4ae1', 16): color="\c004c7d3f" else: color = "\c009?9?9?" try: for caid in available_caids: if int('0x4ae0', 16) <= caid <= int('0x4ae1', 16): color="\c00eeee00" except: pass res = color + 'DC' res += "\c00??????" return res def createCryptoSpecial(self, info): caid_name = "FTA" try: for caid_entry in self.caid_data: if int(caid_entry[0], 16) <= int(self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ":%04x:%04x:%04x:%04x" % (int(self.current_caid,16), int(self.current_provid,16), info.getInfo(iServiceInformation.sSID), int(self.current_ecmpid,16)) except: pass return "" def createResolution(self, info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return "" yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ("i", "p", "", " ")[info.getInfo(iServiceInformation.sProgressive)] fps = str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) if int(fps) <= 0: fps = "" return str(xres) + "x" + str(yres) + mode + fps def createVideoCodec(self, info): return ("MPEG2", "MPEG4", "MPEG1", "MPEG4-II", "VC1", "VC1-SM", "")[info.getInfo(iServiceInformation.sVideoType)] def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) tsid = info.getInfo(iServiceInformation.sTSID) onid = info.getInfo(iServiceInformation.sONID) if vpid < 0 : vpid = 0 if apid < 0 : apid = 0 if pcrpid < 0 : pcrpid = 0 if sidpid < 0 : sidpid = 0 if tsid < 0 : tsid = 0 if onid < 0 : onid = 0 return "%d-%d:%05d:%04d:%04d:%04d" % (onid, tsid, sidpid, vpid, apid, pcrpid) def createTransponderInfo(self, fedata, feraw): if not feraw or not fedata: return "" if "DVB-T" in feraw.get("tuner_type"): tmp = addspace(self.createChannelNumber(fedata, feraw)) + self.createFrequency(fedata) + "/" + self.createPolarization(fedata) else: tmp = addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata)) return addspace(self.createTunerSystem(fedata)) + tmp + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) \ + addspace(self.createModulation(fedata)) + self.createOrbPos(feraw) def createFrequency(self, feraw): frequency = feraw.get("frequency") if frequency: return str(frequency) return "" def createChannelNumber(self, fedata, feraw): channel = channelnumbers.getChannelNumber(feraw.get("frequency"), feraw.get("tuner_number")) if channel: return _("CH") + "%s" % channel return "" def createSymbolRate(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): bandwidth = fedata.get("bandwidth") if bandwidth: return bandwidth else: symbolrate = fedata.get("symbol_rate") if symbolrate: return str(symbolrate) return "" def createPolarization(self, fedata): polarization = fedata.get("polarization_abbreviation") if polarization: return polarization return "" def createFEC(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): code_rate_lp = fedata.get("code_rate_lp") code_rate_hp = fedata.get("code_rate_hp") if code_rate_lp and code_rate_hp: return code_rate_lp + "-" + code_rate_hp else: fec = fedata.get("fec_inner") if fec: return fec return "" def createModulation(self, fedata): if fedata.get("tuner_type") == _("Terrestrial"): constellation = fedata.get("constellation") if constellation: return constellation else: modulation = fedata.get("modulation") if modulation: return modulation return "" def createTunerType(self, feraw): tunertype = feraw.get("tuner_type") if tunertype: return tunertype return "" def createTunerSystem(self, fedata): tunersystem = fedata.get("system") if tunersystem: return tunersystem return "" def createOrbPos(self, feraw): orbpos = feraw.get("orbital_position") if orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "\xc2\xb0 W" elif orbpos > 0: return str((float(orbpos)) / 10.0) + "\xc2\xb0 E" return "" def createOrbPosOrTunerSystem(self, fedata,feraw): orbpos = self.createOrbPos(feraw) if orbpos is not "": return orbpos return self.createTunerSystem(fedata) def createTransponderName(self,feraw): orb_pos = "" orbpos = feraw.get("orbital_position") if orbpos > 1800: if orbpos == 3590: orb_pos = 'Thor/Intelsat' elif orbpos == 3560: orb_pos = 'Amos (4' elif orbpos == 3550: orb_pos = 'Atlantic Bird' elif orbpos == 3530: orb_pos = 'Nilesat/Atlantic Bird' elif orbpos == 3520: orb_pos = 'Atlantic Bird' elif orbpos == 3475: orb_pos = 'Atlantic Bird' elif orbpos == 3460: orb_pos = 'Express' elif orbpos == 3450: orb_pos = 'Telstar' elif orbpos == 3420: orb_pos = 'Intelsat' elif orbpos == 3380: orb_pos = 'Nss' elif orbpos == 3355: orb_pos = 'Intelsat' elif orbpos == 3325: orb_pos = 'Intelsat' elif orbpos == 3300: orb_pos = 'Hispasat' elif orbpos == 3285: orb_pos = 'Intelsat' elif orbpos == 3170: orb_pos = 'Intelsat' elif orbpos == 3150: orb_pos = 'Intelsat' elif orbpos == 3070: orb_pos = 'Intelsat' elif orbpos == 3045: orb_pos = 'Intelsat' elif orbpos == 3020: orb_pos = 'Intelsat 9' elif orbpos == 2990: orb_pos = 'Amazonas' elif orbpos == 2900: orb_pos = 'Star One' elif orbpos == 2880: orb_pos = 'AMC 6 (72' elif orbpos == 2875: orb_pos = 'Echostar 6' elif orbpos == 2860: orb_pos = 'Horizons' elif orbpos == 2810: orb_pos = 'AMC5' elif orbpos == 2780: orb_pos = 'NIMIQ 4' elif orbpos == 2690: orb_pos = 'NIMIQ 1' elif orbpos == 3592: orb_pos = 'Thor/Intelsat' elif orbpos == 2985: orb_pos = 'Echostar 3,12' elif orbpos == 2830: orb_pos = 'Echostar 8' elif orbpos == 2630: orb_pos = 'Galaxy 19' elif orbpos == 2500: orb_pos = 'Echostar 10,11' elif orbpos == 2502: orb_pos = 'DirectTV 5' elif orbpos == 2410: orb_pos = 'Echostar 7 Anik F3' elif orbpos == 2391: orb_pos = 'Galaxy 23' elif orbpos == 2390: orb_pos = 'Echostar 9' elif orbpos == 2412: orb_pos = 'DirectTV 7S' elif orbpos == 2310: orb_pos = 'Galaxy 27' elif orbpos == 2311: orb_pos = 'Ciel 2' elif orbpos == 2120: orb_pos = 'Echostar 2' else: orb_pos = str((float(3600 - orbpos)) / 10.0) + "W" elif orbpos > 0: if orbpos == 192: orb_pos = 'Astra 1F' elif orbpos == 130: orb_pos = 'Hot Bird 6,7A,8' elif orbpos == 235: orb_pos = 'Astra 1E' elif orbpos == 1100: orb_pos = 'BSat 1A,2A' elif orbpos == 1101: orb_pos = 'N-Sat 110' elif orbpos == 1131: orb_pos = 'KoreaSat 5' elif orbpos == 1440: orb_pos = 'SuperBird 7,C2' elif orbpos == 1006: orb_pos = 'AsiaSat 2' elif orbpos == 1030: orb_pos = 'Express A2' elif orbpos == 1056: orb_pos = 'Asiasat 3S' elif orbpos == 1082: orb_pos = 'NSS 11' elif orbpos == 881: orb_pos = 'ST1' elif orbpos == 900: orb_pos = 'Yamal 201' elif orbpos == 917: orb_pos = 'Mesat' elif orbpos == 950: orb_pos = 'Insat 4B' elif orbpos == 951: orb_pos = 'NSS 6' elif orbpos == 765: orb_pos = 'Telestar' elif orbpos == 785: orb_pos = 'ThaiCom 5' elif orbpos == 800: orb_pos = 'Express' elif orbpos == 830: orb_pos = 'Insat 4A' elif orbpos == 850: orb_pos = 'Intelsat 709' elif orbpos == 750: orb_pos = 'Abs' elif orbpos == 720: orb_pos = 'Intelsat' elif orbpos == 705: orb_pos = 'Eutelsat W5' elif orbpos == 685: orb_pos = 'Intelsat' elif orbpos == 620: orb_pos = 'Intelsat 902' elif orbpos == 600: orb_pos = 'Intelsat 904' elif orbpos == 570: orb_pos = 'Nss' elif orbpos == 530: orb_pos = 'Express AM22' elif orbpos == 480: orb_pos = 'Eutelsat 2F2' elif orbpos == 450: orb_pos = 'Intelsat' elif orbpos == 420: orb_pos = 'Turksat 2A' elif orbpos == 400: orb_pos = 'Express AM1' elif orbpos == 390: orb_pos = 'Hellas Sat 2' elif orbpos == 380: orb_pos = 'Paksat 1' elif orbpos == 360: orb_pos = 'Eutelsat Sesat' elif orbpos == 335: orb_pos = 'Astra 1M' elif orbpos == 330: orb_pos = 'Eurobird 3' elif orbpos == 328: orb_pos = 'Galaxy 11' elif orbpos == 315: orb_pos = 'Astra 5A' elif orbpos == 310: orb_pos = 'Turksat' elif orbpos == 305: orb_pos = 'Arabsat' elif orbpos == 285: orb_pos = 'Eurobird 1' elif orbpos == 284: orb_pos = 'Eurobird/Astra' elif orbpos == 282: orb_pos = 'Eurobird/Astra' elif orbpos == 1220: orb_pos = 'AsiaSat' elif orbpos == 1380: orb_pos = 'Telstar 18' elif orbpos == 260: orb_pos = 'Badr 3/4' elif orbpos == 255: orb_pos = 'Eurobird 2' elif orbpos == 215: orb_pos = 'Eutelsat' elif orbpos == 216: orb_pos = 'Eutelsat W6' elif orbpos == 210: orb_pos = 'AfriStar 1' elif orbpos == 160: orb_pos = 'Eutelsat W2' elif orbpos == 100: orb_pos = 'Eutelsat W1' elif orbpos == 90: orb_pos = 'Eurobird 9' elif orbpos == 70: orb_pos = 'Eutelsat W3A' elif orbpos == 50: orb_pos = 'Sirius 4' elif orbpos == 48: orb_pos = 'Sirius 4' elif orbpos == 30: orb_pos = 'Telecom 2' else: orb_pos = str((float(orbpos)) / 10.0) + "E" return orb_pos def createProviderName(self,info): return info.getInfoString(iServiceInformation.sProvider) @cached def getText(self): service = self.source.service if service is None: return "" info = service and service.info() if not info: return "" if self.type == "CryptoInfo": self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createCryptoBar(info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace(self.current_source) + self.createCryptoSpecial(info) if self.type == "CryptoBar": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBar(info) else: return "" if self.type == "CryptoSeca": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSeca(info) else: return "" if self.type == "CryptoVia": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoVia(info) else: return "" if self.type == "CryptoIrdeto": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoIrdeto(info) else: return "" if self.type == "CryptoNDS": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNDS(info) else: return "" if self.type == "CryptoConax": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoConax(info) else: return "" if self.type == "CryptoCryptoW": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoCryptoW(info) else: return "" if self.type == "CryptoBeta": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBeta(info) else: return "" if self.type == "CryptoNagra": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoNagra(info) else: return "" if self.type == "CryptoBiss": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoBiss(info) else: return "" if self.type == "CryptoDre": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoDre(info) else: return "" if self.type == "CryptoSpecial": if int(config.usage.show_cryptoinfo.value) > 0: self.getCryptoInfo(info) return self.createCryptoSpecial(info) else: return "" if self.type == "ResolutionString": return self.createResolution(info) if self.type == "VideoCodec": return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll(config.usage.infobar_frontend_source.value == "settings") if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw fedata = self.fedata if not feraw or not fedata: return "" if self.type == "All": self.getCryptoInfo(info) if int(config.usage.show_cryptoinfo.value) > 0: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata,feraw) + addspace(self.createTransponderName(feraw)) + "\n"\ + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + "\n"\ + addspace(self.createPIDInfo(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata,feraw) + addspace(self.createTransponderName(feraw)) + "\n" \ + addspace(self.createCryptoBar(info)) + self.current_source + "\n" \ + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "ServiceInfo": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) \ + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) + addspace(self.createTransponderName(feraw))\ + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "TransponderInfo2line": return addspace(self.createProviderName(info)) + addspace(self.createTunerSystem(fedata)) + addspace(self.createTransponderName(feraw)) + '\n'\ + addspace(self.createFrequency(fedata)) + addspace(self.createPolarization(fedata))\ + addspace(self.createSymbolRate(fedata, feraw)) + self.createModulation(fedata) + '-' + addspace(self.createFEC(fedata, feraw)) if self.type == "TransponderInfo": return self.createTransponderInfo(fedata,feraw) if self.type == "TransponderFrequency": return self.createFrequency(feraw) if self.type == "TransponderSymbolRate": return self.createSymbolRate(fedata, feraw) if self.type == "TransponderPolarization": return self.createPolarization(fedata) if self.type == "TransponderFEC": return self.createFEC(fedata, feraw) if self.type == "TransponderModulation": return self.createModulation(fedata) if self.type == "OrbitalPosition": return self.createOrbPos(feraw) if self.type == "TunerType": return self.createTunerType(feraw) if self.type == "TunerSystem": return self.createTunerSystem(fedata) if self.type == "OrbitalPositionOrTunerSystem": return self.createOrbPosOrTunerSystem(fedata,feraw) if self.type == "PIDInfo": return self.createPIDInfo(info) if self.type == "TerrestrialChannelNumber": return self.createChannelNumber(fedata, feraw) return _("invalid type") text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if caid_entry[3] == request_caid: if request_selected: if int(caid_entry[0], 16) <= int(current_caid, 16) <= int(caid_entry[1], 16): return True else: # request available try: for caid in available_caids: if int(caid_entry[0], 16) <= caid <= int(caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what)
class PliExtraInfo2(Poll, Converter, object): def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.caid_data = (("0x100", "0x1ff", "Seca", "S", False), ("0x500", "0x5ff", "Viaccess", "V", False), ("0x600", "0x6ff", "Irdeto", "I", False), ("0x900", "0x9ff", "NDS-Videoguard", "Nd", False), ("0xb00", "0xbff", "Conax", "Co", False), ("0xd00", "0xdff", "CryptoW", "Cw", False), ("0xe00", "0xeff", "PowerVu", "P", False), ("0x0C00", "0x0C00", "NTL (RAS)", "Ras", False), ("0x1010", "0x1010", "Tandberg TV", "Tb", False), ("0x1700", "0x17ff", "Beta", "B", False), ("0x1800", "0x18ff", "Nagravision", "N", False), ("0x2600", "0x2600", "BISS", "Bi", False), ("0x2888", "0x2888", "Unknown", "Unk", False), ("0x4700", "0x47FF", "General Instrument (Motorola)", "GI", False), ("0x4a00", "0x4a02", "Tongfang", "Tf", False), ("0x4a67", "0x4a67", "@Sky", "Sk", False), ("0x4ac1", "0x4acf", "Latens Systems Ltd", "LtS", False), ("0x4ad0", "0x4ad1", "XCrypt Inc.", "Xc", False), ("0x4ad2", "0x4ad3", "Beijing DVT", "Bd", False), ("0x4ae0", "0x4ae1", "DRE-Crypt", "D", False), ("0x4aea", "0x4aea", "CryptoGuard AB", "CG", False), ("0x4aee", "0x4aee", "BulCrypt", "B1", False), ("0x4af0", "0x4af0", "Beijing ABVT", "BABVT", False), ("0x4af1", "0x4af1", "China DTV 1", "CDTV", False), ("0x4af1", "0x4af2", "China DTV 2", "CDTV", False), ("0x4af4", "0x4af4", "Marlin", "Md", False), ("0x5160", "0x5160", "Unknown", "Unk1", False), ("0x5581", "0x5581", "BulCrypt", "B2", False), ("0x5604", "0x5604", "Verimatrix", "Vx", False), ("0x7fff", "0x7fff", "Unknown", "Unk2", False), ("0xfffe", "0xfffe", "Free to Air", "FTA", False)) self.ca_table = ( ("CryptoCaidSecaAvailable", "S", False), ("CryptoCaidViaccessAvailable", "V", False), ("CryptoCaidIrdetoAvailable", "I", False), ("CryptoCaidNDSAvailable", "Nd", False), ("CryptoCaidConaxAvailable", "Co", False), ("CryptoCaidCryptoWAvailable", "Cw", False), ("CryptoCaidPowerVuAvailable", "P", False), ("CryptoCaidBetaAvailable", "B", False), ("CryptoCaidNagravisionAvailable", "N", False), ("CryptoCaidBISSAvailable", "Bi", False), ("CryptoCaidDreAvailable", "D", False), ("CryptoCaidCryptoGuard ABAvailable", "CG", False), ("CryptoCaidBulCrypt1Available", "B1", False), ("CryptoCaidBulCrypt2Available", "B2", False), ("CryptoCaid@SkyAvailable", "Sk", False), ("CryptoCaidLatens Systems LtdAvailable", "LtS", False), ("CryptoCaidXCrypt Inc.Available", "Xc", False), ("CryptoCaidBeijing DVTAvailable", "Bd", False), ("CryptoCaidNTL (RAS)Available", "Ras", False), ("CryptoCaidUnknownAvailabable", "Unk", False), ("CryptoCaidUnknownAvailabable", "Unk1", False), ("CryptoCaidUnknownAvailabable", "Unk2", False), ("CryptoCaidFree to AirAvailable", "FTA", False), ("CryptoCaidTongfangAvailable", "Tf", False), ("CryptoCaidMarlinAvailable", "Md", False), ("CryptoCaidVerimatrixAvailable", "Vx", False), ("CryptoCaidBeijing ABVTAvailable", "BABVT", False), ("CryptoCaidChina DTV 1Available", "CDTV", False), ("CryptoCaidChina DTV 2Available", "CDTV", False), ("CryptoCaidGeneral Instrument (Motorola)Available", "GI", False), ("CryptoCaidTandberg TVAvailable", "Tb", False), ("CryptoCaidSecaSelected", "S", True), ("CryptoCaidViaccessSelected", "V", True), ("CryptoCaidIrdetoSelected", "I", True), ("CryptoCaidNDS-VideoguardSelected", "Nd", True), ("CryptoCaidConaxSelected", "Co", True), ("CryptoCaidCryptoWSelected", "Cw", True), ("CryptoCaidPowerVuSelected", "P", True), ("CryptoCaidBetaSelected", "B", True), ("CryptoCaidNagravisionSelected", "N", True), ("CryptoCaidBISSSelected", "Bi", True), ("CryptoCaidDRE-CryptSelected", "D", True), ("CryptoCaidCryptoGuard ABSelected", "CG", True), ("CryptoCaidBulCrypt1Selected", "B1", True), ("CryptoCaidBulCrypt2Selected", "B2", True), ("CryptoCaid@SkySelected", "Sk", True), ("CryptoCaidLatens Systems LtdSelected", "LtS", True), ("CryptoCaidXCrypt Inc.Selected", "Xc", True), ("CryptoCaidBeijing DVTSelected", "Bd", True), ("CryptoCaidNTL (RAS)Selected", "Ras", True), ("CryptoCaidUnknownSelected", "Unk", True), ("CryptoCaidUnknownSelected", "Unk1", True), ("CryptoCaidUnknownSelected", "Unk2", True), ("CryptoCaidFree to AirSelected", "FTA", True), ("CryptoCaidTongfangSelected", "Tf", True), ("CryptoCaidMarlinSelected", "Md", True), ("CryptoCaidVerimatrixSelected", "Vx", True), ("CryptoCaidBeijing ABVTSelected", "BABVT", True), ("CryptoCaidChina DTV 1Selected", "CDTV", True), ("CryptoCaidChina DTV 2Selected", "CDTV", True), ("CryptoCaidGeneral Instrument (Motorola)Selected", "GI", True), ("CryptoCaidTandberg TVSelected", "Tb", True), ) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None def getCryptoInfo(self, info): if (info.getInfo(iServiceInformation.sIsCrypted) == 1): data = self.ecmdata.getEcmData() self.current_source = data[0] self.current_caid = data[1] self.current_provid = data[2] self.current_ecmpid = data[3] else: self.current_source = "" self.current_caid = "fffe" self.current_provid = "0" self.current_ecmpid = "0" def createCryptoBar(self, info): res = "" available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int( self.current_caid, 16) <= int(caid_entry[1], 16): color = "\c0000??00" else: color = "\c007?7?7?" try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int( caid_entry[1], 16): color = "\c00????00" except: pass if color != "\c007?7?7?" or caid_entry[4]: if res: res += ", " res += color + caid_entry[2] res += "\c00??????" return res def createCryptoID(self, info): res = "" available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int( self.current_caid, 16) <= int(caid_entry[1], 16): color = "\c0000??00" else: color = "\c007?7?7?" try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int( caid_entry[1], 16): color = "\c00????00" except: pass if color != "\c007?7?7?" or caid_entry[4]: if res: res += ", " res += color + "%04x" % (int(self.current_caid, 16)) res += "\c00??????" return res def createCryptoSpecial(self, info): caid_name = "FTA" try: for caid_entry in self.caid_data: if int(self.current_caid, 16) >= int(caid_entry[0], 16) and int( self.current_caid, 16) <= int(caid_entry[1], 16): caid_name = caid_entry[2] break return caid_name + ":%04x:%04x:%04x:%04x" % ( int(self.current_caid, 16), int(self.current_provid, 16), info.getInfo( iServiceInformation.sSID), int(self.current_ecmpid, 16)) except: pass return "" def createResolution(self, info): xres = info.getInfo(iServiceInformation.sVideoWidth) if xres == -1: return "" yres = info.getInfo(iServiceInformation.sVideoHeight) mode = ("i", "p", " ")[info.getInfo(iServiceInformation.sProgressive)] fps = str((info.getInfo(iServiceInformation.sFrameRate) + 500) / 1000) return str(xres) + "x" + str(yres) + mode + fps def createVideoCodec(self, info): return ("MPEG2", "MPEG4", "MPEG1", "MPEG4-II", "VC1", "VC1-SM", "HEVC", "")[info.getInfo(iServiceInformation.sVideoType)] def createPIDInfo(self, info): vpid = info.getInfo(iServiceInformation.sVideoPID) apid = info.getInfo(iServiceInformation.sAudioPID) pcrpid = info.getInfo(iServiceInformation.sPCRPID) sidpid = info.getInfo(iServiceInformation.sSID) tsid = info.getInfo(iServiceInformation.sTSID) onid = info.getInfo(iServiceInformation.sONID) if vpid < 0: vpid = 0 if apid < 0: apid = 0 if pcrpid < 0: pcrpid = 0 if sidpid < 0: sidpid = 0 if tsid < 0: tsid = 0 if onid < 0: onid = 0 return "%d-%d:%05d:%04d:%04d:%04d" % (onid, tsid, sidpid, vpid, apid, pcrpid) def createTransponderInfo(self, fedata, feraw): if not feraw: return "" elif "DVB-T" in feraw.get("tuner_type"): tmp = addspace(self.createChannelNumber(fedata, feraw)) + addspace( self.createFrequency(feraw)) + addspace( self.createPolarization(fedata)) else: tmp = addspace(self.createFrequency(feraw)) + addspace( self.createPolarization(fedata)) return addspace(self.createTunerSystem(fedata)) + tmp + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) \ + addspace(self.createModulation(fedata)) + addspace(self.createOrbPos(feraw)) def createFrequency(self, feraw): frequency = feraw.get("frequency") if frequency: if "DVB-T" in feraw.get("tuner_type"): return str(int(frequency / 1000000. + 0.5)) else: return str(int(frequency / 1000 + 0.5)) return "" def createChannelNumber(self, fedata, feraw): return "DVB-T" in feraw.get("tuner_type") and fedata.get( "channel") or "" def createSymbolRate(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): bandwidth = fedata.get("bandwidth") if bandwidth: return bandwidth else: symbolrate = fedata.get("symbol_rate") if symbolrate: return str(symbolrate / 1000) return "" def createPolarization(self, fedata): return fedata.get("polarization_abbreviation") or "" def createFEC(self, fedata, feraw): if "DVB-T" in feraw.get("tuner_type"): code_rate_lp = fedata.get("code_rate_lp") code_rate_hp = fedata.get("code_rate_hp") if code_rate_lp and code_rate_hp: return code_rate_lp + "-" + code_rate_hp else: fec = fedata.get("fec_inner") if fec: return fec return "" def createModulation(self, fedata): if fedata.get("tuner_type") == _("Terrestrial"): constellation = fedata.get("constellation") if constellation: return constellation else: modulation = fedata.get("modulation") if modulation: return modulation return "" def createTunerType(self, feraw): return feraw.get("tuner_type") or "" def createTunerSystem(self, fedata): return fedata.get("system") or "" def createOrbPos(self, feraw): orbpos = feraw.get("orbital_position") if orbpos > 1800: return str((float(3600 - orbpos)) / 10.0) + "\xc2\xb0 W" elif orbpos > 0: return str((float(orbpos)) / 10.0) + "\xc2\xb0 E" return "" def createOrbPosOrTunerSystem(self, fedata, feraw): orbpos = self.createOrbPos(feraw) if orbpos is not "": return orbpos return self.createTunerSystem(fedata) def createProviderName(self, info): return info.getInfoString(iServiceInformation.sProvider) @cached def getText(self): service = self.source.service if service is None: return "" info = service and service.info() if not info: return "" if self.type == "CryptoInfo": self.getCryptoInfo(info) if config.usage.show_cryptoinfo.value: return addspace(self.createCryptoBar( info)) + self.createCryptoSpecial(info) else: return addspace(self.createCryptoBar(info)) + addspace( self.current_source) + self.createCryptoSpecial(info) if self.type == "CryptoID": self.getCryptoInfo(info) return self.createCryptoID(info) if self.type == "CryptoBar": self.getCryptoInfo(info) return self.createCryptoBar(info) if self.type == "CryptoSpecial": self.getCryptoInfo(info) return self.createCryptoSpecial(info) if self.type == "ResolutionString": return self.createResolution(info) if self.type == "VideoCodec": return self.createVideoCodec(info) if self.updateFEdata: feinfo = service.frontendInfo() if feinfo: self.feraw = feinfo.getAll( config.usage.infobar_frontend_source.value == "settings") if self.feraw: self.fedata = ConvertToHumanReadable(self.feraw) feraw = self.feraw if not feraw: feraw = info.getInfoObject(iServiceInformation.sTransponderData) fedata = ConvertToHumanReadable(feraw) else: fedata = self.fedata if self.type == "All": self.getCryptoInfo(info) if config.usage.show_cryptoinfo.value: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw) + "\n" \ + addspace(self.createCryptoBar(info)) + addspace(self.createCryptoSpecial(info)) + "\n" \ + addspace(self.createPIDInfo(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) else: return addspace(self.createProviderName(info)) + self.createTransponderInfo(fedata, feraw) + "\n" \ + addspace(self.createCryptoBar(info)) + self.current_source + "\n" \ + addspace(self.createCryptoSpecial(info)) + addspace(self.createVideoCodec(info)) + self.createResolution(info) if self.type == "PIDInfo": return self.createPIDInfo(info) if not feraw: return "" if self.type == "ServiceInfo": return addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) \ + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) if self.type == "ServiceInfo2": return addspace(self.createTunerSystem(fedata)) + addspace(self.createFrequency(feraw)) + addspace(self.createPolarization(fedata)) \ + addspace(self.createSymbolRate(fedata, feraw)) + addspace(self.createFEC(fedata, feraw)) + addspace(self.createModulation(fedata)) if self.type == "ProviderInfo": if self.createProviderName(info) == "": return "-" else: return self.createProviderName(info) if self.type == "TransponderInfo": return self.createTransponderInfo(fedata, feraw) if self.type == "TransponderFrequency": return self.createFrequency(feraw) if self.type == "TransponderSymbolRate": return self.createSymbolRate(fedata, feraw) if self.type == "TransponderPolarization": return self.createPolarization(fedata) if self.type == "TransponderFEC": return self.createFEC(fedata, feraw) if self.type == "TransponderModulation": return self.createModulation(fedata) if self.type == "OrbitalPosition": return self.createOrbPos(feraw) if self.type == "TunerType": return self.createTunerType(feraw) if self.type == "TunerSystem": return self.createTunerSystem(fedata) if self.type == "OrbitalPositionOrTunerSystem": return self.createOrbPosOrTunerSystem(fedata, feraw) if self.type == "TerrestrialChannelNumber": return self.createChannelNumber(fedata, feraw) return _("invalid type") text = property(getText) @cached def getBool(self): service = self.source.service info = service and service.info() if not info: return False request_caid = None for x in self.ca_table: if x[0] == self.type: request_caid = x[1] request_selected = x[2] break if request_caid is None: return False if info.getInfo(iServiceInformation.sIsCrypted) != 1: return False data = self.ecmdata.getEcmData() if data is None: return False current_caid = data[1] available_caids = info.getInfoObject(iServiceInformation.sCAIDs) for caid_entry in self.caid_data: if caid_entry[3] == request_caid: if (request_selected): if int(current_caid, 16) >= int(caid_entry[0], 16) and int( current_caid, 16) <= int(caid_entry[1], 16): return True else: # request available try: for caid in available_caids: if caid >= int(caid_entry[0], 16) and caid <= int( caid_entry[1], 16): return True except: pass return False boolean = property(getBool) def changed(self, what): if what[0] == self.CHANGED_SPECIFIC: self.updateFEdata = False if what[1] == iPlayableService.evNewProgramInfo: self.updateFEdata = True if what[1] == iPlayableService.evEnd: self.feraw = self.fedata = None Converter.changed(self, what) elif what[0] == self.CHANGED_POLL and self.updateFEdata is not None: self.updateFEdata = False Converter.changed(self, what)