def __init__(self, session, showExtentionMenuOption): Screen.__init__(self, session) self.setup_title = _("Softcam setup") self.setTitle(self.setup_title) self["actions"] = ActionMap( ["OkCancelActions", "ColorActions", "CiSelectionActions"], { "cancel": self.cancel, "green": self.save, "red": self.cancel, "blue": self.ppanelShortcut, }, -1) self.list = [] ConfigListScreen.__init__(self, self.list, session=session) self.softcam = CamControl('softcam') self.cardserver = CamControl('cardserver') self.ecminfo = GetEcmInfo() (newEcmFound, ecmInfo) = self.ecminfo.getEcm() self["info"] = ScrollLabel("".join(ecmInfo)) self.EcmInfoPollTimer = eTimer() self.EcmInfoPollTimer.callback.append(self.setEcmInfo) self.EcmInfoPollTimer.start(1000) softcams = self.softcam.getList() cardservers = self.cardserver.getList() self.softcams = ConfigSelection(choices=softcams) self.softcams.value = self.softcam.current() self.list.append(getConfigListEntry(_("Select Softcam"), self.softcams)) if cardservers: self.cardservers = ConfigSelection(choices=cardservers) self.cardservers.value = self.cardserver.current() self.list.append( getConfigListEntry(_("Select Card Server"), self.cardservers)) self.list.append( getConfigListEntry(_("Restart softcam"), ConfigAction(self.restart, "s"))) if cardservers: self.list.append( getConfigListEntry(_("Restart cardserver"), ConfigAction(self.restart, "c"))) self.list.append( getConfigListEntry(_("Restart both"), ConfigAction(self.restart, "sc"))) if showExtentionMenuOption: self.list.append( getConfigListEntry(_("Show softcam setup in extensions menu"), config.misc.softcam_setup.extension_menu)) self["key_red"] = Label(_("Cancel")) self["key_green"] = Label(_("OK")) self["key_blue"] = Label(_("Info"))
def __init__(self, session): self.softcam = CamControl("softcam") self.ecminfo = GetEcmInfo() config.misc.softcams.value == "" Setup.__init__(self, session=session, setup="softcamscriptsetup") self["key_yellow"] = StaticText() self["key_blue"] = StaticText() self["restartActions"] = HelpableActionMap( self, ["ColorActions"], { "yellow": (self.restart, _("Immediately restart selected cams.")) }, prio=0, description=_("Softcam Actions")) self["restartActions"].setEnabled(False) self["infoActions"] = HelpableActionMap( self, ["ColorActions"], {"blue": (self.softcamInfo, _("Display oscam information."))}, prio=0, description=_("Softcam Actions")) self["infoActions"].setEnabled(False) (newEcmFound, ecmInfo) = self.ecminfo.getEcm() self["info"] = ScrollLabel("".join(ecmInfo)) self.EcmInfoPollTimer = eTimer() self.EcmInfoPollTimer.callback.append(self.setEcmInfo) self.EcmInfoPollTimer.start(1000) self.onShown.append(self.updateButtons)
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] try: self.poll_interval = config.plugins.ValiKSSetup.pollTime.value * 1000 except: self.poll_interval = 1000 self.poll_enabled = True self.idnames = (("0x100", "0x1FF", "Seca", "Seca", " "), ("0x500", "0x5FF", "Via", "Viaccess", " "), ("0x600", "0x6FF", "Irdeto", "Irdeto", " "), ("0x900", "0x9FF", "NDS", "Videoguard", " "), ("0xB00", "0xBFF", "Conax", "Conax", " "), ("0xD00", "0xDFF", "CryptoW", "Cryptoworks", " "), ("0x1700", "0x17FF", "Beta", "Betacrypt", " "), ("0x1800", "0x18FF", "Nagra", "Nagravision", " ")) self.ecmdata = GetEcmInfo()
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 __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()
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"), ("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()
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)
def __init__(self, session): Screen.__init__(self, session) self.setup_title = _('Softcam Setup') self["lab1"] = Label() self['actions'] = ActionMap( ['OkCancelActions', 'ColorActions', 'CiSelectionActions'], { 'cancel': self.cancel, 'green': self.save, 'red': self.cancel }, -1) self.list = [] ConfigListScreen.__init__(self, self.list, session=session) self.softcam = CamControlService('softcam') self.ecminfo = GetEcmInfo() newEcmFound, ecmInfo = self.ecminfo.getEcm() self['info'] = ScrollLabel(''.join(ecmInfo)) self.EcmInfoPollTimer = eTimer() self.EcmInfoPollTimer.callback.append(self.setEcmInfo) self.EcmInfoPollTimer.start(1000) softcams = self.softcam.getList() self.softcams = ConfigSelection(choices=softcams) self.softcams.value = self.softcam.current() self.list.append(getConfigListEntry(_('Select softcam'), self.softcams)) self.list.append( getConfigListEntry(_('Restart softcam'), ConfigAction(self.restart, 's'))) self["lab1"].setText("%d Cams Instaladas" % (len(self.list))) self['key_red'] = Label(_('Cancel')) self['key_green'] = Label(_('OK')) self.onLayoutFinish.append(self.layoutFinished)
def __init__(self, session, args=0): assert not slManager.instance, "only one slManager instance is allowed!" slManager.instance = self self.skin = slManager.skin Screen.__init__(self, session) self.setTitle(_('Sat-Lodge Manager V. %s' % Version)) self.session = session self.index = 0 self.emulist = [] self.namelist = [] self.oldService = self.session.nav.getCurrentlyPlayingServiceReference( ) self["actions"] = ActionMap( ["OkCancelActions", "ColorActions"], { "ok": self.action, "cancel": self.close, "yellow": self.download, "green": self.action, "blue": self.slpanel, "red": self.stop, }, -1) self["key_green"] = Button(_("Start")) self["key_blue"] = Button(_("SatLodge Panel")) self['key_blue'].hide() if fileExists( '/usr/lib/enigma2/python/Plugins/SatLodge/slPanel/plugin.pyo'): self["key_blue"].show() self["key_yellow"] = Button(_("Download")) self["key_red"] = Button(_("Stop")) self['version'] = Label(_('V. %s' % Version)) self['maintener'] = Label(_('by ))^^((')) self['team'] = Label(_('..:: Sat-Lodge Manager ::..')) self['info'] = Label() self.currCam = self.readCurrent() self.softcamslist = [] self['desc'] = Label() self['ecminfo'] = Label(_('Ecm Info')) self["list"] = m2list([]) self['desc'].setText(_('Scanning and retrieval list softcam ...')) self.timer = eTimer() self.timer.start(100, 1) try: self.timer_conn = self.timer.timeout.connect(self.cgdesc) except: self.timer.callback.append(self.cgdesc) self.readScripts() self.ecminfo = GetEcmInfo() (newEcmFound, ecmInfo) = self.ecminfo.getEcm() self["info"] = ScrollLabel("".join(ecmInfo)) self.EcmInfoPollTimer = eTimer() self.EcmInfoPollTimer.start(100) try: self.EcmInfoPollTimer.callback.append(self.setEcmInfo) except: self.timer_conn = self.EcmInfoPollTimer.timeout.connect( self.setEcmInfo)
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), ("0x1010", "0x1010", "Tandberg", "T", 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", "T", 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", "T", True)) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None
def __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.active = False self.visible = config.usage.show_cryptoinfo.value self.textvalue = "" self.poll_interval = 1000 self.poll_enabled = True self.ecmdata = GetEcmInfo()
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", "BetaCrypt", "B", True), ("0x600", "0x6ff", "Irdeto", "I", True), ("0x1800", "0x18ff", "Nagravision", "N", True), ("0x100", "0x1ff", "Seca Mediaguard", "S", True), ("0x1000", "0x10FF", "Tandberg", "T", True), ("0x500", "0x5ff", "Viaccess", "V", True), ("0x2600", "0x2600", "Biss", "BI", True), ("0x4aee", "0x4aee", "BulCrypt", "BU", True), ("0x5581", "0x5581", "BulCrypt", "BU", False), ("0xb00", "0xbff", "Conax", "CO", True), ("0xd00", "0xdff", "CryptoWorks", "CW", True), ("0x4ae0", "0x4ae1", "DRE-Crypt", "DC", True), ("0x900", "0x9ff", "NDS Videoguard", "ND", True), ("0xe00", "0xeff", "PowerVu", "PV", True), ) self.ca_table = ( ("CryptoCaidBetatAvailable", "B", False), ("CryptoCaidIrdetoAvailable" "I", False), ("CryptoCaidNagraAvailable", "N", False), ("CryptoCaidSecaAvailable", "S", False), ("CryptoCaidTandbergAvailable", "T", False), ("CryptoCaidViaAvailable", "V", False), ("CryptoCaidBissAvailable", "BI", False), ("CryptoCaidBulCrypt1Available", "BU", False), ("CryptoCaidBulCrypt2Available", "BU", False), ("CryptoCaidConaxAvailable", "CO", False), ("CryptoCaidCryptoWAvailable", "CW", False), ("CryptoCaidDreAvailable", "DC", False), ("CryptoCaidNDSAvailable", "ND", False), ("CryptoCaidPowerVuAvailable", "PV", False), ("CryptoCaidBetaSelected", "B", True), ("CryptoCaidIrdetoSelected", "I", True), ("CryptoCaidNagraSelected", "N", True), ("CryptoCaidSecaSelected", "S", True), ("CryptoCaidTandbergSelected", "T", True), ("CryptoCaidViaSelected", "V", True), ("CryptoCaidBissSelected", "BI", True), ("CryptoCaidBulCrypt1Selected", "BU", True), ("CryptoCaidBulCrypt2Selected", "BU", True), ("CryptoCaidConaxSelected", "CO", True), ("CryptoCaidCryptoWSelected", "CW", True), ("CryptoCaidDreSelected", "DC", True), ("CryptoCaidNDSSelected", "ND", True), ("CryptoCaidPowerVuSelected", "PV", True), ) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None
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 __init__(self, session): self.softcam = CamControl("softcam") self.cardserver = CamControl("cardserver") self.ecminfo = GetEcmInfo() restartOptions = [("", _("Don't restart")), ("s", _("Restart softcam"))] defaultrestart = "" softcams = self.softcam.getList() defaultsoftcam = self.softcam.current() if len(softcams) > 1: defaultrestart = "s" else: softcams = [("", _("None"))] defaultsoftcam = "" config.misc.softcams = ConfigSelection(default=defaultsoftcam, choices=softcams) cardservers = self.cardserver.getList() defaultcardserver = self.cardserver.current() if len(cardservers) > 1: restartOptions.extend([("c", _("Restart cardserver")), ("sc", _("Restart both"))]) defaultrestart += "c" else: cardservers = [("", _("None"))] defaultcardserver = "" config.misc.cardservers = ConfigSelection(default=defaultcardserver, choices=cardservers) config.misc.restarts = ConfigSelection(default=defaultrestart, choices=restartOptions) Setup.__init__(self, session=session, setup="Softcam") self["key_yellow"] = StaticText() self["key_blue"] = StaticText() self["restartActions"] = HelpableActionMap( self, ["ColorActions"], { "yellow": (self.restart, _("Immediately restart selected devices.")) }, prio=0, description=_("Softcam Actions")) self["restartActions"].setEnabled(False) self["infoActions"] = HelpableActionMap( self, ["ColorActions"], {"blue": (self.softcamInfo, _("Display oscam information."))}, prio=0, description=_("Softcam Actions")) self["infoActions"].setEnabled(False) (newEcmFound, ecmInfo) = self.ecminfo.getEcm() self["info"] = ScrollLabel("".join(ecmInfo)) self.EcmInfoPollTimer = eTimer() self.EcmInfoPollTimer.callback.append(self.setEcmInfo) self.EcmInfoPollTimer.start(1000) self.onShown.append(self.updateButtons)
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 __init__(self, type): Converter.__init__(self, type) Poll.__init__(self) self.type = type self.poll_interval = 1000 self.poll_enabled = True self.ca_table = ( ("CryptoCaidBetatAvailable", "B", False), ("CryptoCaidIrdetoAvailable" "I", False), ("CryptoCaidNagraAvailable", "N", False), ("CryptoCaidSecaAvailable", "S", False), ("CryptoCaidTandbergAvailable", "T", False), ("CryptoCaidViaAvailable", "V", False), ("CryptoCaidBissAvailable", "BI", False), ("CryptoCaidBulCrypt1Available", "BU", False), ("CryptoCaidBulCrypt2Available", "BU", False), ("CryptoCaidConaxAvailable", "CO", False), ("CryptoCaidCryptoWAvailable", "CW", False), ("CryptoCaidDre3Available", "DC", False), ("CryptoCaidDreAvailable", "DC", False), ("CryptoCaidNDSAvailable", "ND", False), ("CryptoCaidPowerVuAvailable", "PV", False), ("CryptoCaidDvnAvailable", "TB", False), ("CryptoCaidSmsxAvailable", "SM", False), ("CryptoCaidTongfangAvailable", "TF", False), ("CryptoCaidVerimatrixAvailable", "VM", False), ("CryptoCaidBetaSelected", "B", True), ("CryptoCaidIrdetoSelected", "I", True), ("CryptoCaidNagraSelected", "N", True), ("CryptoCaidSecaSelected", "S", True), ("CryptoCaidTandbergSelected", "T", True), ("CryptoCaidViaSelected", "V", True), ("CryptoCaidBissSelected", "BI", True), ("CryptoCaidBulCrypt1Selected", "BU", True), ("CryptoCaidBulCrypt2Selected", "BU", True), ("CryptoCaidConaxSelected", "CO", True), ("CryptoCaidCryptoWSelected", "CW", True), ("CryptoCaidDre3Selected", "DC", True), ("CryptoCaidDreSelected", "DC", True), ("CryptoCaidNDSSelected", "ND", True), ("CryptoCaidPowerVuSelected", "PV", True), ("CryptoCaidDvnSelected", "TB", True), ("CryptoCaidSmsxSelected", "SM", True), ("CryptoCaidTongfangSelected", "TF", True), ("CryptoCaidVerimatrixSelected", "VM", True), ) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None
def __init__(self, session): Screen.__init__(self, session) self.setup_title = _('Softcam Setup') self["lab1"] = Label() self['actions'] = ActionMap(['OkCancelActions', 'ColorActions', 'CiSelectionActions'], {'cancel': self.cancel, 'green': self.save, 'red': self.cancel}, -1) self.list = [] ConfigListScreen.__init__(self, self.list, session=session) self.softcam = CamControlService('softcam') self.ecminfo = GetEcmInfo() newEcmFound, ecmInfo = self.ecminfo.getEcm() self['info'] = ScrollLabel(''.join(ecmInfo)) self.EcmInfoPollTimer = eTimer() self.EcmInfoPollTimer.callback.append(self.setEcmInfo) self.EcmInfoPollTimer.start(1000) softcams = self.softcam.getList() self.softcams = ConfigSelection(choices=softcams) self.softcams.value = self.softcam.current() self.list.append(getConfigListEntry(_('Select softcam'), self.softcams)) self.list.append(getConfigListEntry(_('Restart softcam'), ConfigAction(self.restart, 's'))) self["lab1"].setText("%d Cams Instaladas" % (len(self.list))) self['key_red'] = Label(_('Cancel')) self['key_green'] = Label(_('OK')) self.onLayoutFinish.append(self.layoutFinished)
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)
def __init__(self, session): Screen.__init__(self, session) self.setup_title = _("Cardserver Setup") self["lab1"] = Label() self["actions"] = ActionMap( ["OkCancelActions", "ColorActions", "CiSelectionActions"], {"cancel": self.cancel, "green": self.save, "red": self.cancel}, -1, ) self.list = [] ConfigListScreen.__init__(self, self.list, session=session) self.cardserver = CardControlService("cardserver") self.ecminfo = GetEcmInfo() newEcmFound, ecmInfo = self.ecminfo.getEcm() self["info"] = ScrollLabel("".join(ecmInfo)) self.EcmInfoPollTimer = eTimer() self.EcmInfoPollTimer.callback.append(self.setEcmInfo) self.EcmInfoPollTimer.start(1000) cardservers = self.cardserver.getList() self.cardservers = ConfigSelection(choices=cardservers) self.cardservers.value = self.cardserver.current() self.list.append(getConfigListEntry(_("Select cardserver"), self.cardservers)) self.list.append(getConfigListEntry(_("Restart cardserver"), ConfigAction(self.restart, "s"))) self["lab1"].setText("%d Cams Instaladas" % (len(self.list))) self["key_red"] = Label(_("Cancel")) self["key_green"] = Label(_("OK")) self.onLayoutFinish.append(self.layoutFinished)
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)
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 __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] try: self.poll_interval = config.plugins.ValiKSSetup.pollTime.value*1000 except: self.poll_interval = 1000 self.poll_enabled = True self.idnames = ( ( "0x100", "0x1FF","Seca" ,"Seca", " "), ( "0x500", "0x5FF","Via" ,"Viaccess", " "), ( "0x600", "0x6FF","Irdeto" ,"Irdeto", " "), ( "0x900", "0x9FF","NDS" ,"Videoguard", " "), ( "0xB00", "0xBFF","Conax" ,"Conax", " "), ( "0xD00", "0xDFF","CryptoW","Cryptoworks", " "), ("0x1700","0x17FF","Beta" ,"Betacrypt", " "), ("0x1800","0x18FF","Nagra" ,"Nagravision", " ")) self.ecmdata = GetEcmInfo()
def ShowECMInformation(self): if self.info: from Components.Converter.PliExtraInfo import caid_data self["Title"].text = _("Service info - ECM Info") tlist = [] for caid in sorted(set(self.info.getInfoObject(iServiceInformation.sCAIDPIDs)), key=lambda x: (x[0], x[1])): CaIdDescription = _("Undefined") extra_info = "" provid = "" for caid_entry in caid_data: if int(caid_entry[0], 16) <= caid[0] <= int(caid_entry[1], 16): CaIdDescription = caid_entry[2] break if caid[2]: if CaIdDescription == "Seca": provid = ",".join([caid[2][i:i+4] for i in range(0, len(caid[2]), 30)]) if CaIdDescription == "Nagra": provid = caid[2][-4:] if CaIdDescription == "Via": provid = caid[2][-6:] if provid: extra_info = "provid=%s" % provid else: extra_info = "extra data=%s" % caid[2] from Tools.GetEcmInfo import GetEcmInfo ecmdata = GetEcmInfo().getEcmData() color = "\c00??;?00" if caid[0] == int(ecmdata[1], 16) and (caid[1] == int(ecmdata[3], 16) or str(int(ecmdata[2], 16)) in provid) else "" tlist.append(ServiceInfoListEntry("%sECMPid %04X (%d) %04X-%s %s" % (color, caid[1], caid[1], caid[0], CaIdDescription, extra_info))) if not tlist: tlist.append(ServiceInfoListEntry(_("No ECMPids available (FTA Service)"))) self["infolist"].l.setList(tlist)
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), ("CryptoCaidDre3Available", "D3", False), ("CryptoCaidDreAvailable", "D", False), ("CryptoCaidBulCrypt1Available", "B1", False), ("CryptoCaidBulCrypt2Available", "B2", False), ("CryptoCaidTandbergAvailable", "T", 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), ("CryptoCaidTandbergSelected", "T", True)) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None
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"), ("0x1700", "0x17ff", "Beta", "B"), ("0x1800", "0x18ff", "Nagra", "N"), ("0x2600", "0x2600", "Biss", "Bi"), ("0x4ae0", "0x4ae1", "Dre", "D")) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None
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', 'T', 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', 'T', True)) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None return
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", "BetaCrypt", "B", True ), ( "0x600", "0x6ff", "Irdeto", "I", True ), ("0x1800", "0x18ff", "Nagravision", "N", True ), ( "0x100", "0x1ff", "Seca Mediaguard","S", True ), ("0x1000", "0x10FF", "Tandberg", "T", True ), ( "0x500", "0x5ff", "Viaccess", "V", True ), ("0x2600", "0x2600", "Biss", "BI", True ), ("0x4aee", "0x4aee", "BulCrypt", "BU", True ), ("0x5581", "0x5581", "BulCrypt", "BU", False), ( "0xb00", "0xbff", "Conax", "CO", True ), ( "0xd00", "0xdff", "CryptoWorks", "CW", True ), ("0x4ae0", "0x4ae1", "DRE-Crypt", "DC", True ), ( "0x900", "0x9ff", "NDS Videoguard", "ND", True ), ( "0xe00", "0xeff", "PowerVu", "PV", True ), ) self.ca_table = ( ("CryptoCaidBetatAvailable", "B", False), ("CryptoCaidIrdetoAvailable" "I", False), ("CryptoCaidNagraAvailable", "N", False), ("CryptoCaidSecaAvailable", "S", False), ("CryptoCaidTandbergAvailable", "T", False), ("CryptoCaidViaAvailable", "V", False), ("CryptoCaidBissAvailable", "BI", False), ("CryptoCaidBulCrypt1Available","BU", False), ("CryptoCaidBulCrypt2Available","BU", False), ("CryptoCaidConaxAvailable", "CO", False), ("CryptoCaidCryptoWAvailable", "CW", False), ("CryptoCaidDreAvailable", "DC", False), ("CryptoCaidNDSAvailable", "ND", False), ("CryptoCaidPowerVuAvailable", "PV", False), ("CryptoCaidBetaSelected", "B", True ), ("CryptoCaidIrdetoSelected", "I", True ), ("CryptoCaidNagraSelected", "N", True ), ("CryptoCaidSecaSelected", "S", True ), ("CryptoCaidTandbergSelected", "T", True ), ("CryptoCaidViaSelected", "V", True ), ("CryptoCaidBissSelected", "BI", True ), ("CryptoCaidBulCrypt1Selected", "BU", True ), ("CryptoCaidBulCrypt2Selected", "BU", True ), ("CryptoCaidConaxSelected", "CO", True ), ("CryptoCaidCryptoWSelected", "CW", True ), ("CryptoCaidDreSelected", "DC", True ), ("CryptoCaidNDSSelected", "ND", True ), ("CryptoCaidPowerVuSelected", "PV", True ), ) self.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None
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 __init__(self, session, showExtentionMenuOption): Screen.__init__(self, session) self.setup_title = _("Softcam setup") self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "CiSelectionActions"], { "cancel": self.cancel, "green": self.save, "red": self.cancel, "blue": self.ppanelShortcut, },-1) self.list = [ ] ConfigListScreen.__init__(self, self.list, session = session) self.softcam = CamControl('softcam') self.cardserver = CamControl('cardserver') self.ecminfo = GetEcmInfo() (newEcmFound, ecmInfo) = self.ecminfo.getEcm() self["info"] = Label() self.ecm() self.EcmInfoPollTimer = eTimer() self.EcmInfoPollTimer.callback.append(self.setEcmInfo) self.EcmInfoPollTimer.start(1000) softcams = self.softcam.getList() cardservers = self.cardserver.getList() self.softcams = ConfigSelection(choices = softcams) self.softcams.value = self.softcam.current() self.list.append(getConfigListEntry(_("Select Softcam"), self.softcams)) if cardservers: self.cardservers = ConfigSelection(choices = cardservers) self.cardservers.value = self.cardserver.current() self.list.append(getConfigListEntry(_("Select Card Server"), self.cardservers)) self.list.append(getConfigListEntry(_("Restart softcam"), ConfigAction(self.restart, "s"))) if cardservers: self.list.append(getConfigListEntry(_("Restart cardserver"), ConfigAction(self.restart, "c"))) self.list.append(getConfigListEntry(_("Restart both"), ConfigAction(self.restart, "sc"))) if showExtentionMenuOption: self.list.append(getConfigListEntry(_("Show softcam setup in extensions menu"), config.misc.softcam_setup.extension_menu)) self["key_red"] = Label(_("Cancel")) self["key_green"] = Label(_("OK")) self["key_blue"] = Label(_("Info")) self.onLayoutFinish.append(self.layoutFinished)
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()
def __init__(self, session): Screen.__init__(self, session) self.setup_title = _("Softcam setup") self.setTitle(self.setup_title) self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "CiSelectionActions"], { "cancel": self.cancel, "green": self.save, "red": self.cancel, "blue": self.ppanelShortcut, },-1) self.list = [ ] ConfigListScreen.__init__(self, self.list, session = session, on_change = self.changedEntry) self.softcam = CamControl('softcam') self.cardserver = CamControl('cardserver') self.ecminfo = GetEcmInfo() (newEcmFound, ecmInfo) = self.ecminfo.getEcm() self["info"] = ScrollLabel("".join(ecmInfo)) self.EcmInfoPollTimer = eTimer() self.EcmInfoPollTimer.callback.append(self.setEcmInfo) self.EcmInfoPollTimer.start(1000) softcams = self.softcam.getList() cardservers = self.cardserver.getList() self.softcams = ConfigSelection(choices = softcams) self.softcams.value = self.softcam.current() self.softcams_text = _("Select Softcam") self.list.append(getConfigListEntry(self.softcams_text, self.softcams)) if cardservers: self.cardservers = ConfigSelection(choices = cardservers) self.cardservers.value = self.cardserver.current() self.list.append(getConfigListEntry(_("Select Card Server"), self.cardservers)) self.list.append(getConfigListEntry(_("Restart softcam"), ConfigAction(self.restart, "s"))) if cardservers: self.list.append(getConfigListEntry(_("Restart cardserver"), ConfigAction(self.restart, "c"))) self.list.append(getConfigListEntry(_("Restart both"), ConfigAction(self.restart, "sc"))) self["key_red"] = StaticText(_("Cancel")) self["key_green"] = StaticText(_("OK")) self["key_blue"] = StaticText() self.onShown.append(self.blueButton)
def ShowECMInformation(self): if self.info: from Components.Converter.PliExtraInfo import caid_data self['Title'].text = _('Service info - ECM Info') tlist = [] for caid in sorted(set( self.info.getInfoObject(iServiceInformation.sCAIDPIDs)), key=lambda x: (x[0], x[1])): CaIdDescription = _('Undefined') extra_info = '' provid = '' for caid_entry in caid_data: if int(caid_entry[0], 16) <= caid[0] <= int( caid_entry[1], 16): CaIdDescription = caid_entry[2] break if caid[2]: if CaIdDescription == 'Seca': provid = ','.join([ caid[2][i:i + 4] for i in range(0, len(caid[2]), 30) ]) if CaIdDescription == 'Nagra': provid = caid[2][-4:] if CaIdDescription == 'Via': provid = caid[2][-6:] if provid: extra_info = 'provid=%s' % provid else: extra_info = 'extra data=%s' % caid[2] from Tools.GetEcmInfo import GetEcmInfo ecmdata = GetEcmInfo().getEcmData() if caid[0] == int(ecmdata[1], 16) and (caid[1] == int( ecmdata[3], 16) or str(int(ecmdata[2], 16)) in provid): color = '\\c00??;?00' if 1 else '' tlist.append( ServiceInfoListEntry('%sECMPid %04X (%d) %04X-%s %s' % (color, caid[1], caid[1], caid[0], CaIdDescription, extra_info))) if not tlist: tlist.append( ServiceInfoListEntry( _('No ECMPids available (FTA Service)'))) self['infolist'].l.setList(tlist)
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 __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()
def ShowECMInformation(self): from Components.Converter.PliExtraInfo import caid_data self.setTitle(_("Service Info: ECM Info")) tlist = [] provid = "" for caid in sorted(set( self.info.getInfoObject(iServiceInformation.sCAIDPIDs)), key=lambda x: (x[0], x[1])): CaIdDescription = _("Undefined") extra_info = "" for caid_entry in caid_data: if int(caid_entry[0], 16) <= caid[0] <= int(caid_entry[1], 16): CaIdDescription = caid_entry[2] break if caid[2]: if CaIdDescription == "Seca": provid = caid[2][:4] if CaIdDescription == "Nagra": provid = caid[2][-4:] if CaIdDescription == "Via": provid = caid[2][-6:] if provid: extra_info = "provid=%s" % provid else: extra_info = "extra data=%s" % caid[2] from Tools.GetEcmInfo import GetEcmInfo ecmdata = GetEcmInfo().getEcmData() color = Hex2strColor( parameters.get( "ServiceInfoEcmColor", 0x00ffbf00)) if caid[1] == int( ecmdata[3], 16) and caid[0] == int(ecmdata[1], 16) else "" tlist.append( ServiceInfoListEntry("%sECMPid %04X (%d) %04X-%s %s" % (color, caid[1], caid[1], caid[0], CaIdDescription, extra_info))) if not tlist: tlist.append(ServiceInfoListEntry(_("No ECMPids available"))) tlist.append(ServiceInfoListEntry(_("(FTA Service)"))) self["infolist"].l.setList(tlist)
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 __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()
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.ecmdata = GetEcmInfo() self.feraw = self.fedata = self.updateFEdata = None
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
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 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 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 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 SoftcamSetup(Screen, ConfigListScreen): skin = """ <screen name="SoftcamSetup" position="center,center" size="560,450" > <widget name="config" position="5,10" size="550,90" /> <widget name="info" position="5,100" size="550,300" font="Fixed;18" /> <ePixmap name="red" position="0,410" zPosition="1" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" /> <ePixmap name="green" position="140,410" zPosition="1" size="140,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" /> <ePixmap name="blue" position="420,410" zPosition="1" size="140,40" pixmap="skin_default/buttons/blue.png" transparent="1" alphatest="on" /> <widget name="key_red" position="0,410" zPosition="2" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" shadowColor="black" shadowOffset="-1,-1" /> <widget name="key_green" position="140,410" zPosition="2" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" shadowColor="black" shadowOffset="-1,-1" /> <widget name="key_blue" position="420,410" zPosition="2" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" shadowColor="black" shadowOffset="-1,-1" /> </screen>""" def __init__(self, session): Screen.__init__(self, session) self.setup_title = _("Softcam setup") self.setTitle(self.setup_title) self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "CiSelectionActions"], { "cancel": self.cancel, "green": self.save, "red": self.cancel, "blue": self.ppanelShortcut, },-1) self.list = [ ] ConfigListScreen.__init__(self, self.list, session = session) self.softcam = CamControl('softcam') self.cardserver = CamControl('cardserver') self.ecminfo = GetEcmInfo() (newEcmFound, ecmInfo) = self.ecminfo.getEcm() self["info"] = ScrollLabel("".join(ecmInfo)) self.EcmInfoPollTimer = eTimer() self.EcmInfoPollTimer.callback.append(self.setEcmInfo) self.EcmInfoPollTimer.start(1000) softcams = self.softcam.getList() cardservers = self.cardserver.getList() self.softcams = ConfigSelection(choices = softcams) self.softcams.value = self.softcam.current() self.list.append(getConfigListEntry(_("Select Softcam"), self.softcams)) if cardservers: self.cardservers = ConfigSelection(choices = cardservers) self.cardservers.value = self.cardserver.current() self.list.append(getConfigListEntry(_("Select Card Server"), self.cardservers)) self.list.append(getConfigListEntry(_("Restart softcam"), ConfigAction(self.restart, "s"))) if cardservers: self.list.append(getConfigListEntry(_("Restart cardserver"), ConfigAction(self.restart, "c"))) self.list.append(getConfigListEntry(_("Restart both"), ConfigAction(self.restart, "sc"))) self["key_red"] = Label(_("Cancel")) self["key_green"] = Label(_("OK")) self["key_blue"] = Label(_("Info")) def setEcmInfo(self): (newEcmFound, ecmInfo) = self.ecminfo.getEcm() if newEcmFound: self["info"].setText("".join(ecmInfo)) def ppanelShortcut(self): ppanelFileName = '/etc/ppanels/' + self.softcams.value + '.xml' if "oscam" in self.softcams.value.lower() and os.path.isfile('/usr/lib/enigma2/python/Plugins/Extensions/OscamStatus/plugin.py'): from Plugins.Extensions.OscamStatus.plugin import OscamStatus self.session.open(OscamStatus) elif "cccam" in self.softcams.value.lower() and os.path.isfile('/usr/lib/enigma2/python/Plugins/Extensions/CCcamInfo/plugin.py'): from Plugins.Extensions.CCcamInfo.plugin import CCcamInfoMain self.session.open(CCcamInfoMain) elif os.path.isfile(ppanelFileName) and os.path.isfile('/usr/lib/enigma2/python/Plugins/Extensions/PPanel/plugin.py'): from Plugins.Extensions.PPanel.ppanel import PPanel self.session.open(PPanel, name = self.softcams.value + ' PPanel', node = None, filename = ppanelFileName, deletenode = None) else: return 0 def restart(self, what): self.what = what if "s" in what: if "c" in what: msg = _("Please wait, restarting softcam and cardserver.") else: msg = _("Please wait, restarting softcam.") elif "c" in what: msg = _("Please wait, restarting cardserver.") self.mbox = self.session.open(MessageBox, msg, MessageBox.TYPE_INFO) self.activityTimer = eTimer() self.activityTimer.timeout.get().append(self.doStop) self.activityTimer.start(100, False) def doStop(self): self.activityTimer.stop() if "c" in self.what: self.cardserver.command('stop') if "s" in self.what: self.softcam.command('stop') self.oldref = self.session.nav.getCurrentlyPlayingServiceOrGroup() self.session.nav.stopService() self.activityTimer = eTimer() self.activityTimer.timeout.get().append(self.doStart) self.activityTimer.start(1000, False) def doStart(self): self.activityTimer.stop() del self.activityTimer if "c" in self.what: self.cardserver.select(self.cardservers.value) self.cardserver.command('start') if "s" in self.what: self.softcam.select(self.softcams.value) self.softcam.command('start') if self.mbox: self.mbox.close() self.close() self.session.nav.playService(self.oldref, adjust=False) def restartCardServer(self): if hasattr(self, 'cardservers'): self.restart("c") def restartSoftcam(self): self.restart("s") def save(self): what = '' if hasattr(self, 'cardservers') and (self.cardservers.value != self.cardserver.current()): what = 'sc' elif self.softcams.value != self.softcam.current(): what = 's' if what: self.restart(what) else: self.close() def cancel(self): self.close()
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')) 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
def __init__(self, session): Screen.__init__(self, session) self.setup_title = _("Softcam setup") self.setTitle(self.setup_title) self["actions"] = ActionMap( ["OkCancelActions", "ColorActions", "CiSelectionActions"], { "red": self.cancel, "green": self.save, "blue": self.cancel, "cancel": self.cancel, }, -1) self.list = [] ConfigListScreen.__init__(self, self.list, session=session, on_change=self.changedEntry) self.softcam = CamControl('softcam') self.cardserver = CamControl('cardserver') self.softcams_text = "" self.ecminfo = GetEcmInfo() (newEcmFound, ecmInfo) = self.ecminfo.getEcm() self["info"] = ScrollLabel("".join(ecmInfo)) self.EcmInfoPollTimer = eTimer() self.EcmInfoPollTimer.callback.append(self.setEcmInfo) self.EcmInfoPollTimer.start(1000) softcams = self.softcam.getList() cardservers = self.cardserver.getList() if softcams: self.softcams = ConfigSelection(choices=softcams) self.softcams.value = self.softcam.current() self.softcams_text = _("Select Softcam") self.list.append( getConfigListEntry(self.softcams_text, self.softcams)) if cardservers: self.cardservers = ConfigSelection(choices=cardservers) self.cardservers.value = self.cardserver.current() self.list.append( getConfigListEntry(_("Select Card Server"), self.cardservers)) if cardservers and softcams: self.list.append( getConfigListEntry(_("Restart both"), ConfigAction(self.restart, "sc"))) elif softcams: self.list.append( getConfigListEntry(_("Restart softcam"), ConfigAction(self.restart, "s"))) else: self.list.append( getConfigListEntry(_("Restart cardserver"), ConfigAction(self.restart, "c"))) self["key_red"] = StaticText(_("Cancel")) self["key_green"] = StaticText(_("OK")) self["key_blue"] = StaticText() self.onShown.append(self.blueButton)
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 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.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 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 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 CardserverSetup(Screen, ConfigListScreen): skin = '\n\t<screen name="CardserverSetup" position="center,center" size="560,450" >\n\t\t<widget name="config" position="5,10" size="550,90" />\n\t\t<widget name="info" position="5,100" size="550,300" font="Fixed;18" />\n\t\t<ePixmap name="red" position="85,410" zPosition="1" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />\n\t\t<ePixmap name="green" position="330,410" zPosition="1" size="140,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />\n\t\t<widget name="key_red" position="20,405" zPosition="2" size="270,50" valign="center" halign="center" font="Regular;21" transparent="1" shadowColor="black" shadowOffset="-1,-1" />\n\t\t<widget name="key_green" position="265,405" zPosition="2" size="270,50" valign="center" halign="center" font="Regular;21" transparent="1" shadowColor="black" shadowOffset="-1,-1" />\n\t</screen>' def __init__(self, session): Screen.__init__(self, session) self.setup_title = _("Cardserver Setup") self["lab1"] = Label() self["actions"] = ActionMap( ["OkCancelActions", "ColorActions", "CiSelectionActions"], {"cancel": self.cancel, "green": self.save, "red": self.cancel}, -1, ) self.list = [] ConfigListScreen.__init__(self, self.list, session=session) self.cardserver = CardControlService("cardserver") self.ecminfo = GetEcmInfo() newEcmFound, ecmInfo = self.ecminfo.getEcm() self["info"] = ScrollLabel("".join(ecmInfo)) self.EcmInfoPollTimer = eTimer() self.EcmInfoPollTimer.callback.append(self.setEcmInfo) self.EcmInfoPollTimer.start(1000) cardservers = self.cardserver.getList() self.cardservers = ConfigSelection(choices=cardservers) self.cardservers.value = self.cardserver.current() self.list.append(getConfigListEntry(_("Select cardserver"), self.cardservers)) self.list.append(getConfigListEntry(_("Restart cardserver"), ConfigAction(self.restart, "s"))) self["lab1"].setText("%d Cams Instaladas" % (len(self.list))) self["key_red"] = Label(_("Cancel")) self["key_green"] = Label(_("OK")) self.onLayoutFinish.append(self.layoutFinished) def setEcmInfo(self): newEcmFound, ecmInfo = self.ecminfo.getEcm() if newEcmFound: self["info"].setText("".join(ecmInfo)) def layoutFinished(self): self.setTitle(self.setup_title) def restart(self, what): self.what = what if "s" in what: msg = _("Please wait, restarting cardserver.") self.mbox = self.session.open(MessageBoxSF, msg, MessageBoxSF.TYPE_INFO) self.activityTimer = eTimer() self.activityTimer.timeout.get().append(self.doStop) self.activityTimer.start(100, False) def doStop(self): self.activityTimer.stop() if "s" in self.what: self.cardserver.command("stop") self.oldref = self.session.nav.getCurrentlyPlayingServiceReference() self.session.nav.stopService() self.activityTimer = eTimer() self.activityTimer.timeout.get().append(self.doStart) self.activityTimer.start(1000, False) def doStart(self): self.activityTimer.stop() del self.activityTimer if "s" in self.what: self.cardserver.select(self.cardservers.value) self.cardserver.command("start") if self.mbox: self.mbox.close() self.close() self.session.nav.playService(self.oldref) del self.oldref def restartCardserver(self): self.restart("s") def save(self): what = "" if self.cardservers.value != self.cardserver.current(): what = "s" if what: self.restart(what) else: from Components.PluginComponent import plugins plugins.reloadPlugins() self.close() def cancel(self): self.close()
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 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 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 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