Example #1
0
    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"))
Example #2
0
 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)
Example #3
0
 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()
Example #4
0
	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
Example #5
0
	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()
Example #6
0
    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()
Example #7
0
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)
Example #8
0
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)
Example #9
0
 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)
Example #10
0
    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)
Example #11
0
 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
Example #12
0
    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()
Example #13
0
 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
Example #14
0
 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
Example #15
0
 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
Example #17
0
 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
Example #18
0
    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)
Example #19
0
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)
Example #20
0
 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)
Example #21
0
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)
Example #22
0
	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()
Example #24
0
	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)
Example #25
0
	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()
Example #26
0
 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
Example #27
0
 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
Example #28
0
 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
Example #29
0
	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
Example #30
0
	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
Example #31
0
	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)
Example #32
0
 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()
Example #33
0
	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)
Example #34
0
    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)
Example #35
0
	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()
Example #36
0
 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()
Example #37
0
 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)
Example #38
0
	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
Example #39
0
	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()
Example #40
0
	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
Example #41
0
 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
Example #42
0
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
Example #43
0
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)
Example #44
0
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)
Example #45
0
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)
Example #46
0
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)
Example #47
0
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()
Example #48
0
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)
Example #49
0
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
Example #50
0
    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)
Example #51
0
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)
Example #52
0
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
Example #53
0
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)
Example #54
0
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)
Example #55
0
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)
Example #56
0
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()
Example #57
0
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
Example #58
0
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
Example #59
0
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)
Example #60
0
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