Ejemplo n.º 1
0
    def createSetup(self):
        self.list = []
        self.activeEntry = getConfigListEntry(_("Active"), self.activeConfigEntry)
        self.list.append(self.activeEntry)
        self.sharenameEntry = getConfigListEntry(_("Local share name"), self.sharenameConfigEntry)
        self.list.append(self.sharenameEntry)
        self.mounttypeEntry = getConfigListEntry(_("Mount type"), self.mounttypeConfigEntry)
        self.list.append(self.mounttypeEntry)
        self.ipEntry = getConfigListEntry(_("Server IP"), self.ipConfigEntry)
        self.list.append(self.ipEntry)
        self.sharedirEntry = getConfigListEntry(_("Server share"), self.sharedirConfigEntry)
        self.list.append(self.sharedirEntry)
        self.hdd_replacementEntry = getConfigListEntry(_("use as HDD replacement"), self.hdd_replacementConfigEntry)
        self.list.append(self.hdd_replacementEntry)
        if self.optionsConfigEntry.value == self.optionsConfigEntry.default:
            if self.mounttypeConfigEntry.value == "cifs":
                self.optionsConfigEntry = NoSave(ConfigText(default = "rw,noatime,noserverino,iocharset=utf8", visible_width = 50, fixed_size = False))
            else:
                self.optionsConfigEntry = NoSave(ConfigText(default = "rw,nolock,soft", visible_width = 50, fixed_size = False))
        self.optionsEntry = getConfigListEntry(_("Mount options"), self.optionsConfigEntry)
        self.list.append(self.optionsEntry)
        if self.mounttypeConfigEntry.value == "cifs":
            self.usernameEntry = getConfigListEntry(_("Username"), self.usernameConfigEntry)
            self.list.append(self.usernameEntry)
            self.passwordEntry = getConfigListEntry(_("Password"), self.passwordConfigEntry)
            self.list.append(self.passwordEntry)
            self.myBuffers = getConfigListEntry(_("Buffers size:"), self.CurrentBuffers)
            self.list.append(self.myBuffers)

        self["config"].list = self.list
        self["config"].l.setList(self.list)
        self["config"].onSelectionChanged.append(self.selectionChanged)
Ejemplo n.º 2
0
    def updateList(self):
        self.list = []
        mylist = []
        sorted_dict = {}
        f = open('/etc/bh_plugins.pos', 'rb')
        for line in f.readlines():
            d = line.split(':', 1)
            if len(d) > 1:
                sorted_dict[d[0].strip()] = int(d[1].strip())
            f.close()

        self.pluginlist = plugins.getPlugins(PluginDescriptor.WHERE_PLUGINMENU)
        for plugin in self.pluginlist:
            pos = sorted_dict.get(plugin.name, 99)
            res = (plugin.name, pos)
            mylist.append(res)

        mylist2 = sorted(mylist, key=itemgetter(1))
        for x in mylist2:
            item = NoSave(ConfigInteger(limits=(1, 99), default=99))
            item.value = x[1]
            res = getConfigListEntry(x[0], item)
            self.list.append(res)

        self['config'].list = self.list
        self['config'].l.setList(self.list)
Ejemplo n.º 3
0
	def updateList(self):
		self.list = []
		
		if fileExists("/tmp/bhspeed.tmp"):
			os_remove("/tmp/bhspeed.tmp")
		
		for plug in self.pluglist:
			cmd = "opkg status %s >> /tmp/bhspeed.tmp" % (plug[1])
			system(cmd)
		
		for plug in self.pluglist:
			item = NoSave(ConfigSelection(default = "Enabled", choices = [("Enabled", _("Enabled")), ("Disabled", _("Disabled"))]))
			installed = self.checkInst(plug[1])
			if installed == True:
				item.value = "Enabled"
			else:
				item.value = "Disabled"
			
			res = getConfigListEntry(plug[0], item)
			self.list.append(res)
		
		self["config"].list = self.list
		self["config"].l.setList(self.list)
		
		self["lab1"].setText(_("Please disable ALL the plugins you don't need to use.\nThis will Speed Up Image Performance."))
Ejemplo n.º 4
0
	def buildMy_rec(self, device):
		device2 = re.sub('[0-9]', '', device)
		devicetype = path.realpath('/sys/block/' + device2 + '/device')
		d2 = device
		name = _("HARD DISK: ")
		if path.exists(resolveFilename(SCOPE_ACTIVE_SKIN, "vixcore/dev_hdd.png")):
			mypixmap = resolveFilename(SCOPE_ACTIVE_SKIN, "vixcore/dev_hdd.png")
		else:
			mypixmap = '/usr/lib/enigma2/python/Plugins/SystemPlugins/ViX/images/dev_hdd.png'
		model = file('/sys/block/' + device2 + '/device/model').read()
		model = str(model).replace('\n', '')
		des = ''
		if devicetype.find('usb') != -1:
			name = _('USB: ')
			if path.exists(resolveFilename(SCOPE_ACTIVE_SKIN, "vixcore/dev_usb.png")):
				mypixmap = resolveFilename(SCOPE_ACTIVE_SKIN, "vixcore/dev_usb.png")
			else:
				mypixmap = '/usr/lib/enigma2/python/Plugins/SystemPlugins/ViX/images/dev_usb.png'
		name += model
		d1 = _("None")
		dtype = _("unavailable")
		f = open('/proc/mounts', 'r')
		for line in f.readlines():
			if line.find(device) != -1:
				parts = line.strip().split()
				d1 = parts[1]
				dtype = parts[2]
				break
		f.close()

		size = Harddisk(device).diskSize()
		if ((float(size) / 1024) / 1024) >= 1:
			des = _("Size: ") + str(round(((float(size) / 1024) / 1024), 2)) + _("TB")
		elif (size / 1024) >= 1:
			des = _("Size: ") + str(round((float(size) / 1024), 2)) + _("GB")
		elif size >= 1:
			des = _("Size: ") + str(size) + _("MB")
		else:
			des = _("Size: ") + _("unavailable")

		item = NoSave(ConfigSelection(default='/media/' + device, choices=[('/media/' + device, '/media/' + device),
																		   ('/media/hdd', '/media/hdd'),
																		   ('/media/hdd2', '/media/hdd2'),
																		   ('/media/hdd3', '/media/hdd3'),
																		   ('/media/usb', '/media/usb'),
																		   ('/media/usb2', '/media/usb2'),
																		   ('/media/usb3', '/media/usb3')]))
		if dtype == 'Linux':
			dtype = 'ext3'
		else:
			dtype = 'auto'
		item.value = d1.strip()
		text = name + ' ' + des + ' /dev/' + device
		res = getConfigListEntry(text, item, device, dtype)

		if des != '' and self.list.append(res):
			pass
Ejemplo n.º 5
0
	def updateList(self):
		self.list = []
		for device in self.devices:
			item = NoSave(ConfigSelection(default = "No mapeado", choices = self.get_Choices()))
			item.value = self.get_currentPoint(device[1])
			res = getConfigListEntry(device[0], item, device[1])
			self.list.append(res)

		self["config"].list = self.list
		self["config"].l.setList(self.list)
		self["Linconn"].hide()
Ejemplo n.º 6
0
    def buildMy_rec(self, device):
        mypath = ItalysatGetSkinPath()
        device2 = re.sub('[0-9]', '', device)
        devicetype = path.realpath('/sys/block/' + device2 + '/device')
        d2 = device
        name = _('HARD DISK: ')
        mypixmap = mypath + 'italy_icons/dev_hdd.png'
        model = file('/sys/block/' + device2 + '/device/model').read()
        model = str(model).replace('\n', '')
        des = ''
        if devicetype.find('usb') != -1:
            name = _('USB: ')
            mypixmap = mypath + 'italy_icons/dev_usb.png'
        name += model
        d1 = _('None')
        dtype = _('unavailable')
        f = open('/proc/mounts', 'r')
        for line in f.readlines():
            if line.find(device) != -1:
                parts = line.strip().split()
                d1 = parts[1]
                dtype = parts[2]
                break

        f.close()
        size = Harddisk(device).diskSize()
        if float(size) / 1024 / 1024 >= 1:
            des = _('Size: ') + str(round(float(size) / 1024 / 1024, 2)) + _('TB')
        elif size / 1024 >= 1:
            des = _('Size: ') + str(round(float(size) / 1024, 2)) + _('GB')
        elif size >= 1:
            des = _('Size: ') + str(size) + _('MB')
        else:
            des = _('Size: ') + _('unavailable')
        item = NoSave(ConfigSelection(default='/media/' + device, choices=[('/media/' + device, '/media/' + device),
         ('/media/hdd', '/media/hdd'),
         ('/media/hdd2', '/media/hdd2'),
         ('/media/hdd3', '/media/hdd3'),
         ('/media/usb', '/media/usb'),
         ('/media/usb2', '/media/usb2'),
         ('/media/usb3', '/media/usb3')]))
        if d1 == '/media/italyboot':
            item = NoSave(ConfigSelection(default='/media/italyboot', choices=[('/media/italyboot', '/media/italyboot')]))
        if dtype == 'Linux':
            dtype = 'ext3'
        else:
            dtype = 'auto'
        item.value = d1.strip()
        text = name + ' ' + des + ' /dev/' + device
        res = getConfigListEntry(text, item, device, dtype)
        if des != '' and self.list.append(res):
            pass
Ejemplo n.º 7
0
	def __init__(self, session, filterset, excludes, includes):
		Screen.__init__(self, session)

		# Summary
		self.setup_title = _("AutoTimer Filters")
		self.onChangedEntry = []

		self.typeSelection = NoSave(ConfigSelection(choices = [
			("title", _("in Title")),
			("short", _("in Shortdescription")),
			("desc", _("in Description")),
			("day", _("on Weekday"))]
		))
		self.typeSelection.addNotifier(self.refresh, initial_call = False)

		self.enabled = NoSave(ConfigYesNo(default = filterset))
		self.enabled.addNotifier(self.refresh, initial_call = False)

		self.excludes = excludes
		self.includes = includes
		self.oldexcludes = excludes
		self.oldincludes = includes
		self.idx = 0

		self.reloadList()

		ConfigListScreen.__init__(self, self.list, session = session, on_change = self.changed)

		# Initialize Buttons
		self["key_red"] = StaticText(_("Cancel"))
		self["key_green"] = StaticText(_("Save"))
		self["key_yellow"] = StaticText(_("Delete"))
		self["key_blue"] = StaticText(_("New"))

		self["HelpWindow"] = Pixmap()
		self["HelpWindow"].hide()
		self["VKeyIcon"] = Boolean(False)

		# Define Actions
		self["actions"] = ActionMap(["SetupActions", "ColorActions"],
			{
				"cancel": self.cancel,
				"save": self.save,
				"yellow": self.remove,
				"blue": self.new
			}
		)

		# Trigger change
		self.changed()

		self.onLayoutFinish.append(self.setCustomTitle)
    def __init__(self, session, services):
        Screen.__init__(self, session)

        # Summary
        self.setup_title = _("EPGRefresh Services")
        self.onChangedEntry = []

        # We need to copy the list to be able to ignore changes
        self.services = (services[0][:], services[1][:])

        self.typeSelection = NoSave(ConfigSelection(choices=[("channels", _("Channels")), ("bouquets", _("Bouquets"))]))
        self.typeSelection.addNotifier(self.refresh, initial_call=False)

        self.reloadList()

        ConfigListScreen.__init__(self, self.list, session=session, on_change=self.changed)

        # Initialize StaticTexts
        self["key_red"] = StaticText(_("Cancel"))
        self["key_green"] = StaticText(_("OK"))
        self["key_yellow"] = StaticText(_("delete"))
        self["key_blue"] = StaticText(_("New"))

        # Define Actions
        self["actions"] = ActionMap(
            ["SetupActions", "ColorActions"],
            {"cancel": self.cancel, "save": self.save, "yellow": self.removeService, "blue": self.newService},
        )

        # Trigger change
        self.changed()

        self.onLayoutFinish.append(self.setCustomTitle)
Ejemplo n.º 9
0
    def __init__(self, session):
        Screen.__init__(self, session)

        # Buttons
        self["key_red"] = StaticText(_("Cancel"))
        self["key_green"] = StaticText(_("OK"))
        self["key_yellow"] = StaticText(_("New"))
        self["key_blue"] = StaticText(_("Delete"))

        # Summary
        self.setup_title = "Growlee Configuration"
        self.onChangedEntry = []

        # Define Actions
        self["setupActions"] = ActionMap(
            ["SetupActions", "ColorActions"],
            {"blue": self.delete, "yellow": self.new, "cancel": self.keyCancel, "save": self.keySave},
        )

        self.hostElement = NoSave(ConfigSelection(choices=[(x, x.name.value) for x in config.plugins.growlee.hosts]))
        self.hostElement.addNotifier(self.setupList, initial_call=False)
        ConfigListScreen.__init__(self, [], session=session, on_change=self.changed)
        self.cur = self.hostElement.value

        # Trigger change
        self.setupList()
        self.changed()
Ejemplo n.º 10
0
	def createConfig(self):
		self.usernameEntry = None
		self.passwordEntry = None
		self.username = None
		self.password = None

		username = "******"
		password = ""
		if os_path.exists(self.cache_file):
			print 'Loading user cache from ',self.cache_file
			try:
				self.hostdata = load_cache(self.cache_file)
				username = self.hostdata['username']
				password = self.hostdata['password']
			except:
				pass

		self.username = NoSave(ConfigText(default = username, visible_width = 50, fixed_size = False))
		self.password = NoSave(ConfigPassword(default = password, visible_width = 50, fixed_size = False))
Ejemplo n.º 11
0
	def __init__(self, session, entry, index):
		self.skin = OscamServerEntryConfigScreen.skin
		self.session = session
		Screen.__init__(self, session)

		if entry == None:
			entry = oscamServer()
		self.index = index

		# Server Adresse IP-Format oder TextFormat?
		serverIP = self.isIPaddress(entry.serverIP)
		if serverIP and config.plugins.OscamStatus.useIP.value:
			self.isIP = True
		else:
			self.isIP = False

		serverPort = int(entry.serverPort)

		self.serverNameConfigEntry = NoSave(ConfigText(default = entry.serverName, fixed_size = False, visible_width=20))
		if self.isIP:
			self.serverIPConfigEntry = NoSave(ConfigIP( default = serverIP, auto_jump=True))
		else:
			self.serverIPConfigEntry = NoSave(ConfigText(default = entry.serverIP, fixed_size = False, visible_width=20))
			self.serverIPConfigEntry.setUseableChars(u'1234567890aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ.-_')
		self.portConfigEntry       = NoSave(ConfigInteger(default = serverPort, limits=(0,65536)))
		self.usernameConfigEntry   = NoSave(ConfigText(default = entry.username, fixed_size = False, visible_width=20))
		self.passwordConfigEntry   = NoSave(ConfigPassword(default = entry.password, fixed_size = False))
		self.useSSLConfigEntry     = NoSave(ConfigYesNo(entry.useSSL))

		ConfigListScreen.__init__(self, [], session = session)
		self.createSetup()

		self["title"] = StaticText(_("Oscam Server Setup"))
		self["ButtonRedtext"] = StaticText(_("return"))
		self["ButtonGreentext"] = StaticText(_("save"))
		self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
		{
			"red": self.Close,
			"green": self.Save,
			"cancel": self.Close
		}, -1)

		self.onLayoutFinish.append(self.LayoutFinished)
Ejemplo n.º 12
0
	def createConfig(self):
		self.sharetypelist = []
		self.sharetypelist.append(("nfs", _("NFS share")))
		self.sharetypelist.append(("cifs", _("CIFS share")))

		mounttype = self.mountinfo['mounttype']
		active = self.mountinfo['active']
		ip = self.convertIP(self.mountinfo['ip'])
		sharename = self.mountinfo['sharename']
		sharedir = self.mountinfo['sharedir']
		options = self.mountinfo['options']
		username = self.mountinfo['username']
		password = self.mountinfo['password']
		hdd_replacement = self.mountinfo['hdd_replacement']
		if mounttype == "nfs":
			defaultOptions = iAutoMount.DEFAULT_OPTIONS_NFS['options']
		else:
			defaultOptions = iAutoMount.DEFAULT_OPTIONS_CIFS['options']

		self._cfgActive = NoSave(ConfigOnOff(default = active))
		self._cfgIp = NoSave(ConfigIP(default = ip))
		self._cfgSharename = NoSave(ConfigText(default = sharename, visible_width = 50, fixed_size = False))
		self._cfgSharedir = NoSave(ConfigText(default = sharedir, visible_width = 50, fixed_size = False))
		self._cfgOptions = NoSave(ConfigText(default = defaultOptions, visible_width = 50, fixed_size = False))
		if options is not False:
			self._cfgOptions.value = options
		self._cfgUsername = NoSave(ConfigText(default = username, visible_width = 50, fixed_size = False))
		self._cfgPassword = NoSave(ConfigPassword(default = password, visible_width = 50, fixed_size = False))
		self._cfgMounttype = NoSave(ConfigSelection(self.sharetypelist, default = mounttype ))
		self._cfgHddReplacement = NoSave(ConfigYesNo(default = hdd_replacement))
Ejemplo n.º 13
0
	def updateList(self):
		self.sub_menu_sort = NoSave(ConfigDictionarySet())
		self.sub_menu_sort.value = config.usage.menu_sort_weight.getConfigValue(self.menuID, "submenu") or None
		idx = 0
		for x in self.list:
			entry = list(self.list.pop(idx))
			m_weight = self.sub_menu_sort.getConfigValue(entry[2], "sort") or entry[3]
			entry.append(m_weight)
			self.list.insert(idx, tuple(entry))
			self.sub_menu_sort.changeConfigValue(entry[2], "sort", m_weight)
			if not self.sort_mode and self.sub_menu_sort.getConfigValue(entry[2], "hidden"):
				self.list.remove(x)
			idx += 1
Ejemplo n.º 14
0
	def newConfig(self):
		if self["config"].getCurrent() == self.mounttypeEntry:
			if self.mounttypeConfigEntry.value == "nfs":
				defaultOptions = "rw,nolock,tcp"
			else:
				defaultOptions = "rw,utf8"
			if self.mountinfo.has_key('options'):
				options = self.mountinfo['options']
			else:
				options = defaultOptions
			self.optionsConfigEntry = NoSave(ConfigText(default = defaultOptions, visible_width = 50, fixed_size = False))
			if options is not False:
				self.optionsConfigEntry.value = options
			self.createSetup()
Ejemplo n.º 15
0
	def createSetup(self):
		if self._cfgOptions.value == self._cfgOptions.default:
			if self._cfgMounttype.value == "nfs":
				self._cfgOptions = NoSave(ConfigText(default = iAutoMount.DEFAULT_OPTIONS_NFS['options'], visible_width = 50, fixed_size = False))
			else:
				self._cfgOptions = NoSave(ConfigText(default = iAutoMount.DEFAULT_OPTIONS_CIFS['options'], visible_width = 50, fixed_size = False))
		optionsEntry = getConfigListEntry(_("Mount options"), self._cfgOptions)

		lst = [
			getConfigListEntry(_("Active"), self._cfgActive),
			getConfigListEntry(_("Local share name"), self._cfgSharename),
			getConfigListEntry(_("Mount type"), self._cfgMounttype),
			getConfigListEntry(_("Server IP"), self._cfgIp),
			getConfigListEntry(_("Server share"), self._cfgSharedir),
			getConfigListEntry(_("use as HDD replacement"), self._cfgHddReplacement),
			optionsEntry,
		]
		if self._cfgMounttype.value == "cifs":
			lst.extend([
				getConfigListEntry(_("Username"), self._cfgUsername),
				getConfigListEntry(_("Password"), self._cfgPassword)
			])
		self["config"].list = lst
		self["config"].onSelectionChanged.append(self.selectionChanged)
	def __init__(self, session, servicerestriction, servicelist, bouquetlist):
		Screen.__init__(self, session)

		# Summary
		self.setup_title = _("AutoTimer Services")
		self.onChangedEntry = []

		self.services = (
			servicelist[:],
			bouquetlist[:]
		)

		self.enabled = NoSave(ConfigEnableDisable(default = servicerestriction))
		self.typeSelection = NoSave(ConfigSelection(choices = [
			("channels", _("Channels")),
			("bouquets", _("Bouquets"))]
		))
		self.typeSelection.addNotifier(self.refresh, initial_call = False)

		self.reloadList()

		ConfigListScreen.__init__(self, self.list, session = session, on_change = self.changed)

		# Initialize Buttons
		self["key_red"] = StaticText(_("Cancel"))
		self["key_green"] = StaticText(_("OK"))
		self["key_yellow"] = StaticText(_("Delete"))
		self["key_blue"] = StaticText(_("New"))

		# Define Actions
		self["actions"] = ActionMap(["SetupActions", "ColorActions"],
			{
				"cancel": self.cancel,
				"save": self.save,
				"yellow": self.remove,
				"blue": self.new
			}
		)

		# Trigger change
		self.changed()

		self.onLayoutFinish.append(self.setCustomTitle)
Ejemplo n.º 17
0
class serienRecMarkerSetup(serienRecBaseScreen, Screen, ConfigListScreen,
                           HelpableScreen):
    def __init__(self, session, serien_name, serien_wlid, serien_id,
                 serien_fsid):
        serienRecBaseScreen.__init__(self, session)
        Screen.__init__(self, session)
        HelpableScreen.__init__(self)
        self.list = []
        self.session = session
        self.serien_name = serien_name
        self.serien_id = serien_id
        self.serien_wlid = serien_wlid
        self.serien_fsid = serien_fsid
        self.database = SRDatabase(serienRecDataBaseFilePath)
        self.HilfeTexte = {}
        self.fromTime_index = 1
        self.toTime_index = 1
        self.margin_before_index = 1
        self.margin_after_index = 1
        self.NoOfRecords_index = 1

        self["actions"] = HelpableActionMap(
            self, "SerienRecorderActions", {
                "red":
                (self.cancel,
                 "Änderungen verwerfen und zurück zur Serien-Marker-Ansicht"),
                "green":
                (self.save,
                 "Einstellungen speichern und zurück zur Serien-Marker-Ansicht"
                 ),
                "blue": (self.resetCover, "Cover zurücksetzen"),
                "cancel":
                (self.cancel,
                 "Änderungen verwerfen und zurück zur Serien-Marker-Ansicht"),
                "ok": (self.ok, "Fenster für Verzeichnisauswahl öffnen"),
                "up": (self.keyUp, "eine Zeile nach oben"),
                "down": (self.keyDown, "eine Zeile nach unten"),
                "startTeletext": (self.showAbout, "Über dieses Plugin"),
            }, -1)
        self.helpList[0][2].sort()

        self["helpActions"] = ActionMap([
            "SerienRecorderActions",
        ], {
            "displayHelp": self.showHelp,
            "displayHelp_long": self.showManual,
        }, 0)

        self.setupSkin()
        if config.plugins.serienRec.showAllButtons.value:
            setMenuTexts(self)

        (AufnahmeVerzeichnis, Staffelverzeichnis, Vorlaufzeit, Nachlaufzeit,
         AnzahlWiederholungen, AufnahmezeitVon, AufnahmezeitBis,
         preferredChannel, useAlternativeChannel, vps, excludedWeekdays, tags,
         addToDatabase, updateFromEPG, skipSeriesServer, autoAdjust,
         epgSeriesName) = self.database.getMarkerSettings(self.serien_id)

        if not AufnahmeVerzeichnis:
            AufnahmeVerzeichnis = ""
        self.savetopath = ConfigText(default=AufnahmeVerzeichnis,
                                     fixed_size=False,
                                     visible_width=50)
        self.seasonsubdir = ConfigSelection(choices=[
            ("-1", "Gemäß Setup (dzt. %s)" %
             str(config.plugins.serienRec.seasonsubdir.value).replace(
                 "True", "Ja").replace("False", "Nein")), ("0", "Nein"),
            ("1", "Ja")
        ],
                                            default=str(Staffelverzeichnis))

        if str(Vorlaufzeit).isdigit():
            self.margin_before = ConfigInteger(Vorlaufzeit, (0, 999))
            self.enable_margin_before = ConfigYesNo(default=True)
        else:
            self.margin_before = ConfigInteger(
                config.plugins.serienRec.margin_before.value, (0, 999))
            self.enable_margin_before = ConfigYesNo(default=False)

        if str(Nachlaufzeit).isdigit():
            self.margin_after = ConfigInteger(Nachlaufzeit, (0, 999))
            self.enable_margin_after = ConfigYesNo(default=True)
        else:
            self.margin_after = ConfigInteger(
                config.plugins.serienRec.margin_after.value, (0, 999))
            self.enable_margin_after = ConfigYesNo(default=False)

        if str(AnzahlWiederholungen).isdigit():
            self.NoOfRecords = ConfigInteger(AnzahlWiederholungen, (1, 9))
            self.enable_NoOfRecords = ConfigYesNo(default=True)
        else:
            self.NoOfRecords = ConfigInteger(
                config.plugins.serienRec.NoOfRecords.value, (1, 9))
            self.enable_NoOfRecords = ConfigYesNo(default=False)

        if str(AufnahmezeitVon).isdigit():
            self.fromTime = ConfigClock(default=int(AufnahmezeitVon) * 60 +
                                        time.timezone)
            self.enable_fromTime = ConfigYesNo(default=True)
        else:
            self.fromTime = ConfigClock(default=(
                (config.plugins.serienRec.globalFromTime.value[0] * 60) +
                config.plugins.serienRec.globalFromTime.value[1]) * 60 +
                                        time.timezone)
            self.enable_fromTime = ConfigYesNo(default=False)

        if str(AufnahmezeitBis).isdigit():
            self.toTime = ConfigClock(default=int(AufnahmezeitBis) * 60 +
                                      time.timezone)
            self.enable_toTime = ConfigYesNo(default=True)
        else:
            self.toTime = ConfigClock(default=(
                (config.plugins.serienRec.globalToTime.value[0] * 60) +
                config.plugins.serienRec.globalToTime.value[1]) * 60 +
                                      time.timezone)
            self.enable_toTime = ConfigYesNo(default=False)

        if str(vps).isdigit():
            self.override_vps = ConfigYesNo(default=True)
            self.enable_vps = ConfigYesNo(default=bool(vps & 0x1))
            self.enable_vps_savemode = ConfigYesNo(default=bool(vps & 0x2))
        else:
            self.override_vps = ConfigYesNo(default=False)
            self.enable_vps = ConfigYesNo(default=False)
            self.enable_vps_savemode = ConfigYesNo(default=False)

        if str(addToDatabase).isdigit():
            self.addToDatabase = ConfigYesNo(default=bool(addToDatabase))
        else:
            self.addToDatabase = ConfigYesNo(default=True)

        if str(updateFromEPG).isdigit():
            self.updateFromEPG = ConfigYesNo(default=bool(updateFromEPG))
            self.enable_updateFromEPG = ConfigYesNo(default=True)
        else:
            self.updateFromEPG = ConfigYesNo(
                default=config.plugins.serienRec.eventid.value)
            self.enable_updateFromEPG = ConfigYesNo(default=False)

        if str(skipSeriesServer).isdigit():
            self.skipSeriesServer = ConfigYesNo(default=bool(skipSeriesServer))
            self.enable_skipSeriesServer = ConfigYesNo(default=True)
        else:
            self.skipSeriesServer = ConfigYesNo(
                default=config.plugins.serienRec.tvplaner_skipSerienServer.
                value)
            self.enable_skipSeriesServer = ConfigYesNo(default=False)

        if str(autoAdjust).isdigit():
            self.autoAdjust = ConfigYesNo(default=bool(autoAdjust))
            self.enable_autoAdjust = ConfigYesNo(default=True)
        else:
            self.autoAdjust = ConfigYesNo(default=False)
            self.enable_autoAdjust = ConfigYesNo(default=False)

        self.preferredChannel = ConfigSelection(choices=[("1", "Standard"),
                                                         ("0", "Alternativ")],
                                                default=str(preferredChannel))
        self.useAlternativeChannel = ConfigSelection(
            choices=[("-1", "Gemäß Setup (dzt. %s)" % str(
                config.plugins.serienRec.useAlternativeChannel.value).replace(
                    "True", "Ja").replace("False", "Nein")), ("0", "Nein"),
                     ("1", "Ja")],
            default=str(useAlternativeChannel))

        # excluded weekdays
        # each weekday is represented by a bit in the database field
        # 0 = Monday to 6 = Sunday, so if all weekdays are excluded we got 1111111 = 127
        if str(excludedWeekdays).isdigit():
            self.enable_excludedWeekdays = ConfigYesNo(default=True)
            self.excludeMonday = ConfigYesNo(default=bool(excludedWeekdays
                                                          & (1 << 0)))
            self.excludeTuesday = ConfigYesNo(default=bool(excludedWeekdays
                                                           & (1 << 1)))
            self.excludeWednesday = ConfigYesNo(default=bool(excludedWeekdays
                                                             & (1 << 2)))
            self.excludeThursday = ConfigYesNo(default=bool(excludedWeekdays
                                                            & (1 << 3)))
            self.excludeFriday = ConfigYesNo(default=bool(excludedWeekdays
                                                          & (1 << 4)))
            self.excludeSaturday = ConfigYesNo(default=bool(excludedWeekdays
                                                            & (1 << 5)))
            self.excludeSunday = ConfigYesNo(default=bool(excludedWeekdays
                                                          & (1 << 6)))
        else:
            self.enable_excludedWeekdays = ConfigYesNo(default=False)
            self.excludeMonday = ConfigYesNo(default=False)
            self.excludeTuesday = ConfigYesNo(default=False)
            self.excludeWednesday = ConfigYesNo(default=False)
            self.excludeThursday = ConfigYesNo(default=False)
            self.excludeFriday = ConfigYesNo(default=False)
            self.excludeSaturday = ConfigYesNo(default=False)
            self.excludeSunday = ConfigYesNo(default=False)

        # tags
        if tags is None or len(tags) == 0:
            self.serienmarker_tags = []
        else:
            self.serienmarker_tags = pickle.loads(tags)
        self.tags = NoSave(
            ConfigSelection(choices=[
                len(self.serienmarker_tags) == 0 and "Keine"
                or ' '.join(self.serienmarker_tags)
            ]))

        # EPG series name
        if epgSeriesName is None:
            epgSeriesName = ""
        self.epgSeriesName = ConfigText(default=epgSeriesName,
                                        fixed_size=False,
                                        visible_width=50)

        self.changedEntry()
        ConfigListScreen.__init__(self, self.list)
        self.setInfoText()
        self['config_information_text'].setText(
            self.HilfeTexte[self.savetopath])
        self.onLayoutFinish.append(self.setSkinProperties)

    def callHelpAction(self, *args):
        HelpableScreen.callHelpAction(self, *args)

    def setSkinProperties(self):
        super(self.__class__, self).setSkinProperties()

        self.num_bt_text = ([buttonText_na, buttonText_na, "Abbrechen"], [
            buttonText_na, buttonText_na, buttonText_na
        ], [buttonText_na, buttonText_na,
            buttonText_na], [buttonText_na, buttonText_na, "Hilfe"],
                            [buttonText_na, buttonText_na, buttonText_na])

        self['text_red'].setText("Abbrechen")
        self['text_green'].setText("Speichern")
        if config.plugins.serienRec.downloadCover.value:
            self['text_blue'].setText("Cover auswählen")
        self['text_ok'].setText("Ordner auswählen")

        super(self.__class__, self).startDisplayTimer()

    def setupSkin(self):
        self.skin = None
        InitSkin(self)

        self['config'] = ConfigList([])
        self['config'].show()

        self['config_information'].show()
        self['config_information_text'].show()

        self['title'].setText("Serien-Marker - Einstellungen für '%s':" %
                              self.serien_name)
        if not config.plugins.serienRec.showAllButtons.value:
            self['text_0'].setText("Abbrechen")
            self['text_1'].setText("About")

            self['bt_red'].show()
            self['bt_green'].show()
            if config.plugins.serienRec.downloadCover.value:
                self['bt_blue'].show()
            self['bt_ok'].show()
            self['bt_exit'].show()
            self['bt_text'].show()

            self['text_red'].show()
            self['text_green'].show()
            if config.plugins.serienRec.downloadCover.value:
                self['text_blue'].show()
            self['text_ok'].show()
            self['text_0'].show()
            self['text_1'].show()
            self['text_2'].show()
            self['text_3'].show()
            self['text_4'].show()
        else:
            self['text_0'].hide()
            self['text_1'].hide()
            self['text_2'].hide()
            self['text_3'].hide()
            self['text_4'].hide()
            self['text_5'].hide()
            self['text_6'].hide()
            self['text_7'].hide()
            self['text_8'].hide()
            self['text_9'].hide()

            self['bt_0'].hide()
            self['bt_1'].hide()
            self['bt_2'].hide()
            self['bt_3'].hide()
            self['bt_4'].hide()
            self['bt_5'].hide()
            self['bt_6'].hide()
            self['bt_7'].hide()
            self['bt_8'].hide()
            self['bt_9'].hide()

    def createConfigList(self):
        self.list = []
        self.list.append(
            getConfigListEntry("Abweichender Speicherort der Aufnahmen:",
                               self.savetopath))
        if self.savetopath.value:
            self.list.append(
                getConfigListEntry("Staffel-Verzeichnis anlegen:",
                                   self.seasonsubdir))
            self.margin_before_index += 1

        self.list.append(
            getConfigListEntry("Alternativer Serienname im EPG:",
                               self.epgSeriesName))
        self.margin_after_index = self.margin_before_index + 1

        self.list.append(
            getConfigListEntry("Aktiviere abweichenden Timervorlauf:",
                               self.enable_margin_before))
        if self.enable_margin_before.value:
            self.list.append(
                getConfigListEntry("      Timervorlauf (in Min.):",
                                   self.margin_before))
            self.margin_after_index += 1

        self.NoOfRecords_index = self.margin_after_index + 1

        self.list.append(
            getConfigListEntry("Aktiviere abweichenden Timernachlauf:",
                               self.enable_margin_after))
        if self.enable_margin_after.value:
            self.list.append(
                getConfigListEntry("      Timernachlauf (in Min.):",
                                   self.margin_after))
            self.NoOfRecords_index += 1

        self.fromTime_index = self.NoOfRecords_index + 1

        self.list.append(
            getConfigListEntry("Aktiviere abweichende Anzahl der Aufnahmen:",
                               self.enable_NoOfRecords))
        if self.enable_NoOfRecords.value:
            self.list.append(
                getConfigListEntry("      Anzahl der Aufnahmen:",
                                   self.NoOfRecords))
            self.fromTime_index += 1

        self.toTime_index = self.fromTime_index + 1

        self.list.append(
            getConfigListEntry(
                "Aktiviere abweichende Früheste Zeit für Timer:",
                self.enable_fromTime))
        if self.enable_fromTime.value:
            self.list.append(
                getConfigListEntry("      Früheste Zeit für Timer:",
                                   self.fromTime))
            self.toTime_index += 1

        self.list.append(
            getConfigListEntry(
                "Aktiviere abweichende Späteste Zeit für Timer:",
                self.enable_toTime))
        if self.enable_toTime.value:
            self.list.append(
                getConfigListEntry("      Späteste Zeit für Timer:",
                                   self.toTime))

        self.list.append(
            getConfigListEntry(
                "Aktiviere abweichende Timeraktualisierung aus dem EPG:",
                self.enable_updateFromEPG))
        if self.enable_updateFromEPG.value:
            self.list.append(
                getConfigListEntry(
                    "      Versuche Timer aus dem EPG zu aktualisieren:",
                    self.updateFromEPG))

        if config.plugins.serienRec.tvplaner.value:
            self.list.append(
                getConfigListEntry(
                    "Aktiviere abweichende Timererstellung nur aus der TV-Planer E-Mail:",
                    self.enable_skipSeriesServer))
            if self.enable_skipSeriesServer.value:
                self.list.append(
                    getConfigListEntry(
                        "      Timer nur aus der TV-Planer E-Mail anlegen:",
                        self.skipSeriesServer))

        from .SerienRecorder import VPSPluginAvailable
        if VPSPluginAvailable:
            self.list.append(
                getConfigListEntry("Aktiviere abweichende VPS Einstellungen:",
                                   self.override_vps))
            if self.override_vps.value:
                self.list.append(
                    getConfigListEntry(
                        "      VPS für diesen Serien-Marker aktivieren:",
                        self.enable_vps))
                if self.enable_vps.value:
                    self.list.append(
                        getConfigListEntry(
                            "            Sicherheitsmodus aktivieren:",
                            self.enable_vps_savemode))

        if isVTI():
            self.list.append(
                getConfigListEntry(
                    "Aktiviere abweichende Aufnahmezeitenanpassung aus den EPG Daten:",
                    self.enable_autoAdjust))
            if self.enable_autoAdjust.value:
                self.list.append(
                    getConfigListEntry(
                        "      Aufnahmezeiten automatisch an EPG Daten anpassen:",
                        self.autoAdjust))

        self.list.append(
            getConfigListEntry("Timer in Timer-Liste speichern:",
                               self.addToDatabase))
        self.list.append(
            getConfigListEntry("Bevorzugte Sender-Liste:",
                               self.preferredChannel))
        self.list.append(
            getConfigListEntry("Verwende alternative Sender bei Konflikten:",
                               self.useAlternativeChannel))

        self.list.append(
            getConfigListEntry(
                "Wochentage von der Timererstellung ausschließen:",
                self.enable_excludedWeekdays))
        if self.enable_excludedWeekdays.value:
            self.list.append(
                getConfigListEntry("      Montag:", self.excludeMonday))
            self.list.append(
                getConfigListEntry("      Dienstag:", self.excludeTuesday))
            self.list.append(
                getConfigListEntry("      Mittwoch:", self.excludeWednesday))
            self.list.append(
                getConfigListEntry("      Donnerstag:", self.excludeThursday))
            self.list.append(
                getConfigListEntry("      Freitag:", self.excludeFriday))
            self.list.append(
                getConfigListEntry("      Samstag:", self.excludeSaturday))
            self.list.append(
                getConfigListEntry("      Sonntag:", self.excludeSunday))

        self.list.append(getConfigListEntry("Tags:", self.tags))

    def updateMenuValues(self):
        if self['config'].instance.getCurrentIndex(
        ) == self.margin_before_index:
            if self.enable_margin_before.value and not self.margin_before.value:
                self.margin_before.value = config.plugins.serienRec.margin_before.value
        elif self['config'].instance.getCurrentIndex(
        ) == self.margin_after_index:
            if self.enable_margin_after.value and not self.margin_after.value:
                self.margin_after.value = config.plugins.serienRec.margin_after.value
        elif self['config'].instance.getCurrentIndex(
        ) == self.NoOfRecords_index:
            if self.enable_NoOfRecords.value and not self.NoOfRecords.value:
                self.NoOfRecords.value = config.plugins.serienRec.NoOfRecords.value
        elif self['config'].instance.getCurrentIndex() == self.fromTime_index:
            if self.enable_fromTime.value and not self.fromTime.value:
                self.fromTime.value = config.plugins.serienRec.globalFromTime.value
        elif self['config'].instance.getCurrentIndex() == self.toTime_index:
            if self.enable_toTime.value and not self.toTime.value:
                self.toTime.value = config.plugins.serienRec.globalToTime.value
        self.changedEntry()

    def changedEntry(self):
        self.createConfigList()
        self['config'].setList(self.list)

    def keyLeft(self):
        if self['config'].getCurrent()[1] == self.tags:
            self.chooseTags()
        else:
            ConfigListScreen.keyLeft(self)
            self.updateMenuValues()

    def keyRight(self):
        if self['config'].getCurrent()[1] == self.tags:
            self.chooseTags()
        else:
            ConfigListScreen.keyRight(self)
            self.updateMenuValues()

    def keyDown(self):
        # self.changedEntry()
        if self['config'].instance.getCurrentIndex() >= (len(self.list) - 1):
            self['config'].instance.moveSelectionTo(0)
        else:
            self['config'].instance.moveSelection(
                self['config'].instance.moveDown)

        # self.setInfoText()
        try:
            text = self.HilfeTexte[self['config'].getCurrent()[1]]
        except:
            text = "Keine Information verfügbar."
        self["config_information_text"].setText(text)

        if self['config'].getCurrent()[1] == self.savetopath:
            self['bt_ok'].show()
            self['text_ok'].show()
        else:
            self['bt_ok'].hide()
            self['text_ok'].hide()

    def keyUp(self):
        # self.changedEntry()
        if self['config'].instance.getCurrentIndex() < 1:
            self['config'].instance.moveSelectionTo(len(self.list) - 1)
        else:
            self['config'].instance.moveSelection(
                self['config'].instance.moveUp)

        # self.setInfoText()
        try:
            text = self.HilfeTexte[self['config'].getCurrent()[1]]
        except:
            text = "Keine Information verfügbar."
        self["config_information_text"].setText(text)

        if self['config'].getCurrent()[1] == self.savetopath:
            self['bt_ok'].show()
            self['text_ok'].show()
        else:
            self['bt_ok'].hide()
            self['text_ok'].hide()

    def ok(self):
        if self['config'].getCurrent()[1] == self.tags:
            self.chooseTags()
        elif self['config'].getCurrent()[1] == self.epgSeriesName:
            value = self.serien_name if len(
                self.epgSeriesName.value) == 0 else self.epgSeriesName.value
            self.session.openWithCallback(self.epgSeriesNameEditFinished,
                                          NTIVirtualKeyBoard,
                                          title="Serien Titel eingeben:",
                                          text=value)
        else:
            if self['config'].getCurrent()[1] == self.savetopath:
                if config.plugins.serienRec.seriensubdir.value:
                    self.session.openWithCallback(
                        self.openFileSelector,
                        MessageBox,
                        "Hier wird das direkte Aufnahme-Verzeichnis für die Serie ausgewählt, es wird nicht automatisch ein Serien-Ordner angelegt.\n\nMit der blauen Taste kann ein Serien-Ordner manuell angelegt werden.",
                        MessageBox.TYPE_INFO,
                        timeout=15)
                else:
                    self.openFileSelector(True)

    def openFileSelector(self, answer):
        if not self.savetopath.value:
            start_dir = config.plugins.serienRec.savetopath.value
        else:
            start_dir = self.savetopath.value

        from .SerienRecorderFileListScreen import serienRecFileListScreen
        self.session.openWithCallback(self.selectedMediaFile,
                                      serienRecFileListScreen, start_dir,
                                      "Aufnahme-Verzeichnis auswählen",
                                      self.serien_name)

    def selectedMediaFile(self, res):
        if res is not None:
            if self['config'].instance.getCurrentIndex() == 0:
                #print(res)
                self.savetopath.value = res
                self.changedEntry()

    def epgSeriesNameEditFinished(self, res):
        if res is not None:
            self.epgSeriesName.value = res
            self.changedEntry()

    def tagEditFinished(self, res):
        if res is not None:
            self.serienmarker_tags = res
            self.tags.setChoices([len(res) == 0 and "Keine" or ' '.join(res)])

    def chooseTags(self):
        preferredTagEditor = getPreferredTagEditor()
        if preferredTagEditor:
            self.session.openWithCallback(self.tagEditFinished,
                                          preferredTagEditor,
                                          self.serienmarker_tags)

    def resetCover(self):
        if not config.plugins.serienRec.downloadCover.value:
            return

        from .SerienRecorderCoverSelectorScreen import CoverSelectorScreen
        self.session.open(CoverSelectorScreen, self.serien_wlid,
                          self.serien_name, self.serien_fsid)

    def setInfoText(self):
        self.HilfeTexte = {
            self.savetopath:
            "Das Verzeichnis auswählen und/oder erstellen, in dem die Aufnahmen von '%s' gespeichert werden."
            % self.serien_name,
            self.seasonsubdir:
            "Bei 'ja' wird für jede Staffel ein eigenes Unterverzeichnis im Serien-Verzeichnis für '%s' (z.B.\n'%sSeason 001') erstellt."
            % (self.serien_name, self.savetopath.value),
            self.epgSeriesName:
            ("Eingabe des Seriennamens wie er im EPG erscheint.\n\n"
             "Manchmal kommt es vor, dass eine Serie bei Wunschliste anders heißt als im EPG (z.B. 'Die 2' vs. 'Die Zwei') das führt dazu, dass der SerienRecorder die Sendung nicht im EPG finden und aktualisieren kann.\n"
             "Wenn sich der Serienname unterscheidet, kann der Name hier eingegeben werden, um darüber die Sendung im EPG zu finden."
             ),
            self.enable_margin_before:
            ("Bei 'ja' kann die Vorlaufzeit für Timer von '%s' eingestellt werden.\n"
             "Diese Einstellung hat Vorrang gegenüber der globalen Einstellung für die Vorlaufzeit.\n"
             "Ist auch beim aufzunehmenden Sender eine Vorlaufzeit eingestellt, so hat der HÖHERE Wert Vorrang.\n"
             "Bei 'nein' gilt die Einstellung vom globalen Setup.") %
            self.serien_name,
            self.margin_before:
            ("Die Vorlaufzeit für Timer von '%s' in Minuten.\n"
             "Diese Einstellung hat Vorrang gegenüber der globalen Einstellung für die Vorlaufzeit.\n"
             "Ist auch beim aufzunehmenden Sender eine Vorlaufzeit eingestellt, so hat der HÖHERE Wert Vorrang."
             ) % self.serien_name,
            self.enable_margin_after:
            ("Bei 'ja' kann die Nachlaufzeit für Timer von '%s' eingestellt werden.\n"
             "Diese Einstellung hat Vorrang gegenüber der globalen Einstellung für die Nachlaufzeit.\n"
             "Ist auch beim aufzunehmenden Sender eine Nachlaufzeit eingestellt, so hat der HÖHERE Wert Vorrang.\n"
             "Bei 'nein' gilt die Einstellung vom globalen Setup.") %
            self.serien_name,
            self.margin_after:
            ("Die Nachlaufzeit für Timer von '%s' in Minuten.\n"
             "Diese Einstellung hat Vorrang gegenüber der globalen Einstellung für die Nachlaufzeit.\n"
             "Ist auch beim aufzunehmenden Sender eine Nachlaufzeit eingestellt, so hat der HÖHERE Wert Vorrang."
             ) % self.serien_name,
            self.enable_NoOfRecords:
            ("Bei 'ja' kann die Anzahl der Aufnahmen, die von einer Folge von '%s' gemacht werden sollen, eingestellt werden.\n"
             "Diese Einstellung hat Vorrang gegenüber der globalen Einstellung für die Anzahl der Aufnahmen.\n"
             "Bei 'nein' gilt die Einstellung vom globalen Setup.") %
            self.serien_name,
            self.NoOfRecords:
            ("Die Anzahl der Aufnahmen, die von einer Folge von '%s' gemacht werden sollen.\n"
             "Diese Einstellung hat Vorrang gegenüber der globalen Einstellung für die Anzahl der Aufnahmen."
             ) % self.serien_name,
            self.enable_fromTime:
            ("Bei 'ja' kann die erlaubte Zeitspanne (ab Uhrzeit) für Aufnahmen von '%s' eingestellt werden.\n"
             "Diese Einstellung hat Vorrang gegenüber der globalen Einstellung für die früheste Zeit für Timer.\n"
             "Bei 'nein' gilt die Einstellung vom globalen Setup.") %
            self.serien_name,
            self.fromTime:
            ("Die Uhrzeit, ab wann Aufnahmen von '%s' erlaubt sind.\n"
             "Die erlaubte Zeitspanne beginnt um %s:%s Uhr.\n"
             "Diese Einstellung hat Vorrang gegenüber der globalen Einstellung für die früheste Zeit für Timer."
             ) % (self.serien_name, str(self.fromTime.value[0]).zfill(2),
                  str(self.fromTime.value[1]).zfill(2)),
            self.enable_toTime:
            ("Bei 'ja' kann die erlaubte Zeitspanne (bis Uhrzeit) für Aufnahmen von '%s' eingestellt werden.\n"
             "Diese Einstellung hat Vorrang gegenüber der globalen Einstellung für die späteste Zeit für Timer.\n"
             "Bei 'nein' gilt die Einstellung vom globalen Setup.") %
            self.serien_name,
            self.toTime:
            ("Die Uhrzeit, bis wann Aufnahmen von '%s' erlaubt sind.\n"
             "Die erlaubte Zeitspanne endet um %s:%s Uhr.\n"
             "Diese Einstellung hat Vorrang gegenüber der globalen Einstellung für die späteste Zeit für Timer."
             ) % (self.serien_name, str(self.toTime.value[0]).zfill(2),
                  str(self.toTime.value[1]).zfill(2)),
            self.enable_updateFromEPG:
            ("Bei 'ja' kann für Timer von '%s' eingestellt werden, ob versucht werden soll diesen aus dem EPG zu aktualisieren.\n"
             "Diese Einstellung hat Vorrang gegenüber der globalen Einstellung für die Timeraktualisierung aus dem EPG.\n"
             "Bei 'nein' gilt die Einstellung vom globalen Setup.") %
            self.serien_name,
            self.updateFromEPG:
            ("Bei 'ja' wird für Timer von '%s' versucht diese aus dem EPG zu aktualisieren.\n"
             "Bei 'nein' werden die Timer dieser Serie nicht aus dem EPG aktualisiert.\n"
             "Diese Einstellung hat Vorrang gegenüber der globalen Einstellung für die Timeraktualisierung aus dem EPG."
             ) % self.serien_name,
            self.enable_skipSeriesServer:
            ("Bei 'ja' kann für Timer von '%s' eingestellt werden, ob Timer nur aus der TV-Planer E-Mail angelegt werden sollen.\n"
             "Diese Einstellung hat Vorrang gegenüber der globalen Einstellung für die Timererstellung nur aus der TV-Planer E-Mail.\n"
             "Bei 'nein' gilt die Einstellung vom globalen Setup.") %
            self.serien_name,
            self.skipSeriesServer:
            ("Bei 'ja' werden Timer von '%s' nur aus der TV-Planer E-Mail erstellt.\n"
             "Bei 'nein' werden die Timer aus den Daten des SerienServer angelegt.\n"
             "Diese Einstellung hat Vorrang gegenüber der globalen Einstellung für die Timererstellung nur aus der TV-Planer E-Mail."
             ) % self.serien_name,
            self.override_vps:
            ("Bei 'ja' kann VPS für Timer von '%s' eingestellt werden.\n"
             "Diese Einstellung hat Vorrang gegenüber der Einstellung des Senders für VPS.\n"
             "Bei 'nein' gilt die Einstellung vom Sender.") % self.serien_name,
            self.enable_vps:
            ("Bei 'ja' wird VPS für '%s' aktiviert. Die Aufnahme startet erst, wenn der Sender den Beginn der Ausstrahlung angibt, "
             "und endet, wenn der Sender das Ende der Ausstrahlung angibt.\n"
             "Diese Einstellung hat Vorrang gegenüber der Sender Einstellung für VPS."
             ) % self.serien_name,
            self.enable_vps_savemode:
            ("Bei 'ja' wird der Sicherheitsmodus bei '%s' verwendet. Die programmierten Start- und Endzeiten werden eingehalten.\n"
             "Die Aufnahme wird nur ggf. früher starten bzw. länger dauern, aber niemals kürzer.\n"
             "Diese Einstellung hat Vorrang gegenüber der Sender Einstellung für VPS."
             ) % self.serien_name,
            self.enable_autoAdjust:
            ("Bei 'ja' kann für Timer von '%s' eingestellt werden, ob die Aufnahmezeit automatisch an die EPG Daten angepasst werden soll.\n"
             "Diese Einstellung hat Vorrang gegenüber der Einstellung für die automatische Anpassung der Aufnahmezeit an EPG Daten am Sender.\n"
             "Bei 'nein' gilt die Einstellung am Sender.") % self.serien_name,
            self.autoAdjust:
            ("Bei 'ja' wird 'Aufnahmezeit automatisch an EPG Daten anpassen' für Timer von '%s' aktiviert.\n"
             "Diese Einstellung hat Vorrang gegenüber der Einstellung für die automatische Anpassung der Aufnahmezeit an EPG Daten am Sender."
             ) % self.serien_name,
            self.addToDatabase:
            "Bei 'nein' werden für die Timer von '%s' keine Einträge in die Timer-Liste gemacht, sodass die Episoden beliebig oft getimert werden können."
            % self.serien_name,
            self.preferredChannel:
            "Auswahl, ob die Standard-Sender oder die alternativen Sender für die Timer von '%s' verwendet werden sollen."
            % self.serien_name,
            self.useAlternativeChannel:
            ("Mit 'ja' oder 'nein' kann ausgewählt werden, ob versucht werden soll, einen Timer auf dem jeweils anderen Sender (Standard oder alternativ) zu erstellen, "
             "falls der Timer für '%s' auf dem bevorzugten Sender nicht angelegt werden kann.\n"
             "Diese Einstellung hat Vorrang gegenüber der globalen Einstellung für die Verwendung von alternativen Sendern.\n"
             "Bei 'gemäß Setup' gilt die Einstellung vom globalen Setup.") %
            self.serien_name,
            self.enable_excludedWeekdays:
            ("Bei 'ja' können bestimmte Wochentage für die Erstellung von Timern für '%s' ausgenommen werden.\n"
             "Es werden also an diesen Wochentage für diese Serie keine Timer erstellt.\n"
             "Bei 'nein' werden alle Wochentage berücksichtigt.") %
            self.serien_name,
            self.tags:
            ("Verwaltet die Tags für die Timer, die für %s angelegt werden.\n\n"
             "Um diese Option nutzen zu können, muss das Tageditor Plugin installiert sein."
             ) % self.serien_name
        }

        try:
            text = self.HilfeTexte[self['config'].getCurrent()[1]]
        except:
            text = "Keine Information verfügbar."

        self["config_information_text"].setText(text)

    def save(self):
        if not self.enable_margin_before.value:
            Vorlaufzeit = None
        else:
            Vorlaufzeit = self.margin_before.value

        if not self.enable_margin_after.value:
            Nachlaufzeit = None
        else:
            Nachlaufzeit = self.margin_after.value

        if not self.enable_NoOfRecords.value:
            AnzahlWiederholungen = None
        else:
            AnzahlWiederholungen = self.NoOfRecords.value

        if not self.enable_fromTime.value:
            AufnahmezeitVon = None
        else:
            AufnahmezeitVon = (self.fromTime.value[0] *
                               60) + self.fromTime.value[1]

        if not self.enable_toTime.value:
            AufnahmezeitBis = None
        else:
            AufnahmezeitBis = (self.toTime.value[0] *
                               60) + self.toTime.value[1]

        if not self.enable_updateFromEPG.value:
            updateFromEPG = None
        else:
            updateFromEPG = self.updateFromEPG.value

        if not self.enable_skipSeriesServer.value:
            skipSeriesServer = None
        else:
            skipSeriesServer = self.skipSeriesServer.value

        if not self.override_vps.value:
            vpsSettings = None
        else:
            vpsSettings = (int(self.enable_vps_savemode.value) << 1) + int(
                self.enable_vps.value)

        if not self.enable_autoAdjust.value:
            autoAdjust = None
        else:
            autoAdjust = self.autoAdjust.value

        if (not self.savetopath.value) or (self.savetopath.value == ""):
            Staffelverzeichnis = -1
        else:
            Staffelverzeichnis = self.seasonsubdir.value

        if not self.enable_excludedWeekdays.value:
            excludedWeekdays = None
        else:
            excludedWeekdays = 0
            excludedWeekdays |= (self.excludeMonday.value << 0)
            excludedWeekdays |= (self.excludeTuesday.value << 1)
            excludedWeekdays |= (self.excludeWednesday.value << 2)
            excludedWeekdays |= (self.excludeThursday.value << 3)
            excludedWeekdays |= (self.excludeFriday.value << 4)
            excludedWeekdays |= (self.excludeSaturday.value << 5)
            excludedWeekdays |= (self.excludeSunday.value << 6)

        if len(self.serienmarker_tags) == 0:
            tags = ""
        else:
            tags = pickle.dumps(self.serienmarker_tags)

        self.database.setMarkerSettings(
            self.serien_id,
            (self.savetopath.value, int(Staffelverzeichnis), Vorlaufzeit,
             Nachlaufzeit, AnzahlWiederholungen, AufnahmezeitVon,
             AufnahmezeitBis, int(self.preferredChannel.value),
             int(self.useAlternativeChannel.value), vpsSettings,
             excludedWeekdays, tags, int(
                 self.addToDatabase.value), updateFromEPG, skipSeriesServer,
             autoAdjust, self.epgSeriesName.value))

        self.close(True)

    def cancel(self):
        self.close(False)
Ejemplo n.º 18
0
	def createConfig(self):
		self.mountusingEntry = None
		self.sharenameEntry = None
		self.mounttypeEntry = None
		self.activeEntry = None
		self.ipEntry = None
		self.sharedirEntry = None
		self.optionsEntry = None
		self.usernameEntry = None
		self.passwordEntry = None
		self.hdd_replacementEntry = None

		self.mountusing = []
		self.mountusing.append(("autofs", _("AUTOFS (mount as needed)")))
		self.mountusing.append(("fstab", _("FSTAB (mount at boot)")))
		self.mountusing.append(("enigma2", _("Enigma2 (mount using enigma2)")))
		self.mountusing.append(("old_enigma2", _("Enigma2 old format (mount using linux)")))

		self.sharetypelist = []
		self.sharetypelist.append(("nfs", _("NFS share")))
		self.sharetypelist.append(("cifs", _("CIFS share")))

		if self.mountinfo.has_key('mountusing'):
			mountusing = self.mountinfo['mountusing']
			if mountusing is False:
				mountusing = "fstab"
		else:
			mountusing = "fstab"

		if self.mountinfo.has_key('mounttype'):
			mounttype = self.mountinfo['mounttype']
			if mounttype is False:
				mounttype = "nfs"
		else:
			mounttype = "nfs"

		if self.mountinfo.has_key('active'):
			active = self.mountinfo['active']
			if active == 'True':
				active = True
			if active == 'False':
				active = False
		else:
			active = True
		if self.mountinfo.has_key('ip'):
			if self.mountinfo['ip'] is False:
				ip = [192, 168, 0, 0]
			else:
				ip = self.convertIP(self.mountinfo['ip'])
		else:
			ip = [192, 168, 0, 0]

		if mounttype == "nfs":
			defaultOptions = "rw,nolock,tcp"
		else:
			defaultOptions = "rw,utf8"
		if self.mountinfo['sharename'] and self.mountinfo.has_key('sharename'):
			sharename = re_sub("\W", "", self.mountinfo['sharename'])
		else:
			sharename = "Sharename"
		if self.mountinfo.has_key('sharedir'):
			sharedir = self.mountinfo['sharedir']
		else:
			sharedir = "/export/hdd"
		if self.mountinfo.has_key('options'):
			options = self.mountinfo['options']
		else:
			options = defaultOptions
		if self.mountinfo.has_key('username'):
			username = self.mountinfo['username']
		else:
			username = ""
		if self.mountinfo.has_key('password'):
			password = self.mountinfo['password']
		else:
			password = ""
		if self.mountinfo.has_key('hdd_replacement'):
			hdd_replacement = self.mountinfo['hdd_replacement']
			if hdd_replacement == 'True':
				hdd_replacement = True
			if hdd_replacement == 'False':
				hdd_replacement = False
		else:
			hdd_replacement = False
		if sharename is False:
			sharename = "Sharename"
		if sharedir is False:
			sharedir = "/export/hdd"
		if username is False:
			username = ""
		if password is False:
			password = ""

		self.old_sharename = sharename
		self.old_sharedir = sharedir
		self.mountusingConfigEntry = NoSave(ConfigSelection(self.mountusing, default = mountusing ))
		self.activeConfigEntry = NoSave(ConfigEnableDisable(default = active))
		self.ipConfigEntry = NoSave(ConfigIP(default = ip))
		self.sharenameConfigEntry = NoSave(ConfigText(default = sharename, visible_width = 50, fixed_size = False))
		self.sharedirConfigEntry = NoSave(ConfigText(default = sharedir, visible_width = 50, fixed_size = False))
		self.optionsConfigEntry = NoSave(ConfigText(default = defaultOptions, visible_width = 50, fixed_size = False))
		if options is not False:
			self.optionsConfigEntry.value = options
		self.usernameConfigEntry = NoSave(ConfigText(default = username, visible_width = 50, fixed_size = False))
		self.passwordConfigEntry = NoSave(ConfigPassword(default = password, visible_width = 50, fixed_size = False))
		self.mounttypeConfigEntry = NoSave(ConfigSelection(self.sharetypelist, default = mounttype ))
		self.hdd_replacementConfigEntry = NoSave(ConfigYesNo(default = hdd_replacement))
Ejemplo n.º 19
0
class UserDialog(Screen, ConfigListScreen):
	skin = """
		<screen name="UserDialog" position="center,center" size="560,300" title="UserDialog">
			<ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
			<widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;18" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
			<widget name="config" position="5,50" size="550,200" zPosition="1" scrollbarMode="showOnDemand" />
			<ePixmap pixmap="skin_default/div-h.png" position="0,270" zPosition="1" size="560,2" />
			<widget source="introduction" render="Label" position="10,280" size="540,21" zPosition="10" font="Regular;18" halign="center" valign="center" backgroundColor="#25062748" transparent="1"/>
			<widget name="VKeyIcon" pixmap="skin_default/buttons/key_text.png" position="10,280" zPosition="10" size="35,25" transparent="1" alphatest="on" />
			<widget name="HelpWindow" pixmap="skin_default/vkey_icon.png" position="160,250" zPosition="1" size="1,1" transparent="1" alphatest="on" />	
		</screen>"""

	def __init__(self, session, plugin_path, hostinfo = None ):
		self.skin_path = plugin_path
		self.session = session
		Screen.__init__(self, self.session)
		self.hostinfo = hostinfo
		self.cache_ttl = 86400 #600 is default, 0 disables, Seconds cache is considered valid
		self.cache_file = '/etc/enigma2/' + self.hostinfo + '.cache' #Path to cache directory
		self.createConfig()

		self["actions"] = NumberActionMap(["SetupActions"],
		{
			"ok": self.ok,
			"back": self.close,
			"cancel": self.close,
			"red": self.close,
		}, -2)

		self["VirtualKB"] = ActionMap(["VirtualKeyboardActions"],
		{
			"showVirtualKeyboard": self.KeyText,
		}, -2)

		self.list = []
		ConfigListScreen.__init__(self, self.list,session = self.session)
		self.createSetup()
		self.onLayoutFinish.append(self.layoutFinished)
		# Initialize Buttons
		self["VKeyIcon"] = Pixmap()
		self["HelpWindow"] = Pixmap()
		self["introduction"] = StaticText(_("Press OK to save settings."))
		self["key_red"] = StaticText(_("Close"))

	def layoutFinished(self):
		self.setTitle(_("Enter user and password for host: ")+ self.hostinfo)

	# helper function to convert ips from a sring to a list of ints
	def convertIP(self, ip):
		strIP = ip.split('.')
		ip = []
		for x in strIP:
			ip.append(int(x))
		return ip

	def createConfig(self):
		self.usernameEntry = None
		self.passwordEntry = None
		self.username = None
		self.password = None

		if os_path.exists(self.cache_file):
			print 'Loading user cache from ',self.cache_file
			try:
				self.hostdata = load_cache(self.cache_file)
				username = self.hostdata['username']
				password = self.hostdata['password']
			except:
				username = "******"
				password = "******"
		else:
			username = "******"
			password = "******"

		self.username = NoSave(ConfigText(default = username, visible_width = 50, fixed_size = False))
		self.password = NoSave(ConfigPassword(default = password, visible_width = 50, fixed_size = False))

	def createSetup(self):
		self.list = []
		self.usernameEntry = getConfigListEntry(_("Username"), self.username)
		self.list.append(self.usernameEntry)
		self.passwordEntry = getConfigListEntry(_("Password"), self.password)
		self.list.append(self.passwordEntry)

		self["config"].list = self.list
		self["config"].l.setList(self.list)
		self["config"].onSelectionChanged.append(self.selectionChanged)

	def KeyText(self):
		if self["config"].getCurrent() == self.usernameEntry:
			self.session.openWithCallback(lambda x : self.VirtualKeyBoardCallback(x, 'username'), VirtualKeyBoard, title = (_("Enter username:"******"config"].getCurrent() == self.passwordEntry:
			self.session.openWithCallback(lambda x : self.VirtualKeyBoardCallback(x, 'password'), VirtualKeyBoard, title = (_("Enter password:"******"config"].invalidate(self.usernameEntry)
			if entry == 'password':
				self.password.setValue(callback)
				self["config"].invalidate(self.passwordEntry)

	def newConfig(self):
		if self["config"].getCurrent() == self.InterfaceEntry:
			self.createSetup()

	def keyLeft(self):
		ConfigListScreen.keyLeft(self)

	def keyRight(self):
		ConfigListScreen.keyRight(self)

	def selectionChanged(self):
		current = self["config"].getCurrent()
		helpwindowpos = self["HelpWindow"].getPosition()
		if current[1].help_window.instance is not None:
			current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1]))

	def ok(self):
		current = self["config"].getCurrent()
		self.hostdata = { 'username': self.username.value, 'password': self.password.value }
		write_cache(self.cache_file, self.hostdata)
		self.close(True)
	def createSetup(self, timer):
		# Name
		self.name = NoSave(ConfigText(default = timer.name, fixed_size = False))

		# Match
		self.match = NoSave(ConfigText(default = timer.match, fixed_size = False))

		# Encoding
		default = timer.encoding
		selection = ['UTF-8', 'ISO8859-15']
		if default not in selection:
			selection.append(default)
		self.encoding = NoSave(ConfigSelection(choices = selection, default = default))

		# ...
		self.searchType = NoSave(ConfigSelection(choices = [("partial", _("partial match")), ("exact", _("exact match")), ("start", _("title starts with")), ("description", _("description match"))], default = timer.searchType))
		self.searchCase = NoSave(ConfigSelection(choices = [("sensitive", _("case-sensitive search")), ("insensitive", _("case-insensitive search"))], default = timer.searchCase))

		# Alternatives override
		self.overrideAlternatives = NoSave(ConfigYesNo(default = timer.overrideAlternatives))

		# Justplay
		self.justplay = NoSave(ConfigSelection(choices = [("zap", _("zap")), ("record", _("record"))], default = {0: "record", 1: "zap"}[int(timer.justplay)]))
		self.setEndtime = NoSave(ConfigYesNo(default=timer.setEndtime))

		# Timespan
		now = [x for x in localtime()]
		if timer.hasTimespan():
			default = True
			now[3] = timer.timespan[0][0]
			now[4] = timer.timespan[0][1]
			begin = mktime(now)
			now[3] = timer.timespan[1][0]
			now[4] = timer.timespan[1][1]
			end = mktime(now)
		else:
			default = False
			now[3] = 20
			now[4] = 15
			begin = mktime(now)
			now[3] = 23
			now[4] = 15
			end = mktime(now)
		self.timespan = NoSave(ConfigEnableDisable(default = default))
		self.timespanbegin = NoSave(ConfigClock(default = begin))
		self.timespanend = NoSave(ConfigClock(default = end))

		# Timeframe
		if timer.hasTimeframe():
			default = True
			begin = timer.getTimeframeBegin()
			end = timer.getTimeframeEnd()
		else:
			default = False
			now = [x for x in localtime()]
			now[3] = 0
			now[4] = 0
			begin = mktime(now)
			end = begin + 604800 # today + 7d
		self.timeframe = NoSave(ConfigEnableDisable(default = default))
		self.timeframebegin = NoSave(ConfigDateTime(begin, _("%d.%B %Y"), increment = 86400))
		self.timeframeend = NoSave(ConfigDateTime(end, _("%d.%B %Y"), increment = 86400))

		# Services have their own Screen

		# Offset
		if timer.hasOffset():
			default = True
			begin = timer.getOffsetBegin()
			end = timer.getOffsetEnd()
		else:
			default = False
			begin = 5
			end = 5
		self.offset = NoSave(ConfigEnableDisable(default = default))
		self.offsetbegin = NoSave(ConfigNumber(default = begin))
		self.offsetend = NoSave(ConfigNumber(default = end))

		# AfterEvent
		if timer.hasAfterEvent():
			default = {
				None: "default",
				AFTEREVENT.NONE: "nothing",
				AFTEREVENT.DEEPSTANDBY: "deepstandby",
				AFTEREVENT.STANDBY: "standby",
				AFTEREVENT.AUTO: "auto"
			}[timer.afterevent[0][0]]
		else:
			default = "default"
		self.afterevent = NoSave(ConfigSelection(choices = [
			("default", _("standard")), ("nothing", _("do nothing")),
			("standby", _("go to standby")),
			("deepstandby", _("go to deep standby")),
			("auto", _("auto"))], default = default))

		# AfterEvent (Timespan)
		if timer.hasAfterEvent() and timer.afterevent[0][1][0] is not None:
			default = True
			now[3] = timer.afterevent[0][1][0][0]
			now[4] = timer.afterevent[0][1][0][1]
			begin = mktime(now)
			now[3] = timer.afterevent[0][1][1][0]
			now[4] = timer.afterevent[0][1][1][1]
			end = mktime(now)
		else:
			default = False
			now[3] = 23
			now[4] = 15
			begin = mktime(now)
			now[3] = 7
			now[4] = 0
			end = mktime(now)
		self.afterevent_timespan = NoSave(ConfigEnableDisable(default = default))
		self.afterevent_timespanbegin = NoSave(ConfigClock(default = begin))
		self.afterevent_timespanend = NoSave(ConfigClock(default = end))

		# Enabled
		self.enabled = NoSave(ConfigYesNo(default = timer.enabled))

		# Maxduration
		if timer.hasDuration():
			default = True
			duration = timer.getDuration()
		else:
			default = False
			duration =70
		self.duration = NoSave(ConfigEnableDisable(default = default))
		self.durationlength = NoSave(ConfigNumber(default = duration))

		# Counter
		if timer.hasCounter():
			default = timer.matchCount
		else:
			default = 0
		self.counter = NoSave(ConfigNumber(default = default))
		self.counterLeft = NoSave(ConfigNumber(default = timer.matchLeft))
		default = timer.getCounterFormatString()
		selection = [("", _("Never")), ("%m", _("Monthly")), ("%U", _("Weekly (Sunday)")), ("%W", _("Weekly (Monday)"))]
		if default not in ('', '%m', '%U', '%W'):
			selection.append((default, _("Custom (%s)") % (default)))
		self.counterFormatString = NoSave(ConfigSelection(selection, default = default))

		# Avoid Duplicate Description
		self.avoidDuplicateDescription = NoSave(ConfigSelection([
				("0", _("No")),
				("1", _("On same service")),
				("2", _("On any service")),
				("3", _("Any service/recording")),
			],
			default = str(timer.getAvoidDuplicateDescription())
		))

		# Search for Duplicate Desciption in...
		self.searchForDuplicateDescription = NoSave(ConfigSelection([
				("0", _("Title")),
				("1", _("Title and Short description")),
				("2", _("Title and all descriptions")),
			],
		    default = str(timer.searchForDuplicateDescription)
		))

		# Custom Location
		if timer.hasDestination():
			default = True
		else:
			default = False

		self.useDestination = NoSave(ConfigYesNo(default = default))

		default = timer.destination or Directories.resolveFilename(Directories.SCOPE_HDD)
		choices = config.movielist.videodirs.value

		if default not in choices:
			choices.append(default)
		self.destination = NoSave(ConfigSelection(default = default, choices = choices))

		# Tags
		self.timerentry_tags = timer.tags
		self.tags = NoSave(ConfigSelection(choices = [len(self.timerentry_tags) == 0 and _("None") or ' '.join(self.timerentry_tags)]))

		# Vps
		self.vps_enabled = NoSave(ConfigYesNo(default = timer.vps_enabled))
		self.vps_overwrite = NoSave(ConfigYesNo(default = timer.vps_overwrite))

		# SeriesPlugin
		self.series_labeling = NoSave(ConfigYesNo(default = timer.series_labeling))
Ejemplo n.º 21
0
from string import maketrans, strip

from enigma import eConsoleAppContainer

from Components.config import config, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, ConfigSelection, ConfigPassword
from Components.Console import Console
from Components.Network import iNetwork
from pythonwifi.iwlibs import getNICnames, Wireless, Iwfreq, getWNICnames
from pythonwifi import flags as wififlags

list = ["Unencrypted", "WEP", "WPA", "WPA/WPA2", "WPA2"]

weplist = ["ASCII", "HEX"]

config.plugins.wlan = ConfigSubsection()
config.plugins.wlan.essid = NoSave(ConfigText(default="", fixed_size=False))
config.plugins.wlan.hiddenessid = NoSave(ConfigYesNo(default=False))
config.plugins.wlan.encryption = NoSave(ConfigSelection(list, default="WPA2"))
config.plugins.wlan.wepkeytype = NoSave(
    ConfigSelection(weplist, default="ASCII"))
config.plugins.wlan.psk = NoSave(ConfigPassword(default="", fixed_size=False))


def existBcmWifi(iface):
    return os_path.exists("/tmp/bcm/" + iface)


def getWlConfName(iface):
    return "/etc/wl.conf.%s" % iface

Ejemplo n.º 22
0
    def __init__(self, session, selectedEntry, addEntry=False):
        self.skin = fstabEditorScreen.skin
        self.session = session
        self.selectedEntry = selectedEntry
        self.addEntry = addEntry
        Screen.__init__(self, session)
        HelpableScreen.__init__(self)

        self["ButtonRed"] = Pixmap()
        self["ButtonRedText"] = Label(_("Remove entry"))

        if self.addEntry:
            self["ButtonRed"].hide()
            self["ButtonRedText"].hide()

        self["ColorActions"] = HelpableActionMap(
            self, "ColorActions", {
                "green": (self.checkEntry, _("Return with saving")),
                "red": (self.removeEntry, _("Remove entry")),
            }, -1)

        self["OkCancelActions"] = HelpableActionMap(
            self, "OkCancelActions", {
                "cancel": (self.cancelEntry, _("Return without saving")),
                "ok": (self.ok, _("Open selector")),
            }, -1)

        self.list = []
        ConfigListScreen.__init__(self, self.list)

        if self.addEntry:
            self.devicename = NoSave(ConfigText(default=""))
            self.mountpoint = NoSave(ConfigText(default=""))
            self.fstype = NoSave(
                ConfigSelection([("auto", "auto"), ("ext2", "ext2"),
                                 ("ext3", "ext3"), ("ext4", "ext4"),
                                 ("swap", "swap"), ("tmpfs", "tmpfs"),
                                 ("proc", "proc"), ("cifs", "cifs"),
                                 ("nfs", "nfs"), ("jffs2", "jffs2"),
                                 ("usbfs", "usbfs"), ("devpts", "devpts"),
                                 ("vfat", "vfat"), ("fat", "fat"),
                                 ("ntfs", "ntfs"), ("noauto", "no auto"),
                                 ("xfs", "xfs")],
                                default="auto"))
            self.options = NoSave(ConfigText(default="defaults"))
            self.dumpfreq = NoSave(ConfigNumber(default=0))
            self.passnum = NoSave(
                ConfigSelection([("0", "0"), ("1", "1"), ("2", "2")],
                                default="0"))
        else:
            self.devicename = NoSave(
                ConfigText(default=entryList[self.selectedEntry][0]))
            self.mountpoint = NoSave(
                ConfigText(default=entryList[self.selectedEntry][1]))
            self.fstype = NoSave(
                ConfigSelection([("auto", "auto"), ("ext2", "ext2"),
                                 ("ext3", "ext3"), ("ext4", "ext4"),
                                 ("swap", "swap"), ("tmpfs", "tmpfs"),
                                 ("proc", "proc"), ("cifs", "cifs"),
                                 ("nfs", "nfs"), ("jffs2", "jffs2"),
                                 ("usbfs", "usbfs"), ("devpts", "devpts"),
                                 ("vfat", "vfat"), ("fat", "fat"),
                                 ("ntfs", "ntfs"), ("noauto", "no auto"),
                                 ("xfs", "xfs")],
                                default=entryList[self.selectedEntry][2]))
            self.options = NoSave(
                ConfigText(default=entryList[self.selectedEntry][3]))
            self.dumpfreq = NoSave(
                ConfigNumber(default=int(entryList[self.selectedEntry][4])))
            self.passnum = NoSave(
                ConfigSelection([("0", "0"), ("1", "1"), ("2", "2")],
                                default=entryList[self.selectedEntry][5]))

        self.list.append(
            getConfigListEntry(_("device name: "), self.devicename))
        self.list.append(
            getConfigListEntry(_("mount point: "), self.mountpoint))
        self.list.append(
            getConfigListEntry(_("file system type: "), self.fstype))
        self.list.append(getConfigListEntry(_("options: "), self.options))
        self.list.append(
            getConfigListEntry(_("dump frequency (in days): "), self.dumpfreq))
        self.list.append(getConfigListEntry(_("pass num: "), self.passnum))

        self["config"].setList(self.list)
Ejemplo n.º 23
0
	else:
		choicelist.append(("%d" % i, _("%d min") % (i // 60)))
config.hdmicec.handle_tv_delaytime = ConfigSelection(default="0", choices=[("0", _("None"))] + choicelist)
config.hdmicec.deepstandby_waitfortimesync = ConfigYesNo(default=True)
config.hdmicec.tv_wakeup_zaptimer = ConfigYesNo(default=True)
config.hdmicec.tv_wakeup_zapandrecordtimer = ConfigYesNo(default=True)
config.hdmicec.tv_wakeup_wakeuppowertimer = ConfigYesNo(default=True)
config.hdmicec.tv_standby_notinputactive = ConfigYesNo(default=True)
config.hdmicec.check_tv_state = ConfigYesNo(default=False)
config.hdmicec.workaround_activesource = ConfigYesNo(default=False)
choicelist = []
for i in (5, 10, 15, 30, 45, 60):
	choicelist.append(("%d" % i, _("%d sec") % i))
config.hdmicec.workaround_turnbackon = ConfigSelection(default="0", choices=[("0", _("Disabled"))] + choicelist)
config.hdmicec.advanced_settings = ConfigYesNo(default=False)
config.hdmicec.default_settings = NoSave(ConfigYesNo(default=False))
config.hdmicec.debug = ConfigYesNo(default=False)
config.hdmicec.commandline = ConfigYesNo(default=False)

cmdfile = "/tmp/hdmicec_cmd"
msgfile = "/tmp/hdmicec_msg"
errfile = "/tmp/hdmicec_cmd_err.log"
hlpfile = "/tmp/hdmicec_cmd_hlp.txt"
cecinfo = "http://www.cec-o-matic.com"

CECintcmd = {
	"Active Source": "sourceactive",
	"Device Vendor ID": "vendorid",
	"Give Device Power Status": "powerstate",
	"Give System Audio Mode Status": "givesystemaudiostatus",
	"Image View On": "wakeup",
Ejemplo n.º 24
0
	def __init__(self, session, val, isTorrent, rpc_version):
		Screen.__init__(self, session)
		self.skinName = ["EmissionBandwith", "Setup"]

		# Summary
		self.setup_title = _("Bandwidth settings")
		self.onChangedEntry = []

		ConfigListScreen.__init__(self, [], session=session, on_change=self.changed)

		self.isTorrent = isTorrent
		if isTorrent:
			if rpc_version < 5:
				downloadLimitMode = val.downloadLimitMode
				uploadLimitMode = val.uploadLimitMode
				modelist = [(0, _("Global Setting")), (2, _("Unlimited")), (1, _("Limit"))]
			else:
				downloadLimitMode = val.downloadLimited
				uploadLimitMode = val.uploadLimited
				modelist = [(0, _("Global Setting")), (1, _("Limit"))] # XXX: this is a pure guess...

			self.downloadLimitMode = NoSave(ConfigSelection(choices=modelist, default=downloadLimitMode))
			self.downloadLimit = NoSave(ConfigNumber(default=val.downloadLimit))
			self.uploadLimitMode = NoSave(ConfigSelection(choices=modelist, default=uploadLimitMode))
			self.uploadLimit = NoSave(ConfigNumber(default=val.uploadLimit))
			self.maxConnectedPeers = NoSave(ConfigNumber(default=val.maxConnectedPeers))
		else: #if not isTorrent:
			if rpc_version < 5:
				peerLimit = val.peer_limit
				port = val.port
				pex_allowed = val.pex_allowed
			else:
				peerLimit = val.peer_limit_global
				port = val.peer_port
				pex_allowed = val.pex_enabled

			self.downloadLimitMode = NoSave(ConfigSelection(choices=[(0, _("Unlimited")), (1, _("Limit"))], default=val.speed_limit_down_enabled))
			self.downloadLimit = NoSave(ConfigNumber(default=val.speed_limit_down))
			self.uploadLimitMode = NoSave(ConfigSelection(choices=[(0, _("Unlimited")), (1, _("Limit"))], default=val.speed_limit_up_enabled))
			self.uploadLimit = NoSave(ConfigNumber(default=val.speed_limit_up))
			self.maxConnectedPeers = NoSave(ConfigNumber(default=peerLimit))
			self.encryption = NoSave(ConfigSelection(choices=[('required', _("required")), ('preferred', _("preferred")), ('tolerated', _("tolerated"))], default=val.encryption))
			self.download_dir = NoSave(ConfigText(default=val.download_dir, fixed_size=False))
			self.pex_allowed = NoSave(ConfigYesNo(default=pex_allowed))
			self.port = NoSave(ConfigNumber(default=port))
			self.port_forwarding_enabled = NoSave(ConfigYesNo(default=val.port_forwarding_enabled))

		self.downloadLimitMode.addNotifier(self.updateList, initial_call=False)
		self.uploadLimitMode.addNotifier(self.updateList, initial_call=False)

		self.updateList()

		# Initialize widgets
		self["key_green"] = StaticText(_("OK"))
		self["key_red"] = StaticText(_("Cancel"))
		self.full_title = _("%s bandwidth settings") % (isTorrent and str(val.name) or "eMission")

		# Define Actions
		self["actions"] = ActionMap(["SetupActions"],
			{
				"cancel": self.keyCancel,
				"save": self.keySave,
			}
		)

		# Trigger change
		self.changed()

		self.onLayoutFinish.append(self.setCustomTitle)
    def createConfig(self, *args):
        config.pep = ConfigSubsection()
        config.pep.configsteps = NoSave(
            ConfigSelection(choices=[1, 5, 10, 25], default=1))

        if os.path.exists("/proc/stb/video/plane/psi_contrast"):

            def setContrast(config):
                myval = int(config.value)
                try:
                    print("[VideoEnhancement] setting contrast to: %s" % myval)
                    open("/proc/stb/video/plane/psi_contrast",
                         "w").write("%s" % myval)
                except IOError:
                    print("[VideoEnhancement] couldn't write psi_contrast.")

                if not VideoEnhancement.firstRun:
                    self.setConfiguredValues()

            config.pep.contrast = ConfigSlider(default=128, limits=(0, 255))
            config.pep.contrast.addNotifier(setContrast)
        else:
            config.pep.contrast = NoSave(ConfigNothing())

        if os.path.exists("/proc/stb/video/plane/psi_saturation"):

            def setSaturation(config):
                myval = int(config.value)
                try:
                    print("[VideoEnhancement] setting saturation to: %s" %
                          myval)
                    open("/proc/stb/video/plane/psi_saturation",
                         "w").write("%s" % myval)
                except IOError:
                    print("[VideoEnhancement] couldn't write psi_saturation.")

                if not VideoEnhancement.firstRun:
                    self.setConfiguredValues()

            config.pep.saturation = ConfigSlider(default=128, limits=(0, 255))
            config.pep.saturation.addNotifier(setSaturation)
        else:
            config.pep.saturation = NoSave(ConfigNothing())

        if os.path.exists("/proc/stb/video/plane/psi_tint"):

            def setHue(config):
                myval = int(config.value)
                try:
                    print("[VideoEnhancement] setting hue to: %s" % myval)
                    open("/proc/stb/video/plane/psi_tint",
                         "w").write("%s" % myval)
                except IOError:
                    print("[VideoEnhancement] couldn't write psi_tint.")

                if not VideoEnhancement.firstRun:
                    self.setConfiguredValues()

            config.pep.hue = ConfigSlider(default=128, limits=(0, 255))
            config.pep.hue.addNotifier(setHue)
        else:
            config.pep.hue = NoSave(ConfigNothing())

        if os.path.exists("/proc/stb/video/plane/psi_brightness"):

            def setBrightness(config):
                myval = int(config.value)
                try:
                    print("[VideoEnhancement] setting brightness to: %s" %
                          myval)
                    open("/proc/stb/video/plane/psi_brightness",
                         "w").write("%s" % myval)
                except IOError:
                    print("[VideoEnhancement] couldn't write psi_brightness.")

                if not VideoEnhancement.firstRun:
                    self.setConfiguredValues()

            config.pep.brightness = ConfigSlider(default=128, limits=(0, 255))
            config.pep.brightness.addNotifier(setBrightness)
        else:
            config.pep.brightness = NoSave(ConfigNothing())

        if os.path.exists("/proc/stb/vmpeg/0/pep_block_noise_reduction"):

            def setBlock_noise_reduction(config):
                myval = int(config.value)
                try:
                    print(
                        "[VideoEnhancement] setting block_noise_reduction to: %0.8X"
                        % myval)
                    open("/proc/stb/vmpeg/0/pep_block_noise_reduction",
                         "w").write("%0.8X" % myval)
                except IOError:
                    print(
                        "[VideoEnhancement] couldn't write pep_block_noise_reduction."
                    )

                if not VideoEnhancement.firstRun:
                    self.setConfiguredValues()

            config.pep.block_noise_reduction = ConfigSlider(default=0,
                                                            limits=(0, 5))
            config.pep.block_noise_reduction.addNotifier(
                setBlock_noise_reduction)
        else:
            config.pep.block_noise_reduction = NoSave(ConfigNothing())

        if os.path.exists("/proc/stb/vmpeg/0/pep_mosquito_noise_reduction"):

            def setMosquito_noise_reduction(config):
                myval = int(config.value)
                try:
                    print(
                        "[VideoEnhancement] setting mosquito_noise_reduction to: %0.8X"
                        % myval)
                    open("/proc/stb/vmpeg/0/pep_mosquito_noise_reduction",
                         "w").write("%0.8X" % myval)
                except IOError:
                    print(
                        "[VideoEnhancement] couldn't write pep_mosquito_noise_reduction."
                    )

                if not VideoEnhancement.firstRun:
                    self.setConfiguredValues()

            config.pep.mosquito_noise_reduction = ConfigSlider(default=0,
                                                               limits=(0, 5))
            config.pep.mosquito_noise_reduction.addNotifier(
                setMosquito_noise_reduction)
        else:
            config.pep.mosquito_noise_reduction = NoSave(ConfigNothing())

        if os.path.exists("/proc/stb/vmpeg/0/pep_digital_contour_removal"):

            def setDigital_contour_removal(config):
                myval = int(config.value)
                try:
                    print(
                        "[VideoEnhancement] setting digital_contour_removal to: %0.8X"
                        % myval)
                    open("/proc/stb/vmpeg/0/pep_digital_contour_removal",
                         "w").write("%0.8X" % myval)
                except IOError:
                    print(
                        "[VideoEnhancement] couldn't write pep_digital_contour_removal."
                    )

                if not VideoEnhancement.firstRun:
                    self.setConfiguredValues()

            config.pep.digital_contour_removal = ConfigSlider(default=0,
                                                              limits=(0, 5))
            config.pep.digital_contour_removal.addNotifier(
                setDigital_contour_removal)
        else:
            config.pep.digital_contour_removal = NoSave(ConfigNothing())

        if os.path.exists("/proc/stb/vmpeg/0/pep_split"):

            def setSplitMode(config):
                try:
                    print("[VideoEnhancement] setting splitmode to:",
                          str(config.value))
                    open("/proc/stb/vmpeg/0/pep_split",
                         "w").write(str(config.value))
                except IOError:
                    print("[VideoEnhancement] couldn't write pep_split.")

                if not VideoEnhancement.firstRun:
                    self.setConfiguredValues()

            config.pep.split = ConfigSelection(choices={
                "off": _("Off"),
                "left": _("Left"),
                "right": _("Right")
            },
                                               default="off")
            config.pep.split.addNotifier(setSplitMode)
        else:
            config.pep.split = NoSave(ConfigNothing())

        if SystemInfo["ScalerSharpness"]:

            def setSharpness(config):
                myval = int(config.value * 256)
                try:
                    print("[VideoEnhancement] setting sharpness to: %0.8X" %
                          myval)
                    open("/proc/stb/vmpeg/0/pep_sharpness",
                         "w").write("%0.8X" % myval)
                except IOError:
                    print("[VideoEnhancement] couldn't write pep_sharpness.")

                if not VideoEnhancement.firstRun:
                    self.setConfiguredValues()

            config.pep.sharpness = ConfigSlider(default=0, limits=(0, 255))
            config.pep.sharpness.addNotifier(setSharpness)
        else:
            config.pep.sharpness = NoSave(ConfigNothing())

        if os.path.exists("/proc/stb/vmpeg/0/pep_auto_flesh"):

            def setAutoflesh(config):
                myval = int(config.value)
                try:
                    print("[VideoEnhancement] setting auto_flesh to: %0.8X" %
                          myval)
                    open("/proc/stb/vmpeg/0/pep_auto_flesh",
                         "w").write("%0.8X" % myval)
                except IOError:
                    print("[VideoEnhancement] couldn't write pep_auto_flesh.")

                if not VideoEnhancement.firstRun:
                    self.setConfiguredValues()

            config.pep.auto_flesh = ConfigSlider(default=0, limits=(0, 4))
            config.pep.auto_flesh.addNotifier(setAutoflesh)
        else:
            config.pep.auto_flesh = NoSave(ConfigNothing())

        if os.path.exists("/proc/stb/vmpeg/0/pep_green_boost"):

            def setGreenboost(config):
                myval = int(config.value)
                try:
                    print("[VideoEnhancement] setting green_boost to: %0.8X" %
                          myval)
                    open("/proc/stb/vmpeg/0/pep_green_boost",
                         "w").write("%0.8X" % myval)
                except IOError:
                    print("[VideoEnhancement] couldn't write pep_green_boost.")

                if not VideoEnhancement.firstRun:
                    self.setConfiguredValues()

            config.pep.green_boost = ConfigSlider(default=0, limits=(0, 4))
            config.pep.green_boost.addNotifier(setGreenboost)
        else:
            config.pep.green_boost = NoSave(ConfigNothing())

        if os.path.exists("/proc/stb/vmpeg/0/pep_blue_boost"):

            def setBlueboost(config):
                myval = int(config.value)
                try:
                    print("[VideoEnhancement] setting blue_boost to: %0.8X" %
                          myval)
                    open("/proc/stb/vmpeg/0/pep_blue_boost",
                         "w").write("%0.8X" % myval)
                except IOError:
                    print("[VideoEnhancement] couldn't write pep_blue_boost.")

                if not VideoEnhancement.firstRun:
                    self.setConfiguredValues()

            config.pep.blue_boost = ConfigSlider(default=0, limits=(0, 4))
            config.pep.blue_boost.addNotifier(setBlueboost)
        else:
            config.pep.blue_boost = NoSave(ConfigNothing())

        if os.path.exists("/proc/stb/vmpeg/0/pep_dynamic_contrast"):

            def setDynamic_contrast(config):
                myval = int(config.value)
                try:
                    print(
                        "[VideoEnhancement] setting dynamic_contrast to: %0.8X"
                        % myval)
                    open("/proc/stb/vmpeg/0/pep_dynamic_contrast",
                         "w").write("%0.8X" % myval)
                except IOError:
                    print(
                        "[VideoEnhancement] couldn't write pep_dynamic_contrast."
                    )

                if not VideoEnhancement.firstRun:
                    self.setConfiguredValues()

            config.pep.dynamic_contrast = ConfigSlider(default=0,
                                                       limits=(0, 255))
            config.pep.dynamic_contrast.addNotifier(setDynamic_contrast)
        else:
            config.pep.dynamic_contrast = NoSave(ConfigNothing())

        try:
            x = config.av.scaler_sharpness.value
        except KeyError:
            if SystemInfo["ScalerSharpness"]:

                def setScaler_sharpness(config):
                    myval = int(config.value)
                    try:
                        print(
                            "[VideoEnhancement] setting scaler_sharpness to: %0.8X"
                            % myval)
                        open("/proc/stb/vmpeg/0/pep_scaler_sharpness",
                             "w").write("%0.8X" % myval)
                    except IOError:
                        print(
                            "[VideoEnhancement] couldn't write pep_scaler_sharpness."
                        )

                    if not VideoEnhancement.firstRun:
                        self.setConfiguredValues()

                config.av.scaler_sharpness = ConfigSlider(default=13,
                                                          limits=(0, 26))
                config.av.scaler_sharpness.addNotifier(setScaler_sharpness)
            else:
                config.av.scaler_sharpness = NoSave(ConfigNothing())

        if os.path.exists("/proc/stb/vmpeg/0/pep_scaler_vertical_dejagging"):

            def setScaler_vertical_dejagging(configElement):
                myval = configElement.value and "enable" or "disable"
                try:
                    print(
                        "[VideoEnhancement] setting scaler_vertical_dejagging to: %s"
                        % myval)
                    open("/proc/stb/vmpeg/0/pep_scaler_vertical_dejagging",
                         "w").write(myval)
                except IOError:
                    print(
                        "[VideoEnhancement] couldn't write pep_scaler_vertical_dejagging."
                    )

                if not VideoEnhancement.firstRun:
                    self.setConfiguredValues()

            config.pep.scaler_vertical_dejagging = ConfigBoolean(
                default=False,
                descriptions={
                    False: _("Disabled"),
                    True: _("Enabled")
                })
            config.pep.scaler_vertical_dejagging.addNotifier(
                setScaler_vertical_dejagging)
        else:
            config.pep.scaler_vertical_dejagging = NoSave(ConfigNothing())

        if os.path.exists("/proc/stb/vmpeg/0/smooth"):

            def setSmooth(configElement):
                myval = configElement.value and "enable" or "disable"
                try:
                    print("[VideoEnhancement] setting smooth to: %s" % myval)
                    open("/proc/stb/vmpeg/0/smooth", "w").write(myval)
                except IOError:
                    print("[VideoEnhancement] couldn't write smooth.")

                if not VideoEnhancement.firstRun:
                    self.setConfiguredValues()

            config.pep.smooth = ConfigBoolean(default=False,
                                              descriptions={
                                                  False: _("Disabled"),
                                                  True: _("Enabled")
                                              })
            config.pep.smooth.addNotifier(setSmooth)
        else:
            config.pep.smooth = NoSave(ConfigNothing())

        if VideoEnhancement.firstRun:
            self.setConfiguredValues()

        VideoEnhancement.firstRun = False
Ejemplo n.º 26
0
from Tools.Directories import InitFallbackFiles, resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_SKIN
InitFallbackFiles()

profile("config.misc")
config.misc.radiopic = ConfigText(
    default=resolveFilename(SCOPE_CURRENT_SKIN, "radio.mvi"))
config.misc.blackradiopic = ConfigText(
    default=resolveFilename(SCOPE_CURRENT_SKIN, "black.mvi"))
config.misc.useTransponderTime = ConfigYesNo(default=False)
config.misc.SyncTimeUsing = ConfigSelection(default="1",
                                            choices=[("0",
                                                      _("Transponder time")),
                                                     ("1", _("NTP"))])
config.misc.NTPserver = ConfigText(default='pool.ntp.org', fixed_size=False)
config.misc.startCounter = ConfigInteger(default=0)  # number of e2 starts...
config.misc.standbyCounter = NoSave(
    ConfigInteger(default=0))  # number of standby
config.misc.DeepStandby = NoSave(
    ConfigYesNo(default=False))  # detect deepstandby
config.misc.RestartUI = ConfigYesNo(
    default=False)  # detect user interface restart
config.misc.prev_wakeup_time = ConfigInteger(default=0)
#config.misc.prev_wakeup_time_type is only valid when wakeup_time is not 0
config.misc.prev_wakeup_time_type = ConfigInteger(default=0)
# 0 = RecordTimer, 1 = ZapTimer, 2 = Plugins, 3 = WakeupTimer
config.misc.epgcache_filename = ConfigText(default="/hdd/epg.dat",
                                           fixed_size=False)


def setEPGCachePath(configElement):
    if os.path.isdir(configElement.value) or os.path.islink(
            configElement.value):
Ejemplo n.º 27
0
    def buildMy_rec(self, device):
        try:
            if device.find('1') > 1:
                device2 = device.replace('1', '')
        except:
            device2 = ''
        try:
            if device.find('2') > 1:
                device2 = device.replace('2', '')
        except:
            device2 = ''
        try:
            if device.find('3') > 1:
                device2 = device.replace('3', '')
        except:
            device2 = ''
        try:
            if device.find('4') > 1:
                device2 = device.replace('4', '')
        except:
            device2 = ''
        try:
            if device.find('5') > 1:
                device2 = device.replace('5', '')
        except:
            device2 = ''
        try:
            if device.find('6') > 1:
                device2 = device.replace('6', '')
        except:
            device2 = ''
        try:
            if device.find('7') > 1:
                device2 = device.replace('7', '')
        except:
            device2 = ''
        try:
            if device.find('8') > 1:
                device2 = device.replace('8', '')
        except:
            device2 = ''
        try:
            if device.find('p1') > 1:
                device2 = device.replace('p1', '')
        except:
            device2 = ''
        try:
            if device.find('p2') > 1:
                device2 = device.replace('p2', '')
        except:
            device2 = ''
        try:
            if device.find('p3') > 1:
                device2 = device.replace('p3', '')
        except:
            device2 = ''
        try:
            if device.find('p4') > 1:
                device2 = device.replace('p4', '')
        except:
            device2 = ''
        try:
            if device.find('p5') > 1:
                device2 = device.replace('p5', '')
        except:
            device2 = ''
        try:
            if device.find('p6') > 1:
                device2 = device.replace('p6', '')
        except:
            device2 = ''
        try:
            if device.find('p7') > 1:
                device2 = device.replace('p7', '')
        except:
            device2 = ''
        try:
            if device.find('p8') > 1:
                device2 = device.replace('p8', '')
        except:
            device2 = ''
        devicetype = path.realpath('/sys/block/' + device2 + '/device')
        d2 = device
        name = 'USB: '
        mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/Infopanel/icons/dev_usbstick.png'
        if device2.startswith('mmcblk'):
            model = file('/sys/block/' + device2 + '/device/name').read()
            mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/Infopanel/icons/dev_mmc.png'
            name = 'MMC: '
        else:
            model = file('/sys/block/' + device2 + '/device/model').read()
        model = str(model).replace('\n', '')
        des = ''
        print "test:"
        if devicetype.find('/devices/pci') != -1 or devicetype.find(
                'ahci') != -1:
            name = _("HARD DISK: ")
            mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/Infopanel/icons/dev_hdd.png'
        name = name + model
        f = open('/proc/mounts', 'r')
        for line in f.readlines():
            if line.find(device) != -1:
                parts = line.strip().split()
                d1 = parts[1]
                dtype = parts[2]
                break
                continue
            else:
                d1 = _("None")
                dtype = _("unavailable")
        f.close()
        f = open('/proc/partitions', 'r')
        for line in f.readlines():
            if line.find(device) != -1:
                parts = line.strip().split()
                size = int(parts[2])
                if (((float(size) / 1024) / 1024) / 1024) > 1:
                    des = _("Size: ") + str(
                        round(((
                            (float(size) / 1024) / 1024) / 1024), 2)) + _("TB")
                elif ((size / 1024) / 1024) > 1:
                    des = _("Size: ") + str((size / 1024) / 1024) + _("GB")
                else:
                    des = _("Size: ") + str(size / 1024) + _("MB")
            else:
                try:
                    size = file('/sys/block/' + device2 + '/' + device +
                                '/size').read()
                    size = str(size).replace('\n', '')
                    size = int(size)
                except:
                    size = 0
                if ((((float(size) / 2) / 1024) / 1024) / 1024) > 1:
                    des = _("Size: ") + str(
                        round(((((float(size) / 2) / 1024) / 1024) / 1024),
                              2)) + _("TB")
                elif (((size / 2) / 1024) / 1024) > 1:
                    des = _("Size: ") + str(
                        ((size / 2) / 1024) / 1024) + _("GB")
                else:
                    des = _("Size: ") + str((size / 2) / 1024) + _("MB")
        f.close()
        item = NoSave(
            ConfigSelection(default='/media/' + device,
                            choices=[('/media/' + device, '/media/' + device),
                                     ('/media/hdd', '/media/hdd'),
                                     ('/media/hdd2', '/media/hdd2'),
                                     ('/media/hdd3', '/media/hdd3'),
                                     ('/media/usb', '/media/usb'),
                                     ('/media/usb2', '/media/usb2'),
                                     ('/media/usb3', '/media/usb3'),
                                     ('/media/mmc', '/media/mmc'),
                                     ('/media/mmc2', '/media/mmc2'),
                                     ('/media/mmc3', '/media/mmc3'),
                                     ('/usr', '/usr')]))
        if dtype == 'Linux':
            dtype = 'ext3'
        else:
            dtype = 'auto'
        item.value = d1.strip()
        text = name + ' ' + des + ' /dev/' + device
        res = getConfigListEntry(text, item, device, dtype)

        if des != '' and self.list.append(res):
            pass
Ejemplo n.º 28
0
class UserDialog(Screen, ConfigListScreen):
    skin = """
		<screen name="UserDialog" position="center,center" size="560,300" title="UserDialog">
			<ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
			<widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
			<widget name="config" position="5,50" size="550,200" zPosition="1" scrollbarMode="showOnDemand" />
			<ePixmap pixmap="skin_default/div-h.png" position="0,270" zPosition="1" size="560,2" />
			<widget source="introduction" render="Label" position="10,280" size="540,21" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#25062748" transparent="1"/>
			<widget source="VKeyIcon" render="Pixmap" pixmap="skin_default/buttons/key_text.png" position="10,280" zPosition="10" size="35,25" transparent="1" alphatest="on">
				<convert type="ConditionalShowHide" />
			</widget>
			<widget name="HelpWindow" pixmap="skin_default/vkey_icon.png" position="410,330" zPosition="1" size="1,1" transparent="1" alphatest="on" />
		</screen>"""

    def __init__(self, session, plugin_path, hostinfo=None):
        self.skin_path = plugin_path
        self.session = session
        Screen.__init__(self, self.session)
        self.hostinfo = hostinfo

        self.cache_file = '/etc/enigma2/' + self.hostinfo + '.cache'  # Path to cache directory
        self.createConfig()

        self["actions"] = NumberActionMap(
            ["SetupActions"], {
                "ok": self.ok,
                "back": self.close,
                "cancel": self.close,
                "red": self.close,
            }, -2)

        self["VirtualKB"] = ActionMap(["VirtualKeyboardActions"], {
            "showVirtualKeyboard": self.KeyText,
        }, -2)

        self.list = []
        ConfigListScreen.__init__(self, self.list, session=self.session)
        self.createSetup()
        self.onLayoutFinish.append(self.layoutFinished)
        # Initialize Buttons
        self["VKeyIcon"] = Boolean(False)
        self["HelpWindow"] = Pixmap()
        self["introduction"] = StaticText(_("Press OK to save settings."))
        self["key_red"] = StaticText(_("Close"))

    def layoutFinished(self):
        self.setTitle(_("Enter user and password for ") + self.hostinfo)

    # helper function to convert ips from a sring to a list of ints
    def convertIP(self, ip):
        strIP = ip.split('.')
        ip = []
        for x in strIP:
            ip.append(int(x))
        return ip

    def createConfig(self):
        self.usernameEntry = None
        self.passwordEntry = None
        username = ""
        password = ""

        if os.path.exists(self.cache_file):
            print 'Loading user cache from', self.cache_file
            try:
                self.hostdata = load_cache(self.cache_file)
                username = self.hostdata['username']
                password = self.hostdata['password']
            except:
                pass

        self.username = NoSave(
            ConfigText(default=username, visible_width=50, fixed_size=False))
        self.password = NoSave(
            ConfigPassword(default=password,
                           visible_width=50,
                           fixed_size=False))

    def createSetup(self):
        self.list = []
        self.usernameEntry = getConfigListEntry(_("Username"), self.username)
        self.list.append(self.usernameEntry)
        self.passwordEntry = getConfigListEntry(_("Password"), self.password)
        self.list.append(self.passwordEntry)

        self["config"].list = self.list
        self["config"].l.setList(self.list)
        self["config"].onSelectionChanged.append(self.selectionChanged)

    def KeyText(self):
        if self["config"].getCurrent() == self.usernameEntry:
            self.session.openWithCallback(
                lambda x: self.VirtualKeyBoardCallback(x, 'username'),
                VirtualKeyBoard,
                title=(_("Enter username:"******"config"].getCurrent() == self.passwordEntry:
            self.session.openWithCallback(
                lambda x: self.VirtualKeyBoardCallback(x, 'password'),
                VirtualKeyBoard,
                title=(_("Enter password:"******"config"].invalidate(self.usernameEntry)
            if entry == 'password':
                self.password.setValue(callback)
                self["config"].invalidate(self.passwordEntry)

    def newConfig(self):
        if self["config"].getCurrent() == self.InterfaceEntry:
            self.createSetup()

    def keyLeft(self):
        ConfigListScreen.keyLeft(self)

    def keyRight(self):
        ConfigListScreen.keyRight(self)

    def selectionChanged(self):
        current = self["config"].getCurrent()
        helpwindowpos = self["HelpWindow"].getPosition()
        if current[1].help_window.instance is not None:
            current[1].help_window.instance.move(
                ePoint(helpwindowpos[0], helpwindowpos[1]))

    def ok(self):

        self.hostdata = {
            'username': self.username.value,
            'password': self.password.value
        }
        write_cache(self.cache_file, self.hostdata)
        self.close(True)
Ejemplo n.º 29
0
 def initConfig(self):
     if self.editmode:
         if 'bouquet_info' in jglob.current_playlist:
             self.aliasCfg = NoSave(ConfigText(default=self.alias, fixed_size=False))
             self.xmltvCfg = NoSave(ConfigText(default=self.xmltv, fixed_size=False))
         if jglob.current_playlist['playlist_info']['playlisttype'] == 'xtream':
             self.protocolCfg = NoSave(ConfigSelection(default=self.protocol, choices=[('http://', _('http://')), ('https://', _('https://'))]))
             self.playlisttypeCfg = NoSave(ConfigSelection(default='standard', choices=[('standard', _('Standard Playlist')), ('m3u', _('M3U File'))]))
             self.serverCfg = NoSave(ConfigText(default=self.domain, fixed_size=False))
             self.portCfg = NoSave(ConfigNumber(default=self.port))
             self.usernameCfg = NoSave(ConfigText(default=self.username, fixed_size=False))
             self.passwordCfg = NoSave(ConfigText(default=self.password, fixed_size=False))
             self.outputCfg = NoSave(ConfigSelection(default=self.output, choices=[('ts', 'ts'), ('m3u8', 'm3u8')]))
         else:
             self.playlisttypeCfg = NoSave(ConfigSelection(default='m3u', choices=[('standard', _('Standard Playlist')), ('m3u', _('M3U File'))]))
             self.addressCfg = NoSave(ConfigText(default=self.address, fixed_size=False))
     else:
         self.playlisttypeCfg = NoSave(ConfigSelection(default='standard', choices=[('standard', _('Standard Playlist')), ('m3u', _('M3U File'))]))
         self.protocolCfg = NoSave(ConfigSelection(default='http://', choices=[('http://', _('http://')), ('https://', _('https://'))]))
         self.serverCfg = NoSave(ConfigText(default='domain.xyz', fixed_size=False))
         self.portCfg = NoSave(ConfigNumber(default=80))
         self.usernameCfg = NoSave(ConfigText(default=_('username'), fixed_size=False))
         self.passwordCfg = NoSave(ConfigText(default=_('password'), fixed_size=False))
         self.outputCfg = NoSave(ConfigSelection(default=self.output, choices=[('ts', 'ts'), ('m3u8', 'm3u8')]))
         self.addressCfg = NoSave(ConfigText(default=self.address, fixed_size=False))
Ejemplo n.º 30
0
	def createSetup(self):
		self.editListEntry = None
		self.changePin = None
		self.changeSetupPin = None
		
		self.list = []
		self.list.append(getConfigListEntry(_("Enable parental control"), config.ParentalControl.configured))
		self.editBouquetListEntry = -1
		self.reloadLists = -1
		self.divider = getConfigListEntry("- - - - - - - - - - - - - - - - - - - - - - -", NoSave(ConfigNothing()))
		self.resetMoviePinCache = getConfigListEntry(_("Reset movie / directory PIN cache"), NoSave(ConfigNothing()))
		self.changeMoviePin = getConfigListEntry(_("Change movie / directory PIN"), NoSave(ConfigNothing()))
		self.resetDeletePinCache = getConfigListEntry(_("Reset movie-delete PIN cache"), NoSave(ConfigNothing()))
		self.changeDeletePin = getConfigListEntry(_("Change movie-delete PIN"), NoSave(ConfigNothing()))
		if config.ParentalControl.configured.value:
			self.list.append(self.divider)
			self.list.append(getConfigListEntry(_("Protect setup"), config.ParentalControl.setuppinactive))
			if config.ParentalControl.setuppinactive.value:
				self.list.append(getConfigListEntry(_("Protect main menu"), config.ParentalControl.config_sections.main_menu))
				self.list.append(getConfigListEntry(_("Protect configuration"), config.ParentalControl.config_sections.configuration))
				self.list.append(getConfigListEntry(_("Protect movie list"), config.ParentalControl.config_sections.movie_list))
				self.list.append(getConfigListEntry(_("Protect timer list"), config.ParentalControl.config_sections.timer_list))
				self.list.append(getConfigListEntry(_("Protect plugin browser"), config.ParentalControl.config_sections.plugin_browser))
				self.list.append(getConfigListEntry(_("Protect standby menu"), config.ParentalControl.config_sections.standby_menu))
				self.list.append(getConfigListEntry(_("Protect VTi menu"), config.ParentalControl.config_sections.vti_menu))
				self.list.append(getConfigListEntry(_("Protect VTi Panel"), config.ParentalControl.config_sections.vti_panel))
				self.changeSetupPin = getConfigListEntry(_("Change setup PIN"), NoSave(ConfigNothing()))
				self.list.append(self.changeSetupPin)
			self.list.append(self.divider)
			self.list.append(getConfigListEntry(_("Protect services"), config.ParentalControl.servicepinactive))
			if config.ParentalControl.servicepinactive.value:
				self.list.append(getConfigListEntry(_("Parental control type"), config.ParentalControl.type))
				if config.ParentalControl.mode.value == "complex":
					self.changePin = getConfigListEntry(_("Change service PINs"), NoSave(ConfigNothing()))
					self.list.append(self.changePin)
				elif config.ParentalControl.mode.value == "simple":	
					self.changePin = getConfigListEntry(_("Change service PIN"), NoSave(ConfigNothing()))
					self.list.append(self.changePin)
				self.list.append(getConfigListEntry(_("Remember service PIN"), config.ParentalControl.storeservicepin))	
				self.list.append(getConfigListEntry(_("Remember service PIN cancel"), config.ParentalControl.storeservicepincancel))	
				self.editListEntry = getConfigListEntry(_("Edit services list"), NoSave(ConfigNothing()))
				self.list.append(self.editListEntry)
				self.editBouquetListEntry = getConfigListEntry(_("Edit bouquets list"), NoSave(ConfigNothing()))
				self.list.append(self.editBouquetListEntry)
				self.reloadLists = getConfigListEntry(_("Reload Black-/Whitelists"), NoSave(ConfigNothing()))
				self.list.append(self.reloadLists)
			self.list.append(self.divider)
			self.list.append(getConfigListEntry(_("Protect movies and directories"), config.ParentalControl.moviepinactive))
			if config.ParentalControl.moviepinactive.value:
				self.list.append(self.changeMoviePin)
				self.list.append(getConfigListEntry(_("Remember movie / directory PIN"), config.ParentalControl.storemoviepin))
				self.list.append(self.resetMoviePinCache)
			self.list.append(self.divider)
			self.list.append(getConfigListEntry(_("Protect deleting of movies"), config.ParentalControl.deletepinactive))
			if config.ParentalControl.deletepinactive.value:
				self.list.append(self.changeDeletePin)
				self.list.append(getConfigListEntry(_("Remember movie-delete PIN"), config.ParentalControl.storedeletepin))
				self.list.append(self.resetDeletePinCache)

		self["config"].list = self.list
		self["config"].setList(self.list)
class EPGRefreshServiceEditor(Screen, ConfigListScreen):
    """Edit Services to be refreshed by EPGRefresh"""

    skin = """<screen name="EPGRefreshServiceEditor" position="center,120" size="820,520" title="Edit Services to refresh">
		<ePixmap pixmap="skin_default/buttons/red.png" position="10,5" size="200,40" alphatest="on" />
		<ePixmap pixmap="skin_default/buttons/green.png" position="210,5" size="200,40" alphatest="on" />
		<ePixmap pixmap="skin_default/buttons/yellow.png" position="410,5" size="200,40" alphatest="on" />
		<ePixmap pixmap="skin_default/buttons/blue.png" position="610,5" size="200,40" alphatest="on" />
		<widget source="key_red" render="Label" position="10,5" size="200,40" zPosition="1" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" shadowColor="black" shadowOffset="-2,-2" />
		<widget source="key_green" render="Label" position="210,5" size="200,40" zPosition="1" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" shadowColor="black" shadowOffset="-2,-2" />
		<widget source="key_yellow" render="Label" position="410,5" size="200,40" zPosition="1" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" shadowColor="black" shadowOffset="-2,-2" />
		<widget source="key_blue" render="Label" position="610,5" size="200,40" zPosition="1" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" shadowColor="black" shadowOffset="-2,-2" />
		<eLabel position="10,50" size="800,1" backgroundColor="grey" />
		<widget name="config" position="10,60" size="800,450" enableWrapAround="1" scrollbarMode="showOnDemand" />
	</screen>"""

    def __init__(self, session, services):
        Screen.__init__(self, session)

        # Summary
        self.setup_title = _("EPGRefresh Services")
        self.onChangedEntry = []

        # We need to copy the list to be able to ignore changes
        self.services = (services[0][:], services[1][:])

        self.typeSelection = NoSave(
            ConfigSelection(
                choices=[("channels",
                          _("Channels")), ("bouquets", _("Bouquets"))]))
        self.typeSelection.addNotifier(self.refresh, initial_call=False)

        self.reloadList()

        ConfigListScreen.__init__(self,
                                  self.list,
                                  session=session,
                                  on_change=self.changed)

        # Initialize StaticTexts
        self["key_red"] = StaticText(_("Cancel"))
        self["key_green"] = StaticText(_("OK"))
        self["key_yellow"] = StaticText(_("delete"))
        self["key_blue"] = StaticText(_("New"))

        # Define Actions
        self["actions"] = ActionMap(
            ["SetupActions", "ColorActions"], {
                "cancel": self.cancel,
                "save": self.save,
                "yellow": self.removeService,
                "blue": self.newService
            })

        # Trigger change
        self.changed()

        self.onLayoutFinish.append(self.setCustomTitle)

    def setCustomTitle(self):
        self.setTitle(_("Edit Services to refresh"))

    def saveCurrent(self):
        del self.services[self.idx][:]

        # Warning, accessing a ConfigListEntry directly might be considered evil!

        myl = self["config"].getList()
        myl.pop(0)
        for item in myl:
            self.services[self.idx].append(item[1].value)

    def refresh(self, value):
        self.saveCurrent()

        self.reloadList()
        self["config"].setList(self.list)

    def reloadList(self):
        self.list = [getConfigListEntry(_("Editing"), self.typeSelection)]

        if self.typeSelection.value == "channels":
            self.idx = 0
        else:  # self.typeSelection.value == "bouquets":
            self.idx = 1

        self.list.extend([
            getConfigListEntry(
                _("Refreshing"),
                NoSave(
                    ConfigSelection(
                        choices=[(x, ServiceReference(x.sref).getServiceName(
                        ).replace('\xc2\x86', '').replace('\xc2\x87', ''))])))
            for x in self.services[self.idx]
        ])

    def changed(self):
        for x in self.onChangedEntry:
            x()

    def getCurrentEntry(self):
        cur = self["config"].getCurrent()
        if cur:
            return cur[0]
        return ""

    def getCurrentValue(self):
        cur = self["config"].getCurrent()
        if cur:
            return str(cur[1].getText())
        return ""

    def createSummary(self):
        return SetupSummary

    def removeService(self):
        cur = self["config"].getCurrent()
        if cur and cur[1] is not self.typeSelection:
            list = self["config"].getList()
            list.remove(cur)
            self["config"].setList(list)

    def newService(self):
        if self.typeSelection.value == "channels":
            self.session.openWithCallback(self.finishedServiceSelection,
                                          SimpleChannelSelection,
                                          _("Select channel to refresh"))
        else:  # self.typeSelection.value == "bouquets":
            self.session.openWithCallback(self.finishedServiceSelection,
                                          SimpleBouquetSelection,
                                          _("Select bouquet to refresh"))

    def finishedServiceSelection(self, *args):
        if args:
            list = self["config"].getList()
            list.append(
                getConfigListEntry(
                    _("Refreshing"),
                    NoSave(
                        ConfigSelection(choices=[(
                            EPGRefreshService(str(args[0].toString()), None),
                            ServiceReference(args[0]).getServiceName().replace(
                                '\xc2\x86', '').replace('\xc2\x87', ''))]))))
            self["config"].setList(list)

    def cancel(self):
        self.close(None)

    def save(self):
        self.saveCurrent()

        self.close(self.services)
Ejemplo n.º 32
0
class EmissionBandwidth(Screen, ConfigListScreen):
	def __init__(self, session, val, isTorrent, rpc_version):
		Screen.__init__(self, session)
		self.skinName = ["EmissionBandwith", "Setup"]

		# Summary
		self.setup_title = _("Bandwidth settings")
		self.onChangedEntry = []

		ConfigListScreen.__init__(self, [], session=session, on_change=self.changed)

		self.isTorrent = isTorrent
		if isTorrent:
			if rpc_version < 5:
				downloadLimitMode = val.downloadLimitMode
				uploadLimitMode = val.uploadLimitMode
				modelist = [(0, _("Global Setting")), (2, _("Unlimited")), (1, _("Limit"))]
			else:
				downloadLimitMode = val.downloadLimited
				uploadLimitMode = val.uploadLimited
				modelist = [(0, _("Global Setting")), (1, _("Limit"))] # XXX: this is a pure guess...

			self.downloadLimitMode = NoSave(ConfigSelection(choices=modelist, default=downloadLimitMode))
			self.downloadLimit = NoSave(ConfigNumber(default=val.downloadLimit))
			self.uploadLimitMode = NoSave(ConfigSelection(choices=modelist, default=uploadLimitMode))
			self.uploadLimit = NoSave(ConfigNumber(default=val.uploadLimit))
			self.maxConnectedPeers = NoSave(ConfigNumber(default=val.maxConnectedPeers))
		else: #if not isTorrent:
			if rpc_version < 5:
				peerLimit = val.peer_limit
				port = val.port
				pex_allowed = val.pex_allowed
			else:
				peerLimit = val.peer_limit_global
				port = val.peer_port
				pex_allowed = val.pex_enabled

			self.downloadLimitMode = NoSave(ConfigSelection(choices=[(0, _("Unlimited")), (1, _("Limit"))], default=val.speed_limit_down_enabled))
			self.downloadLimit = NoSave(ConfigNumber(default=val.speed_limit_down))
			self.uploadLimitMode = NoSave(ConfigSelection(choices=[(0, _("Unlimited")), (1, _("Limit"))], default=val.speed_limit_up_enabled))
			self.uploadLimit = NoSave(ConfigNumber(default=val.speed_limit_up))
			self.maxConnectedPeers = NoSave(ConfigNumber(default=peerLimit))
			self.encryption = NoSave(ConfigSelection(choices=[('required', _("required")), ('preferred', _("preferred")), ('tolerated', _("tolerated"))], default=val.encryption))
			self.download_dir = NoSave(ConfigText(default=val.download_dir, fixed_size=False))
			self.pex_allowed = NoSave(ConfigYesNo(default=pex_allowed))
			self.port = NoSave(ConfigNumber(default=port))
			self.port_forwarding_enabled = NoSave(ConfigYesNo(default=val.port_forwarding_enabled))

		self.downloadLimitMode.addNotifier(self.updateList, initial_call=False)
		self.uploadLimitMode.addNotifier(self.updateList, initial_call=False)

		self.updateList()

		# Initialize widgets
		self["key_green"] = StaticText(_("OK"))
		self["key_red"] = StaticText(_("Cancel"))
		self.full_title = _("%s bandwidth settings") % (isTorrent and str(val.name) or "eMission")

		# Define Actions
		self["actions"] = ActionMap(["SetupActions"],
			{
				"cancel": self.keyCancel,
				"save": self.keySave,
			}
		)

		# Trigger change
		self.changed()

		self.onLayoutFinish.append(self.setCustomTitle)

	def updateList(self, *args):
		list = [
			getConfigListEntry(_("Download rate"), self.downloadLimitMode)
		]
		if self.downloadLimitMode.value == 1:
			list.append(getConfigListEntry(_("Limit"), self.downloadLimit))
		list.append(getConfigListEntry(_("Upload rate"), self.uploadLimitMode))
		if self.uploadLimitMode.value == 1:
			list.append(getConfigListEntry(_("Limit"), self.uploadLimit))
		list.append(getConfigListEntry(_("Maximum Connections"), self.maxConnectedPeers))
		if not self.isTorrent:
			list.extend((
				getConfigListEntry(_("Encryption"), self.encryption),
				getConfigListEntry(_("Download directory"), self.download_dir),
				getConfigListEntry(_("Allow PEX"), self.pex_allowed),
				getConfigListEntry(_("Port"), self.port),
				getConfigListEntry(_("Enable Port-Forwarding"), self.port_forwarding_enabled),
			))
		self["config"].setList(list)

	def setCustomTitle(self):
		self.setTitle(self.full_title)

	def changed(self):
		for x in self.onChangedEntry:
			x()

	def getCurrentEntry(self):
		return self["config"].getCurrent()[0]

	def getCurrentValue(self):
		return str(self["config"].getCurrent()[1].getText())

	def createSummary(self):
		return SetupSummary

	def keySave(self):
		if self.downloadLimitMode.value == 2 or self.uploadLimitMode.value == 2:
			self.session.open(
					MessageBox,
					_("Setting \"Unlimited\" is not supported via RPC.\nEither abort or choose another limit to continue."),
					type=MessageBox.TYPE_ERROR
			)
		else:
			# NOTE: transmissionrpc will take care of translating the arguments
			dict = {
				'speed_limit_down_enabled': self.downloadLimitMode.value,
				'speed_limit_down': self.downloadLimit.value,
				'speed_limit_up_enabled': self.uploadLimitMode.value,
				'speed_limit_up': self.uploadLimit.value,
				'peer_limit': self.maxConnectedPeers.value,
			}
			if not self.isTorrent:
				dict.update({
					'encryption': self.encryption.value,
					'download_dir': self.download_dir.value,
					'pex_allowed': self.pex_allowed.value,
					'port': self.port.value,
					'port_forwarding_enabled': self.port_forwarding_enabled.value,
				})
			self.close(dict)
Ejemplo n.º 33
0
    def createConfig(self):
        self.sharenameEntry = None
        self.mounttypeEntry = None
        self.activeEntry = None
        self.ipEntry = None
        self.sharedirEntry = None
        self.optionsEntry = None
        self.usernameEntry = None
        self.passwordEntry = None
        self.hdd_replacementEntry = None
        self.sharetypelist = [("nfs", _("NFS share")), ("cifs", _("CIFS share"))]
        self.myBuffers = None
        
        if self.mountinfo.has_key('mounttype'):
            mounttype = self.mountinfo['mounttype']
            if not mounttype:
                mounttype = "nfs"
        else:
            mounttype = "nfs"

        if self.mountinfo.has_key('active'):
            active = self.mountinfo['active']
            if active == 'True':
                active = True
            if active == 'False':
                active = False
        else:
            active = True
        if self.mountinfo.has_key('ip'):
            if self.mountinfo['ip'] is False:
                ip = [192, 168, 0, 0]
            else:
                ip = self.convertIP(self.mountinfo['ip'])
        else:
            ip = [192, 168, 0, 0]
        if self.mountinfo.has_key('sharename'):
            sharename = self.mountinfo['sharename']
        else:
            sharename = "Sharename"
        if self.mountinfo.has_key('sharedir'):
            sharedir = self.mountinfo['sharedir']
        else:
            sharedir = "/export/hdd"
        if self.mountinfo.has_key('options'):
            if self.mountinfo['options'] != False:
                options = self.mountinfo['options']
                buffersDefault=''
                for option2check in [ ',rsize=8192,wsize=8192' , ',rsize=4096,wsize=4096' , ',rsize=16384,wsize=16384' ]:
                    if options.find(option2check) > 0:
                        buffersDefault=option2check
                        options = options.replace(option2check,'')
                        break
            else:
                options = 'rw,nolock,soft'
                buffersDefault = ',rsize=8192,wsize=8192'
        else:
            options = "rw,nolock,soft"
            buffersDefault=',rsize=8192,wsize=8192'
        if self.mountinfo.has_key('username'):
            username = self.mountinfo['username']
        else:
            username = ""
        if self.mountinfo.has_key('password'):
            password = self.mountinfo['password']
        else:
            password = ""
        if self.mountinfo.has_key('hdd_replacement'):
            hdd_replacement = self.mountinfo['hdd_replacement']
            if hdd_replacement == 'True':
                hdd_replacement = True
            if hdd_replacement == 'False':
                hdd_replacement = False
        else:
            hdd_replacement = False
        if sharename is False:
            sharename = "Sharename"
        if sharedir is False:
            sharedir = "/export/hdd"
        if mounttype == "nfs":
            defaultOptions = "rw,nolock,soft"
        else:
            defaultOptions = "rw,noatime,noserverino,iocharset=utf8"
        if username is False:
            username = ""
        if password is False:
            password = ""

        self.activeConfigEntry = NoSave(ConfigEnableDisable(default = active))
        self.ipConfigEntry = NoSave(ConfigIP(default = ip))
        self.sharenameConfigEntry = NoSave(ConfigText(default = sharename, visible_width = 50, fixed_size = False))
        self.sharedirConfigEntry = NoSave(ConfigText(default = sharedir, visible_width = 50, fixed_size = False))
        self.optionsConfigEntry = NoSave(ConfigText(default = defaultOptions, visible_width = 50, fixed_size = False))
        if options is not False:
            self.optionsConfigEntry.value = options
        self.usernameConfigEntry = NoSave(ConfigText(default = username, visible_width = 50, fixed_size = False))
        self.passwordConfigEntry = NoSave(ConfigPassword(default = password, visible_width = 50, fixed_size = False))
        self.mounttypeConfigEntry = NoSave(ConfigSelection(self.sharetypelist, default = mounttype ))
        self.hdd_replacementConfigEntry = NoSave(ConfigYesNo(default = hdd_replacement))
        #
        self.CurrentBuffers = NoSave(ConfigSelection([(",rsize=4096,wsize=4096", "4K"), (",rsize=8192,wsize=8192", "8K"), (",rsize=16384,wsize=16384", "16K"), ("", "MAX"),], default = buffersDefault ))
Ejemplo n.º 34
0
                    'crontab /etc/cron/crontabs/root -c /etc/cron/crontabs')
                self.updateList()

    def info(self):
        mysel = self['list'].getCurrent()
        if mysel:
            myline = mysel[1]
            self.session.open(MessageBox, _(myline), MessageBox.TYPE_INFO)

    def closeRecursive(self):
        self.close(True)


config.crontimers = ConfigSubsection()
config.crontimers.commandtype = NoSave(
    ConfigSelection(choices=[('custom',
                              _("Custom")), ('predefined', _("Predefined"))]))
config.crontimers.cmdtime = NoSave(ConfigClock(default=0))
config.crontimers.cmdtime.value, mytmpt = ([0, 0], [0, 0])
config.crontimers.user_command = NoSave(ConfigText(fixed_size=False))
config.crontimers.runwhen = NoSave(
    ConfigSelection(default='Daily',
                    choices=[('Hourly', _("Hourly")), ('Daily', _("Daily")),
                             ('Weekly', _("Weekly")),
                             ('Monthly', _("Monthly"))]))
config.crontimers.dayofweek = NoSave(
    ConfigSelection(default='Monday',
                    choices=[('Monday', _("Monday")),
                             ('Tuesday', _("Tuesday")),
                             ('Wednesday', _("Wednesday")),
                             ('Thursday', _("Thursday")),
Ejemplo n.º 35
0
    def getInitConfig(self):

        global cur_skin
        self.is_atile = False
        if cur_skin == 'AtileHD':
            self.is_atile = True

        self.title = _("BlueLineFHD Setup")
        self.skin_base_dir = "/usr/share/enigma2/%s/" % cur_skin

        self.default_font_file = "font_atile_Roboto.xml"
        self.default_color_file = "colors_Original.xml"
        self.default_epg_file = "epg_Original.xml"

        self.default_clock_file = "clock_Original.xml"
        self.default_infobar_file = "infobar_Original.xml"
        self.default_progr_epg_file = "progr_epg_Original.xml"
        self.default_sib_file = "sib_Original.xml"
        self.default_ch_se_file = "ch_se_Original.xml"
        self.default_progr_sib_file = "progr_sib_Original.xml"
        self.default_emcsel_file = "emcsel_Original.xml"
        self.default_progr_infobar_file = "progr_infobar_Original.xml"
        self.default_progr_chse_file = "progr_chse_Original.xml"
        self.default_hands_file = "hands_Original.xml"
        self.default_cpu_file = "cpu_Original.xml"
        self.default_crypt_file = "crypt_Original.xml"
        self.default_emu_file = "emu_Original.xml"
        self.default_tuner_file = "tuner_Original.xml"
        self.default_weather_file = "weather_Original.xml"

        self.color_file = "skin_user_colors.xml"
        self.epg_file = "skin_user_epg.xml"
        self.clock_file = "skin_user_clock.xml"
        self.infobar_file = "skin_user_infobar.xml"
        self.progr_epg_file = "skin_user_progr_epg.xml"
        self.sib_file = "skin_user_sib.xml"
        self.ch_se_file = "skin_user_ch_se.xml"
        self.progr_sib_file = "skin_user_progr_sib.xml"
        self.emcsel_file = "skin_user_emcsel.xml"
        self.progr_infobar_file = "skin_user_progr_infobar.xml"
        self.progr_chse_file = "skin_user_progr_chse.xml"
        self.hands_file = "skin_user_hands.xml"
        self.cpu_file = "skin_user_cpu.xml"
        self.crypt_file = "skin_user_crypt.xml"
        self.emu_file = "skin_user_emu.xml"
        self.tuner_file = "skin_user_tuner.xml"
        self.weather_file = "skin_user_weather.xml"

        # color
        current, choices = self.getSettings(self.default_color_file,
                                            self.color_file)
        self.myAtileHD_color = NoSave(
            ConfigSelection(default=current, choices=choices))
        # epg
        current, choices = self.getSettings(self.default_epg_file,
                                            self.epg_file)
        self.myAtileHD_epg = NoSave(
            ConfigSelection(default=current, choices=choices))
        # clock
        current, choices = self.getSettings(self.default_clock_file,
                                            self.clock_file)
        self.myAtileHD_clock = NoSave(
            ConfigSelection(default=current, choices=choices))
        # infobar
        current, choices = self.getSettings(self.default_infobar_file,
                                            self.infobar_file)
        self.myAtileHD_infobar = NoSave(
            ConfigSelection(default=current, choices=choices))
        # progr_epg
        current, choices = self.getSettings(self.default_progr_epg_file,
                                            self.progr_epg_file)
        self.myAtileHD_progr_epg = NoSave(
            ConfigSelection(default=current, choices=choices))
        # sib
        current, choices = self.getSettings(self.default_sib_file,
                                            self.sib_file)
        self.myAtileHD_sib = NoSave(
            ConfigSelection(default=current, choices=choices))
        # ch_se
        current, choices = self.getSettings(self.default_ch_se_file,
                                            self.ch_se_file)
        self.myAtileHD_ch_se = NoSave(
            ConfigSelection(default=current, choices=choices))
        # progr_sib
        current, choices = self.getSettings(self.default_progr_sib_file,
                                            self.progr_sib_file)
        self.myAtileHD_progr_sib = NoSave(
            ConfigSelection(default=current, choices=choices))
        # emcsel
        current, choices = self.getSettings(self.default_emcsel_file,
                                            self.emcsel_file)
        self.myAtileHD_emcsel = NoSave(
            ConfigSelection(default=current, choices=choices))
        # progr_infobar
        current, choices = self.getSettings(self.default_progr_infobar_file,
                                            self.progr_infobar_file)
        self.myAtileHD_progr_infobar = NoSave(
            ConfigSelection(default=current, choices=choices))
        # progr_chse
        current, choices = self.getSettings(self.default_progr_chse_file,
                                            self.progr_chse_file)
        self.myAtileHD_progr_chse = NoSave(
            ConfigSelection(default=current, choices=choices))
        # hands
        current, choices = self.getSettings(self.default_hands_file,
                                            self.hands_file)
        self.myAtileHD_hands = NoSave(
            ConfigSelection(default=current, choices=choices))
        # cpu
        current, choices = self.getSettings(self.default_cpu_file,
                                            self.cpu_file)
        self.myAtileHD_cpu = NoSave(
            ConfigSelection(default=current, choices=choices))
        # crypt
        current, choices = self.getSettings(self.default_crypt_file,
                                            self.crypt_file)
        self.myAtileHD_crypt = NoSave(
            ConfigSelection(default=current, choices=choices))
        # emu
        current, choices = self.getSettings(self.default_emu_file,
                                            self.emu_file)
        self.myAtileHD_emu = NoSave(
            ConfigSelection(default=current, choices=choices))
        # tuner
        current, choices = self.getSettings(self.default_tuner_file,
                                            self.tuner_file)
        self.myAtileHD_tuner = NoSave(
            ConfigSelection(default=current, choices=choices))
        # weather
        current, choices = self.getSettings(self.default_weather_file,
                                            self.weather_file)
        self.myAtileHD_weather = NoSave(
            ConfigSelection(default=current, choices=choices))
        # myatile
        myatile_active = self.getmyAtileState()
        self.myAtileHD_active = NoSave(ConfigYesNo(default=myatile_active))
        self.myAtileHD_fake_entry = NoSave(ConfigNothing())
Ejemplo n.º 36
0
    def __init__(self, session, serien_name, serien_wlid, serien_id,
                 serien_fsid):
        serienRecBaseScreen.__init__(self, session)
        Screen.__init__(self, session)
        HelpableScreen.__init__(self)
        self.list = []
        self.session = session
        self.serien_name = serien_name
        self.serien_id = serien_id
        self.serien_wlid = serien_wlid
        self.serien_fsid = serien_fsid
        self.database = SRDatabase(serienRecDataBaseFilePath)
        self.HilfeTexte = {}
        self.fromTime_index = 1
        self.toTime_index = 1
        self.margin_before_index = 1
        self.margin_after_index = 1
        self.NoOfRecords_index = 1

        self["actions"] = HelpableActionMap(
            self, "SerienRecorderActions", {
                "red":
                (self.cancel,
                 "Änderungen verwerfen und zurück zur Serien-Marker-Ansicht"),
                "green":
                (self.save,
                 "Einstellungen speichern und zurück zur Serien-Marker-Ansicht"
                 ),
                "blue": (self.resetCover, "Cover zurücksetzen"),
                "cancel":
                (self.cancel,
                 "Änderungen verwerfen und zurück zur Serien-Marker-Ansicht"),
                "ok": (self.ok, "Fenster für Verzeichnisauswahl öffnen"),
                "up": (self.keyUp, "eine Zeile nach oben"),
                "down": (self.keyDown, "eine Zeile nach unten"),
                "startTeletext": (self.showAbout, "Über dieses Plugin"),
            }, -1)
        self.helpList[0][2].sort()

        self["helpActions"] = ActionMap([
            "SerienRecorderActions",
        ], {
            "displayHelp": self.showHelp,
            "displayHelp_long": self.showManual,
        }, 0)

        self.setupSkin()
        if config.plugins.serienRec.showAllButtons.value:
            setMenuTexts(self)

        (AufnahmeVerzeichnis, Staffelverzeichnis, Vorlaufzeit, Nachlaufzeit,
         AnzahlWiederholungen, AufnahmezeitVon, AufnahmezeitBis,
         preferredChannel, useAlternativeChannel, vps, excludedWeekdays, tags,
         addToDatabase, updateFromEPG, skipSeriesServer, autoAdjust,
         epgSeriesName) = self.database.getMarkerSettings(self.serien_id)

        if not AufnahmeVerzeichnis:
            AufnahmeVerzeichnis = ""
        self.savetopath = ConfigText(default=AufnahmeVerzeichnis,
                                     fixed_size=False,
                                     visible_width=50)
        self.seasonsubdir = ConfigSelection(choices=[
            ("-1", "Gemäß Setup (dzt. %s)" %
             str(config.plugins.serienRec.seasonsubdir.value).replace(
                 "True", "Ja").replace("False", "Nein")), ("0", "Nein"),
            ("1", "Ja")
        ],
                                            default=str(Staffelverzeichnis))

        if str(Vorlaufzeit).isdigit():
            self.margin_before = ConfigInteger(Vorlaufzeit, (0, 999))
            self.enable_margin_before = ConfigYesNo(default=True)
        else:
            self.margin_before = ConfigInteger(
                config.plugins.serienRec.margin_before.value, (0, 999))
            self.enable_margin_before = ConfigYesNo(default=False)

        if str(Nachlaufzeit).isdigit():
            self.margin_after = ConfigInteger(Nachlaufzeit, (0, 999))
            self.enable_margin_after = ConfigYesNo(default=True)
        else:
            self.margin_after = ConfigInteger(
                config.plugins.serienRec.margin_after.value, (0, 999))
            self.enable_margin_after = ConfigYesNo(default=False)

        if str(AnzahlWiederholungen).isdigit():
            self.NoOfRecords = ConfigInteger(AnzahlWiederholungen, (1, 9))
            self.enable_NoOfRecords = ConfigYesNo(default=True)
        else:
            self.NoOfRecords = ConfigInteger(
                config.plugins.serienRec.NoOfRecords.value, (1, 9))
            self.enable_NoOfRecords = ConfigYesNo(default=False)

        if str(AufnahmezeitVon).isdigit():
            self.fromTime = ConfigClock(default=int(AufnahmezeitVon) * 60 +
                                        time.timezone)
            self.enable_fromTime = ConfigYesNo(default=True)
        else:
            self.fromTime = ConfigClock(default=(
                (config.plugins.serienRec.globalFromTime.value[0] * 60) +
                config.plugins.serienRec.globalFromTime.value[1]) * 60 +
                                        time.timezone)
            self.enable_fromTime = ConfigYesNo(default=False)

        if str(AufnahmezeitBis).isdigit():
            self.toTime = ConfigClock(default=int(AufnahmezeitBis) * 60 +
                                      time.timezone)
            self.enable_toTime = ConfigYesNo(default=True)
        else:
            self.toTime = ConfigClock(default=(
                (config.plugins.serienRec.globalToTime.value[0] * 60) +
                config.plugins.serienRec.globalToTime.value[1]) * 60 +
                                      time.timezone)
            self.enable_toTime = ConfigYesNo(default=False)

        if str(vps).isdigit():
            self.override_vps = ConfigYesNo(default=True)
            self.enable_vps = ConfigYesNo(default=bool(vps & 0x1))
            self.enable_vps_savemode = ConfigYesNo(default=bool(vps & 0x2))
        else:
            self.override_vps = ConfigYesNo(default=False)
            self.enable_vps = ConfigYesNo(default=False)
            self.enable_vps_savemode = ConfigYesNo(default=False)

        if str(addToDatabase).isdigit():
            self.addToDatabase = ConfigYesNo(default=bool(addToDatabase))
        else:
            self.addToDatabase = ConfigYesNo(default=True)

        if str(updateFromEPG).isdigit():
            self.updateFromEPG = ConfigYesNo(default=bool(updateFromEPG))
            self.enable_updateFromEPG = ConfigYesNo(default=True)
        else:
            self.updateFromEPG = ConfigYesNo(
                default=config.plugins.serienRec.eventid.value)
            self.enable_updateFromEPG = ConfigYesNo(default=False)

        if str(skipSeriesServer).isdigit():
            self.skipSeriesServer = ConfigYesNo(default=bool(skipSeriesServer))
            self.enable_skipSeriesServer = ConfigYesNo(default=True)
        else:
            self.skipSeriesServer = ConfigYesNo(
                default=config.plugins.serienRec.tvplaner_skipSerienServer.
                value)
            self.enable_skipSeriesServer = ConfigYesNo(default=False)

        if str(autoAdjust).isdigit():
            self.autoAdjust = ConfigYesNo(default=bool(autoAdjust))
            self.enable_autoAdjust = ConfigYesNo(default=True)
        else:
            self.autoAdjust = ConfigYesNo(default=False)
            self.enable_autoAdjust = ConfigYesNo(default=False)

        self.preferredChannel = ConfigSelection(choices=[("1", "Standard"),
                                                         ("0", "Alternativ")],
                                                default=str(preferredChannel))
        self.useAlternativeChannel = ConfigSelection(
            choices=[("-1", "Gemäß Setup (dzt. %s)" % str(
                config.plugins.serienRec.useAlternativeChannel.value).replace(
                    "True", "Ja").replace("False", "Nein")), ("0", "Nein"),
                     ("1", "Ja")],
            default=str(useAlternativeChannel))

        # excluded weekdays
        # each weekday is represented by a bit in the database field
        # 0 = Monday to 6 = Sunday, so if all weekdays are excluded we got 1111111 = 127
        if str(excludedWeekdays).isdigit():
            self.enable_excludedWeekdays = ConfigYesNo(default=True)
            self.excludeMonday = ConfigYesNo(default=bool(excludedWeekdays
                                                          & (1 << 0)))
            self.excludeTuesday = ConfigYesNo(default=bool(excludedWeekdays
                                                           & (1 << 1)))
            self.excludeWednesday = ConfigYesNo(default=bool(excludedWeekdays
                                                             & (1 << 2)))
            self.excludeThursday = ConfigYesNo(default=bool(excludedWeekdays
                                                            & (1 << 3)))
            self.excludeFriday = ConfigYesNo(default=bool(excludedWeekdays
                                                          & (1 << 4)))
            self.excludeSaturday = ConfigYesNo(default=bool(excludedWeekdays
                                                            & (1 << 5)))
            self.excludeSunday = ConfigYesNo(default=bool(excludedWeekdays
                                                          & (1 << 6)))
        else:
            self.enable_excludedWeekdays = ConfigYesNo(default=False)
            self.excludeMonday = ConfigYesNo(default=False)
            self.excludeTuesday = ConfigYesNo(default=False)
            self.excludeWednesday = ConfigYesNo(default=False)
            self.excludeThursday = ConfigYesNo(default=False)
            self.excludeFriday = ConfigYesNo(default=False)
            self.excludeSaturday = ConfigYesNo(default=False)
            self.excludeSunday = ConfigYesNo(default=False)

        # tags
        if tags is None or len(tags) == 0:
            self.serienmarker_tags = []
        else:
            self.serienmarker_tags = pickle.loads(tags)
        self.tags = NoSave(
            ConfigSelection(choices=[
                len(self.serienmarker_tags) == 0 and "Keine"
                or ' '.join(self.serienmarker_tags)
            ]))

        # EPG series name
        if epgSeriesName is None:
            epgSeriesName = ""
        self.epgSeriesName = ConfigText(default=epgSeriesName,
                                        fixed_size=False,
                                        visible_width=50)

        self.changedEntry()
        ConfigListScreen.__init__(self, self.list)
        self.setInfoText()
        self['config_information_text'].setText(
            self.HilfeTexte[self.savetopath])
        self.onLayoutFinish.append(self.setSkinProperties)
class AutoTimerServiceEditor(Screen, ConfigListScreen):
	"""Edit allowed Services of a AutoTimer"""

	skin = """<screen name="AutoTimerServiceEditor" title="Edit AutoTimer Services" position="center,center" size="565,280">
		<ePixmap position="0,0" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
		<ePixmap position="140,0" size="140,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />
		<ePixmap position="280,0" size="140,40" pixmap="skin_default/buttons/yellow.png" transparent="1" alphatest="on" />
		<ePixmap position="420,0" size="140,40" pixmap="skin_default/buttons/blue.png" transparent="1" alphatest="on" />
		<widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
		<widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
		<widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
		<widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
		<widget name="config" position="5,45" size="555,225" scrollbarMode="showOnDemand" />
	</screen>"""

	def __init__(self, session, servicerestriction, servicelist, bouquetlist):
		Screen.__init__(self, session)

		# Summary
		self.setup_title = _("AutoTimer Services")
		self.onChangedEntry = []

		self.services = (
			servicelist[:],
			bouquetlist[:]
		)

		self.enabled = NoSave(ConfigEnableDisable(default = servicerestriction))
		self.typeSelection = NoSave(ConfigSelection(choices = [
			("channels", _("Channels")),
			("bouquets", _("Bouquets"))]
		))
		self.typeSelection.addNotifier(self.refresh, initial_call = False)

		self.reloadList()

		ConfigListScreen.__init__(self, self.list, session = session, on_change = self.changed)

		# Initialize Buttons
		self["key_red"] = StaticText(_("Cancel"))
		self["key_green"] = StaticText(_("OK"))
		self["key_yellow"] = StaticText(_("Delete"))
		self["key_blue"] = StaticText(_("New"))

		# Define Actions
		self["actions"] = ActionMap(["SetupActions", "ColorActions"],
			{
				"cancel": self.cancel,
				"save": self.save,
				"yellow": self.remove,
				"blue": self.new
			}
		)

		# Trigger change
		self.changed()

		self.onLayoutFinish.append(self.setCustomTitle)

	def setCustomTitle(self):
		self.setTitle(_("Edit AutoTimer services"))

	def saveCurrent(self):
		del self.services[self.idx][:]

		# Warning, accessing a ConfigListEntry directly might be considered evil!

		myl = self["config"].getList()[:]
		myl.pop(0) # Enabled
		myl.pop(0) # Type
		for item in myl:
			self.services[self.idx].append(item[1].value)

	def refresh(self, *args, **kwargs):
		self.saveCurrent()

		self.reloadList()
		self["config"].setList(self.list)

	def reloadList(self):
		self.list = [
			getConfigListEntry(_("Enable Service Restriction"), self.enabled),
			getConfigListEntry(_("Editing"), self.typeSelection)
		]

		if self.typeSelection.value == "channels":
			self.idx = 0
		else: # self.typeSelection.value == "bouquets":
			self.idx = 1

		self.list.extend([
			getConfigListEntry(_("Record on"), NoSave(ConfigSelection(choices = [(str(x), ServiceReference(str(x)).getServiceName().replace('\xc2\x86', '').replace('\xc2\x87', ''))])))
				for x in self.services[self.idx]
		])

	def changed(self):
		for x in self.onChangedEntry:
			try:
				x()
			except Exception:
				pass

	def getCurrentEntry(self):
		return self["config"].getCurrent()[0]

	def getCurrentValue(self):
		return str(self["config"].getCurrent()[1].getText())

	def createSummary(self):
		return SetupSummary

	def remove(self):
		idx = self["config"].getCurrentIndex()
		if idx and idx > 1:
			list = self["config"].getList()
			list.remove(self["config"].getCurrent())
			self["config"].setList(list)

	def new(self):
		if self.typeSelection.value == "channels":
			self.session.openWithCallback(
				self.finishedServiceSelection,
				SimpleChannelSelection,
				_("Select channel to record on")
			)
		else: # self.typeSelection.value == "bouquets":
			self.session.openWithCallback(
				self.finishedServiceSelection,
				SimpleBouquetSelection,
				_("Select bouquet to record on")
			)

	def finishedServiceSelection(self, *args):
		if args:
			list = self["config"].getList()
			sname = args[0].toString()

			if self.typeSelection.value == "channels" and not (args[0].flags & eServiceReference.isGroup):
				# strip all after last : when adding a (non alternative) channel
				pos = sname.rfind(':')
				if pos != -1:
					if sname[pos-1] == ':':
						pos -= 1
					sname = sname[:pos+1]

			list.append(getConfigListEntry(_("Record on"), NoSave(ConfigSelection(choices = [(sname, ServiceReference(args[0]).getServiceName().replace('\xc2\x86', '').replace('\xc2\x87', ''))]))))
			self["config"].setList(list)

	def cancel(self):
		if self["config"].isChanged():
			self.session.openWithCallback(
				self.cancelConfirm,
				MessageBox,
				_("Really close without saving settings?")
			)
		else:
			self.close(None)

	def cancelConfirm(self, ret):
		if ret:
			self.close(None)

	def save(self):
		self.refresh()

		self.close((
			self.enabled.value,
			self.services
		))
Ejemplo n.º 38
0
class AutoMountEdit(Screen, ConfigListScreen):
	skin = """
		<screen name="AutoMountEdit" position="center,center" size="560,450" title="MountEdit">
			<ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
			<widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
			<widget name="config" position="5,50" size="550,250" zPosition="1" scrollbarMode="showOnDemand" />
			<ePixmap pixmap="skin_default/div-h.png" position="0,420" zPosition="1" size="560,2" />
			<widget source="introduction" render="Label" position="10,430" size="540,21" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#25062748" transparent="1"/>
			<widget source="VKeyIcon" render="Pixmap" pixmap="skin_default/buttons/key_text.png" position="10,430" zPosition="10" size="35,25" transparent="1" alphatest="on">
				<convert type="ConditionalShowHide" />
			</widget>
			<widget name="HelpWindow" pixmap="skin_default/vkey_icon.png" position="160,350" zPosition="1" size="1,1" transparent="1" alphatest="on" />
		</screen>"""

	def __init__(self, session, plugin_path, mountinfo = None, newmount = True):
		self.skin_path = plugin_path
		self.session = session
		Screen.__init__(self, self.session)

		self.onChangedEntry = [ ]
		self.mountinfo = mountinfo
		self.newmount = newmount
		if self.mountinfo is None:
			#Initialize blank mount enty
			self.mountinfo = { 'isMounted': False, 'mountusing': False, 'active': False, 'ip': False, 'sharename': False, 'sharedir': False, 'username': False, 'password': False, 'mounttype' : False, 'options' : False, 'hdd_replacement' : False }

		self.applyConfigRef = None
		self.updateConfigRef = None
		self.mounts = iAutoMount.getMountsList()
		self.createConfig()

		self["actions"] = NumberActionMap(["SetupActions", "ColorActions"],
		{
			"ok": self.ok,
			"back": self.close,
			"cancel": self.close,
			"red": self.close,
			"green": self.ok,
		}, -2)

		self["VirtualKB"] = ActionMap(["VirtualKeyboardActions"],
		{
			"showVirtualKeyboard": self.KeyText,
		}, -2)

		self.list = []
		ConfigListScreen.__init__(self, self.list,session = self.session)
		self.createSetup()
		self.onLayoutFinish.append(self.layoutFinished)
		# Initialize Buttons
		self["VKeyIcon"] = Boolean(False)
		self["HelpWindow"] = Pixmap()
		self["introduction"] = StaticText(_("Press OK to activate the settings."))
		self["key_red"] = StaticText(_("Cancel"))
		self["key_green"] = StaticText(_("Save"))
		self.selectionChanged()

	# for summary:
	def changedEntry(self):
		for x in self.onChangedEntry:
			x()

	def getCurrentEntry(self):
		return self["config"].getCurrent()[0]

	def getCurrentValue(self):
		return str(self["config"].getCurrent()[1].getText())

	def createSummary(self):
		from Screens.Setup import SetupSummary
		return SetupSummary

	def layoutFinished(self):
		self.setup_title = _("Mounts editor")
		Screen.setTitle(self, _(self.setup_title))
		self["VKeyIcon"].boolean = False
		self["VirtualKB"].setEnabled(False)
		self["HelpWindow"].hide()

	# helper function to convert ips from a sring to a list of ints
	def convertIP(self, ip):
		strIP = ip.split('.')
		ip = []
		for x in strIP:
			ip.append(int(x))
		return ip

	def exit(self):
		self.close()

	def createConfig(self):
		self.mountusingEntry = None
		self.sharenameEntry = None
		self.mounttypeEntry = None
		self.activeEntry = None
		self.ipEntry = None
		self.sharedirEntry = None
		self.optionsEntry = None
		self.usernameEntry = None
		self.passwordEntry = None
		self.hdd_replacementEntry = None

		self.mountusing = []
		self.mountusing.append(("autofs", _("AUTOFS (mount as needed)")))
		self.mountusing.append(("fstab", _("FSTAB (mount at boot)")))
		self.mountusing.append(("enigma2", _("Enigma2 (mount using enigma2)")))
		self.mountusing.append(("old_enigma2", _("Enigma2 old format (mount using linux)")))

		self.sharetypelist = []
		self.sharetypelist.append(("cifs", _("CIFS share")))
		self.sharetypelist.append(("nfs", _("NFS share")))

		mountusing_default = "fstab"
		if getImageDistro() in ("openvix", "easy-gui-aus", "beyonwiz", "openatv", "openhdf"):
			mountusing_default = "autofs"

		if self.mountinfo.has_key('mountusing'):
			mountusing = self.mountinfo['mountusing']
			if mountusing is False:
				mountusing = mountusing_default
		else:
				mountusing = mountusing_default

		if self.mountinfo.has_key('mounttype'):
			mounttype = self.mountinfo['mounttype']
			if mounttype is False:
				mounttype = "nfs"
		else:
			mounttype = "nfs"

		if self.mountinfo.has_key('active'):
			active = self.mountinfo['active']
			if active == 'True':
				active = True
			if active == 'False':
				active = False
		else:
			active = True
		if self.mountinfo.has_key('ip'):
			if self.mountinfo['ip'] is False:
				ip = [192, 168, 0, 0]
			else:
				ip = self.convertIP(self.mountinfo['ip'])
		else:
			ip = [192, 168, 0, 0]

		if mounttype == "nfs":
			defaultOptions = "rw,nolock,tcp"
		else:
			defaultOptions = "rw,utf8"
		if self.mountinfo['sharename'] and self.mountinfo.has_key('sharename'):
			sharename = re_sub("\W", "", self.mountinfo['sharename'])
			self.old_sharename = sharename
		else:
			sharename = ""
			self.old_sharename = None
		if self.mountinfo.has_key('sharedir'):
			sharedir = self.mountinfo['sharedir']
			self.old_sharedir = sharedir
		else:
			sharedir = ""
			self.old_sharedir = None
		if self.mountinfo.has_key('options'):
			options = self.mountinfo['options']
		else:
			options = defaultOptions
		if self.mountinfo.has_key('username'):
			username = self.mountinfo['username']
		else:
			username = ""
		if self.mountinfo.has_key('password'):
			password = self.mountinfo['password']
		else:
			password = ""
		if self.mountinfo.has_key('hdd_replacement'):
			hdd_replacement = self.mountinfo['hdd_replacement']
			if hdd_replacement == 'True':
				hdd_replacement = True
			if hdd_replacement == 'False':
				hdd_replacement = False
		else:
			hdd_replacement = False
		if sharename is False:
			sharename = ""
		if sharedir is False:
			sharedir = ""
		if username is False:
			username = ""
		if password is False:
			password = ""

		self.mountusingConfigEntry = NoSave(ConfigSelection(self.mountusing, default = mountusing ))
		self.activeConfigEntry = NoSave(ConfigEnableDisable(default = active))
		self.ipConfigEntry = NoSave(ConfigIP(default = ip))
		self.sharenameConfigEntry = NoSave(ConfigText(default = sharename, visible_width = 50, fixed_size = False))
		self.sharedirConfigEntry = NoSave(ConfigText(default = sharedir, visible_width = 50, fixed_size = False))
		self.optionsConfigEntry = NoSave(ConfigText(default = defaultOptions, visible_width = 50, fixed_size = False))
		if options is not False:
			self.optionsConfigEntry.value = options
		self.usernameConfigEntry = NoSave(ConfigText(default = username, visible_width = 50, fixed_size = False))
		self.passwordConfigEntry = NoSave(ConfigPassword(default = password, visible_width = 50, fixed_size = False))
		self.mounttypeConfigEntry = NoSave(ConfigSelection(self.sharetypelist, default = mounttype ))
		self.hdd_replacementConfigEntry = NoSave(ConfigYesNo(default = hdd_replacement))

	def createSetup(self):
		self.list = []
		self.mountusingEntry = getConfigListEntry(_("Mount using"), self.mountusingConfigEntry)
		self.list.append(self.mountusingEntry)
		self.activeEntry = getConfigListEntry(_("Active"), self.activeConfigEntry)
		self.list.append(self.activeEntry)
		self.sharenameEntry = getConfigListEntry(_("Local share name"), self.sharenameConfigEntry)
		self.list.append(self.sharenameEntry)
		self.mounttypeEntry = getConfigListEntry(_("Mount type"), self.mounttypeConfigEntry)
		self.list.append(self.mounttypeEntry)
		self.ipEntry = getConfigListEntry(_("Server IP"), self.ipConfigEntry)
		self.list.append(self.ipEntry)
		self.sharedirEntry = getConfigListEntry(_("Server share"), self.sharedirConfigEntry)
		self.list.append(self.sharedirEntry)
		self.hdd_replacementEntry = getConfigListEntry(_("use as HDD replacement"), self.hdd_replacementConfigEntry)
		self.list.append(self.hdd_replacementEntry)
		self.optionsEntry = getConfigListEntry(_("Mount options"), self.optionsConfigEntry)
		self.list.append(self.optionsEntry)
		if self.mounttypeConfigEntry.value == "cifs":
			self.usernameEntry = getConfigListEntry(_("Username"), self.usernameConfigEntry)
			self.list.append(self.usernameEntry)
			self.passwordEntry = getConfigListEntry(_("Password"), self.passwordConfigEntry)
			self.list.append(self.passwordEntry)

		self["config"].list = self.list
		self["config"].l.setList(self.list)
		self["config"].onSelectionChanged.append(self.selectionChanged)

	def newConfig(self):
		if self["config"].getCurrent() == self.mounttypeEntry:
			if self.mounttypeConfigEntry.value == "nfs":
				defaultOptions = "rw,nolock,tcp"
			else:
				defaultOptions = "rw,utf8"
			if self.mountinfo.has_key('options'):
				options = self.mountinfo['options']
			else:
				options = defaultOptions
			self.optionsConfigEntry = NoSave(ConfigText(default = defaultOptions, visible_width = 50, fixed_size = False))
			if options is not False:
				self.optionsConfigEntry.value = options
			self.createSetup()

	def KeyText(self):
		print "Green Pressed"
		if self["config"].getCurrent() == self.sharenameEntry:
			self.session.openWithCallback(lambda x : self.VirtualKeyBoardCallback(x, 'sharename'), VirtualKeyBoard, title = (_("Enter share name:")), text = self.sharenameConfigEntry.value)
		if self["config"].getCurrent() == self.sharedirEntry:
			self.session.openWithCallback(lambda x : self.VirtualKeyBoardCallback(x, 'sharedir'), VirtualKeyBoard, title = (_("Enter share directory:")), text = self.sharedirConfigEntry.value)
		if self["config"].getCurrent() == self.optionsEntry:
			self.session.openWithCallback(lambda x : self.VirtualKeyBoardCallback(x, 'options'), VirtualKeyBoard, title = (_("Enter options:")), text = self.optionsConfigEntry.value)
		if self["config"].getCurrent() == self.usernameEntry:
			self.session.openWithCallback(lambda x : self.VirtualKeyBoardCallback(x, 'username'), VirtualKeyBoard, title = (_("Enter username:"******"config"].getCurrent() == self.passwordEntry:
			self.session.openWithCallback(lambda x : self.VirtualKeyBoardCallback(x, 'password'), VirtualKeyBoard, title = (_("Enter password:"******"config"].invalidate(self.sharenameConfigEntry)
			if entry == 'sharedir':
				self.sharedirConfigEntry.setValue(callback)
				self["config"].invalidate(self.sharedirConfigEntry)
			if entry == 'options':
				self.optionsConfigEntry.setValue(callback)
				self["config"].invalidate(self.optionsConfigEntry)
			if entry == 'username':
				self.usernameConfigEntry.setValue(callback)
				self["config"].invalidate(self.usernameConfigEntry)
			if entry == 'password':
				self.passwordConfigEntry.setValue(callback)
				self["config"].invalidate(self.passwordConfigEntry)

	def keyLeft(self):
		ConfigListScreen.keyLeft(self)
		self.newConfig()

	def keyRight(self):
		ConfigListScreen.keyRight(self)
		self.newConfig()

	def selectionChanged(self):
		current = self["config"].getCurrent()
		if current == self.mountusingEntry or current == self.activeEntry or current == self.ipEntry or current == self.mounttypeEntry or current == self.hdd_replacementEntry:
			self["VKeyIcon"].boolean = False
			self["VirtualKB"].setEnabled(False)
		else:
			helpwindowpos = self["HelpWindow"].getPosition()
			if current[1].help_window.instance is not None:
				current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1]))
				self["VKeyIcon"].boolean = True
				self["VirtualKB"].setEnabled(True)

	def ok(self):
		current = self["config"].getCurrent()
		if current == self.sharenameEntry or current == self.sharedirEntry or current == self.sharedirEntry or current == self.optionsEntry or current == self.usernameEntry or current == self.passwordEntry:
			if current[1].help_window.instance is not None:
				current[1].help_window.instance.hide()

		sharename = re_sub("\W", "", self.sharenameConfigEntry.value)
		if self.sharedirConfigEntry.value.startswith("/"):
			sharedir = self.sharedirConfigEntry.value[1:]
		else:
			sharedir = self.sharedirConfigEntry.value

		sharexists = False
		for data in self.mounts:
			if self.mounts[data]['sharename'] == self.old_sharename:
				sharexists = True
				break

		if not self.newmount and self.old_sharename and self.old_sharename != self.sharenameConfigEntry.value:
			self.session.openWithCallback(self.updateConfig, MessageBox, _("You have changed the share name!\nUpdate existing entry and continue?\n"), default=False )
		elif not self.newmount and self.old_sharename and self.old_sharename == self.sharenameConfigEntry.value and sharexists:
			self.session.openWithCallback(self.updateConfig, MessageBox, _("A mount entry with this name already exists!\nUpdate existing entry and continue?\n"), default=False )
		else:
			self.session.openWithCallback(self.applyConfig, MessageBox, _("Are you sure you want to save this network mount?\n\n") )

	def updateConfig(self, ret = False):
		if (ret == True):
			sharedir = None
			if self.old_sharename != self.sharenameConfigEntry.value:
				xml_sharename = self.old_sharename
			else:
				xml_sharename = self.sharenameConfigEntry.value

			if self.sharedirConfigEntry.value.startswith("/"):
				sharedir = self.sharedirConfigEntry.value[1:]
			else:
				sharedir = self.sharedirConfigEntry.value
			iAutoMount.setMountsAttribute(xml_sharename, "mountusing", self.mountusingConfigEntry.value)
			iAutoMount.setMountsAttribute(xml_sharename, "sharename", self.sharenameConfigEntry.value)
			iAutoMount.setMountsAttribute(xml_sharename, "active", self.activeConfigEntry.value)
			iAutoMount.setMountsAttribute(xml_sharename, "ip", self.ipConfigEntry.getText())
			iAutoMount.setMountsAttribute(xml_sharename, "sharedir", sharedir)
			iAutoMount.setMountsAttribute(xml_sharename, "mounttype", self.mounttypeConfigEntry.value)
			iAutoMount.setMountsAttribute(xml_sharename, "options", self.optionsConfigEntry.value)
			iAutoMount.setMountsAttribute(xml_sharename, "username", self.usernameConfigEntry.value)
			iAutoMount.setMountsAttribute(xml_sharename, "password", self.passwordConfigEntry.value)
			iAutoMount.setMountsAttribute(xml_sharename, "hdd_replacement", self.hdd_replacementConfigEntry.value)

			self.updateConfigRef = None
			self.updateConfigRef = self.session.openWithCallback(self.updateConfigfinishedCB, MessageBox, _("Please wait while updating your network mount..."), type = MessageBox.TYPE_INFO, enable_input = False)
			iAutoMount.writeMountsConfig()
			iAutoMount.getAutoMountPoints(self.updateConfigDataAvail, True)
		else:
			self.close()

	def updateConfigDataAvail(self, data):
		if data is True:
			self.updateConfigRef.close(True)

	def updateConfigfinishedCB(self,data):
		if data is True:
			self.session.openWithCallback(self.Updatefinished, MessageBox, _("Your network mount has been updated."), type = MessageBox.TYPE_INFO, timeout = 10)

	def Updatefinished(self,data):
		if data is not None:
			if data is True:
				self.close()

	def applyConfig(self, ret = False):
		if (ret == True):
			data = { 'isMounted': False, 'mountusing': False, 'active': False, 'ip': False, 'sharename': False, 'sharedir': False, \
					'username': False, 'password': False, 'mounttype' : False, 'options' : False, 'hdd_replacement' : False }
			data['mountusing'] = self.mountusingConfigEntry.value
			data['active'] = self.activeConfigEntry.value
			data['ip'] = self.ipConfigEntry.getText()
			data['sharename'] = re_sub("\W", "", self.sharenameConfigEntry.value)
			# "\W" matches everything that is "not numbers, letters, or underscores",where the alphabet defaults to ASCII.
			if self.sharedirConfigEntry.value.startswith("/"):
				data['sharedir'] = self.sharedirConfigEntry.value[1:]
			else:
				data['sharedir'] = self.sharedirConfigEntry.value
			data['options'] =  self.optionsConfigEntry.value
			data['mounttype'] = self.mounttypeConfigEntry.value
			data['username'] = self.usernameConfigEntry.value
			data['password'] = self.passwordConfigEntry.value
			data['hdd_replacement'] = self.hdd_replacementConfigEntry.value
			self.applyConfigRef = None
			self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait for activation of your network mount..."), type = MessageBox.TYPE_INFO, enable_input = False)
			iAutoMount.automounts[self.sharenameConfigEntry.value] = data
			iAutoMount.writeMountsConfig()
			iAutoMount.getAutoMountPoints(self.applyConfigDataAvail, True)
		else:
			self.close()

	def applyConfigDataAvail(self, data):
		if data is True:
			self.applyConfigRef.close(True)

	def applyConfigfinishedCB(self,data):
		if data is True:
			self.session.openWithCallback(self.applyfinished, MessageBox, _("Your network mount has been activated."), type = MessageBox.TYPE_INFO, timeout = 10)

	def applyfinished(self,data):
		if data is not None:
			if data is True:
				self.close()
class AutoTimerEditorBase:
	""" Base Class for all Editors """
	def __init__(self, timer, editingDefaults = False):
		# Keep Timer
		self.timer = timer
		self.editingDefaults = editingDefaults

		# See if we are filtering some strings
		excludes = (
			timer.getExcludedTitle(),
			timer.getExcludedShort(),
			timer.getExcludedDescription(),
			timer.getExcludedDays()
		)
		includes = (
			timer.getIncludedTitle(),
			timer.getIncludedShort(),
			timer.getIncludedDescription(),
			timer.getIncludedDays()
		)
		if excludes[0] or excludes[1] \
				or excludes[2] or excludes[3] \
				or includes[0] or includes[1] \
				or includes[2] or includes[3]:
			self.filterSet = True
		else:
			self.filterSet = False
		self.excludes = excludes
		self.includes = includes

		# See if services are restricted
		self.services = timer.services
		self.bouquets = timer.bouquets
		if self.services or self.bouquets:
			self.serviceRestriction = True
		else:
			self.serviceRestriction = False

		self.createSetup(timer)

	def createSetup(self, timer):
		# Name
		self.name = NoSave(ConfigText(default = timer.name, fixed_size = False))

		# Match
		self.match = NoSave(ConfigText(default = timer.match, fixed_size = False))

		# Encoding
		default = timer.encoding
		selection = ['UTF-8', 'ISO8859-15']
		if default not in selection:
			selection.append(default)
		self.encoding = NoSave(ConfigSelection(choices = selection, default = default))

		# ...
		self.searchType = NoSave(ConfigSelection(choices = [("partial", _("partial match")), ("exact", _("exact match")), ("start", _("title starts with")), ("description", _("description match"))], default = timer.searchType))
		self.searchCase = NoSave(ConfigSelection(choices = [("sensitive", _("case-sensitive search")), ("insensitive", _("case-insensitive search"))], default = timer.searchCase))

		# Alternatives override
		self.overrideAlternatives = NoSave(ConfigYesNo(default = timer.overrideAlternatives))

		# Justplay
		self.justplay = NoSave(ConfigSelection(choices = [("zap", _("zap")), ("record", _("record"))], default = {0: "record", 1: "zap"}[int(timer.justplay)]))
		self.setEndtime = NoSave(ConfigYesNo(default=timer.setEndtime))

		# Timespan
		now = [x for x in localtime()]
		if timer.hasTimespan():
			default = True
			now[3] = timer.timespan[0][0]
			now[4] = timer.timespan[0][1]
			begin = mktime(now)
			now[3] = timer.timespan[1][0]
			now[4] = timer.timespan[1][1]
			end = mktime(now)
		else:
			default = False
			now[3] = 20
			now[4] = 15
			begin = mktime(now)
			now[3] = 23
			now[4] = 15
			end = mktime(now)
		self.timespan = NoSave(ConfigEnableDisable(default = default))
		self.timespanbegin = NoSave(ConfigClock(default = begin))
		self.timespanend = NoSave(ConfigClock(default = end))

		# Timeframe
		if timer.hasTimeframe():
			default = True
			begin = timer.getTimeframeBegin()
			end = timer.getTimeframeEnd()
		else:
			default = False
			now = [x for x in localtime()]
			now[3] = 0
			now[4] = 0
			begin = mktime(now)
			end = begin + 604800 # today + 7d
		self.timeframe = NoSave(ConfigEnableDisable(default = default))
		self.timeframebegin = NoSave(ConfigDateTime(begin, _("%d.%B %Y"), increment = 86400))
		self.timeframeend = NoSave(ConfigDateTime(end, _("%d.%B %Y"), increment = 86400))

		# Services have their own Screen

		# Offset
		if timer.hasOffset():
			default = True
			begin = timer.getOffsetBegin()
			end = timer.getOffsetEnd()
		else:
			default = False
			begin = 5
			end = 5
		self.offset = NoSave(ConfigEnableDisable(default = default))
		self.offsetbegin = NoSave(ConfigNumber(default = begin))
		self.offsetend = NoSave(ConfigNumber(default = end))

		# AfterEvent
		if timer.hasAfterEvent():
			default = {
				None: "default",
				AFTEREVENT.NONE: "nothing",
				AFTEREVENT.DEEPSTANDBY: "deepstandby",
				AFTEREVENT.STANDBY: "standby",
				AFTEREVENT.AUTO: "auto"
			}[timer.afterevent[0][0]]
		else:
			default = "default"
		self.afterevent = NoSave(ConfigSelection(choices = [
			("default", _("standard")), ("nothing", _("do nothing")),
			("standby", _("go to standby")),
			("deepstandby", _("go to deep standby")),
			("auto", _("auto"))], default = default))

		# AfterEvent (Timespan)
		if timer.hasAfterEvent() and timer.afterevent[0][1][0] is not None:
			default = True
			now[3] = timer.afterevent[0][1][0][0]
			now[4] = timer.afterevent[0][1][0][1]
			begin = mktime(now)
			now[3] = timer.afterevent[0][1][1][0]
			now[4] = timer.afterevent[0][1][1][1]
			end = mktime(now)
		else:
			default = False
			now[3] = 23
			now[4] = 15
			begin = mktime(now)
			now[3] = 7
			now[4] = 0
			end = mktime(now)
		self.afterevent_timespan = NoSave(ConfigEnableDisable(default = default))
		self.afterevent_timespanbegin = NoSave(ConfigClock(default = begin))
		self.afterevent_timespanend = NoSave(ConfigClock(default = end))

		# Enabled
		self.enabled = NoSave(ConfigYesNo(default = timer.enabled))

		# Maxduration
		if timer.hasDuration():
			default = True
			duration = timer.getDuration()
		else:
			default = False
			duration =70
		self.duration = NoSave(ConfigEnableDisable(default = default))
		self.durationlength = NoSave(ConfigNumber(default = duration))

		# Counter
		if timer.hasCounter():
			default = timer.matchCount
		else:
			default = 0
		self.counter = NoSave(ConfigNumber(default = default))
		self.counterLeft = NoSave(ConfigNumber(default = timer.matchLeft))
		default = timer.getCounterFormatString()
		selection = [("", _("Never")), ("%m", _("Monthly")), ("%U", _("Weekly (Sunday)")), ("%W", _("Weekly (Monday)"))]
		if default not in ('', '%m', '%U', '%W'):
			selection.append((default, _("Custom (%s)") % (default)))
		self.counterFormatString = NoSave(ConfigSelection(selection, default = default))

		# Avoid Duplicate Description
		self.avoidDuplicateDescription = NoSave(ConfigSelection([
				("0", _("No")),
				("1", _("On same service")),
				("2", _("On any service")),
				("3", _("Any service/recording")),
			],
			default = str(timer.getAvoidDuplicateDescription())
		))

		# Search for Duplicate Desciption in...
		self.searchForDuplicateDescription = NoSave(ConfigSelection([
				("0", _("Title")),
				("1", _("Title and Short description")),
				("2", _("Title and all descriptions")),
			],
		    default = str(timer.searchForDuplicateDescription)
		))

		# Custom Location
		if timer.hasDestination():
			default = True
		else:
			default = False

		self.useDestination = NoSave(ConfigYesNo(default = default))

		default = timer.destination or Directories.resolveFilename(Directories.SCOPE_HDD)
		choices = config.movielist.videodirs.value

		if default not in choices:
			choices.append(default)
		self.destination = NoSave(ConfigSelection(default = default, choices = choices))

		# Tags
		self.timerentry_tags = timer.tags
		self.tags = NoSave(ConfigSelection(choices = [len(self.timerentry_tags) == 0 and _("None") or ' '.join(self.timerentry_tags)]))

		# Vps
		self.vps_enabled = NoSave(ConfigYesNo(default = timer.vps_enabled))
		self.vps_overwrite = NoSave(ConfigYesNo(default = timer.vps_overwrite))

		# SeriesPlugin
		self.series_labeling = NoSave(ConfigYesNo(default = timer.series_labeling))

	def pathSelected(self, res):
		if res is not None:
			# I'm pretty sure this will always fail
			if config.movielist.videodirs.value != self.destination.choices:
					self.destination.setChoices(config.movielist.videodirs.value, default = res)
			self.destination.value = res

	def chooseDestination(self):
		from Screens.LocationBox import MovieLocationBox

		self.session.openWithCallback(
			self.pathSelected,
			MovieLocationBox,
			_("Choose target folder"),
			self.destination.value,
			minFree = 100 # Same requirement as in Screens.TimerEntry
		)

	def tagEditFinished(self, ret):
		if ret is not None:
			self.timerentry_tags = ret
			self.tags.setChoices([len(ret) == 0 and _("None") or ' '.join(ret)])

	def chooseTags(self):
		preferredTagEditor = getPreferredTagEditor()
		if preferredTagEditor:
			self.session.openWithCallback(
				self.tagEditFinished,
				preferredTagEditor,
				self.timerentry_tags
			)
Ejemplo n.º 40
0
class Menu(Screen, ProtectedScreen):
    ALLOW_SUSPEND = True

    def okbuttonClick(self):
        if self.number:
            self["menu"].setIndex(self.number - 1)
        self.resetNumberKey()
        selection = self["menu"].getCurrent()
        if selection and selection[1]:
            selection[1]()

    def execText(self, text):
        exec text

    def runScreen(self, arg):
        # arg[0] is the module (as string)
        # arg[1] is Screen inside this module
        #	plus possible arguments, as
        #	string (as we want to reference
        #	stuff which is just imported)
        if arg[0] != "":
            exec "from %s import %s" % (arg[0], arg[1].split(",")[0])
            self.openDialog(*eval(arg[1]))

    def nothing(self):  #dummy
        pass

    def openDialog(self, *dialog):  # in every layer needed
        self.session.openWithCallback(self.menuClosed, *dialog)

    def openSetup(self, dialog):
        self.session.openWithCallback(self.menuClosed, Setup, dialog)

    def addMenu(self, destList, node):
        requires = node.get("requires")
        if requires:
            if requires[0] == '!':
                if SystemInfo.get(requires[1:], False):
                    return
            elif not SystemInfo.get(requires, False):
                return
        MenuTitle = _(node.get("text", "??").encode("UTF-8"))
        entryID = node.get("entryID", "undefined")
        weight = node.get("weight", 50)
        x = node.get("flushConfigOnClose")
        if x:
            a = boundFunction(self.session.openWithCallback,
                              self.menuClosedWithConfigFlush, Menu, node)
        else:
            a = boundFunction(self.session.openWithCallback, self.menuClosed,
                              Menu, node)
        #TODO add check if !empty(node.childNodes)
        destList.append((MenuTitle, a, entryID, weight))

    def menuClosedWithConfigFlush(self, *res):
        configfile.save()
        self.menuClosed(*res)

    def menuClosed(self, *res):
        if res and res[0]:
            self.close(True)
        elif len(self.list) == 1:
            self.close()
        else:
            self.createMenuList()

    def addItem(self, destList, node):
        requires = node.get("requires")
        if requires:
            if requires[0] == '!':
                if SystemInfo.get(requires[1:], False):
                    return
            elif not SystemInfo.get(requires, False):
                return
        conditional = node.get("conditional")
        if conditional and not eval(conditional):
            return
        item_text = node.get("text", "").encode("UTF-8")
        entryID = node.get("entryID", "undefined")
        weight = node.get("weight", 50)
        for x in node:
            if x.tag == 'screen':
                module = x.get("module")
                screen = x.get("screen")

                if screen is None:
                    screen = module

                # print module, screen
                if module:
                    module = "Screens." + module
                else:
                    module = ""

                # check for arguments. they will be appended to the
                # openDialog call
                args = x.text or ""
                screen += ", " + args

                destList.append(
                    (_(item_text or "??"),
                     boundFunction(self.runScreen,
                                   (module, screen)), entryID, weight))
                return
            elif x.tag == 'code':
                destList.append(
                    (_(item_text
                       or "??"), boundFunction(self.execText,
                                               x.text), entryID, weight))
                return
            elif x.tag == 'setup':
                id = x.get("id")
                if item_text == "":
                    item_text = _(getSetupTitle(id))
                else:
                    item_text = _(item_text)
                destList.append(
                    (item_text, boundFunction(self.openSetup,
                                              id), entryID, weight))
                return
        destList.append((item_text, self.nothing, entryID, weight))

    def sortByName(self, listentry):
        return listentry[0].lower()

    def __init__(self, session, parent):
        self.parentmenu = parent
        Screen.__init__(self, session)
        self["key_blue"] = StaticText("")
        self["menu"] = List([])
        self["menu"].enableWrapAround = True
        self.showNumericHelp = False
        self.createMenuList()

        # for the skin: first try a menu_<menuID>, then Menu
        self.skinName = []
        if self.menuID:
            self.skinName.append("menu_" + self.menuID)
        self.skinName.append("Menu")

        ProtectedScreen.__init__(self)

        self["actions"] = NumberActionMap(
            [
                "OkCancelActions", "MenuActions", "NumberActions",
                "HelpActions", "ColorActions"
            ], {
                "ok": self.okbuttonClick,
                "cancel": self.closeNonRecursive,
                "menu": self.closeRecursive,
                "0": self.keyNumberGlobal,
                "1": self.keyNumberGlobal,
                "2": self.keyNumberGlobal,
                "3": self.keyNumberGlobal,
                "4": self.keyNumberGlobal,
                "5": self.keyNumberGlobal,
                "6": self.keyNumberGlobal,
                "7": self.keyNumberGlobal,
                "8": self.keyNumberGlobal,
                "9": self.keyNumberGlobal,
                "displayHelp": self.showHelp,
                "blue": self.keyBlue,
            })
        title = parent.get("title", "").encode("UTF-8") or None
        title = title and _(title) or _(parent.get("text", "").encode("UTF-8"))
        title = self.__class__.__name__ == "MenuSort" and _(
            "Menusort (%s)") % title or title
        self["title"] = StaticText(title)
        self.setScreenPathMode(True)
        self.setTitle(title)

        self.number = 0
        self.nextNumberTimer = eTimer()
        self.nextNumberTimer.callback.append(self.okbuttonClick)
        if len(self.list) == 1:
            self.onExecBegin.append(self.__onExecBegin)

    def __onExecBegin(self):
        self.onExecBegin.remove(self.__onExecBegin)
        self.okbuttonClick()

    def showHelp(self):
        if config.usage.menu_show_numbers.value not in ("menu&plugins",
                                                        "menu"):
            self.showNumericHelp = not self.showNumericHelp
            self.createMenuList(self.showNumericHelp)

    def createMenuList(self, showNumericHelp=False):
        self["key_blue"].text = _(
            "Edit menu") if config.usage.menu_sort_mode.value == "user" else ""
        self.list = []
        self.menuID = None
        for x in self.parentmenu:  #walk through the actual nodelist
            if not x.tag:
                continue
            if x.tag == 'item':
                item_level = int(x.get("level", 0))
                if item_level <= config.usage.setup_level.index:
                    self.addItem(self.list, x)
                    count += 1
            elif x.tag == 'menu':
                item_level = int(x.get("level", 0))
                if item_level <= config.usage.setup_level.index:
                    self.addMenu(self.list, x)
                    count += 1
            elif x.tag == "id":
                self.menuID = x.get("val")
                count = 0

            if self.menuID:
                # menuupdater?
                if menuupdater.updatedMenuAvailable(self.menuID):
                    for x in menuupdater.getUpdatedMenu(self.menuID):
                        if x[1] == count:
                            self.list.append(
                                (x[0],
                                 boundFunction(self.runScreen,
                                               (x[2], x[3] + ", ")), x[4]))
                            count += 1
        if self.menuID:
            # plugins
            for l in plugins.getPluginsForMenu(self.menuID):
                # check if a plugin overrides an existing menu
                plugin_menuid = l[2]
                for x in self.list:
                    if x[2] == plugin_menuid:
                        self.list.remove(x)
                        break
                self.list.append(
                    (l[0], boundFunction(l[1], self.session,
                                         close=self.close), l[2], l[3] or 50))

        if "user" in config.usage.menu_sort_mode.value and self.menuID == "mainmenu":
            plugin_list = []
            id_list = []
            for l in plugins.getPlugins([
                    PluginDescriptor.WHERE_PLUGINMENU,
                    PluginDescriptor.WHERE_EXTENSIONSMENU,
                    PluginDescriptor.WHERE_EVENTINFO
            ]):
                l.id = (l.name.lower()).replace(' ', '_')
                if l.id not in id_list:
                    id_list.append(l.id)
                    plugin_list.append(
                        (l.name, boundFunction(l.__call__,
                                               self.session), l.id, 200))

        if self.menuID is not None and "user" in config.usage.menu_sort_mode.value:
            self.sub_menu_sort = NoSave(ConfigDictionarySet())
            self.sub_menu_sort.value = config.usage.menu_sort_weight.getConfigValue(
                self.menuID, "submenu") or {}
            idx = 0
            for x in self.list:
                entry = list(self.list.pop(idx))
                m_weight = self.sub_menu_sort.getConfigValue(
                    entry[2], "sort") or entry[3]
                entry.append(m_weight)
                self.list.insert(idx, tuple(entry))
                self.sub_menu_sort.changeConfigValue(entry[2], "sort",
                                                     m_weight)
                idx += 1
            self.full_list = list(self.list)

        if config.usage.menu_sort_mode.value == "a_z":
            # Sort by Name
            self.list.sort(key=self.sortByName)
        elif "user" in config.usage.menu_sort_mode.value:
            self.hide_show_entries()
        else:
            # Sort by Weight
            self.list.sort(key=lambda x: int(x[3]))

        if config.usage.menu_show_numbers.value in ("menu&plugins",
                                                    "menu") or showNumericHelp:
            self.list = [(str(x[0] + 1) + " " + x[1][0], x[1][1], x[1][2])
                         for x in enumerate(self.list)]

        self["menu"].updateList(self.list)

    def keyNumberGlobal(self, number):
        self.number = self.number * 10 + number
        if self.number and self.number <= len(self["menu"].list):
            if number * 10 > len(self["menu"].list) or self.number >= 10:
                self.okbuttonClick()
            else:
                self.nextNumberTimer.start(1500, True)
        else:
            self.resetNumberKey()

    def resetNumberKey(self):
        self.nextNumberTimer.stop()
        self.number = 0

    def closeNonRecursive(self):
        self.resetNumberKey()
        self.close(False)

    def closeRecursive(self):
        self.resetNumberKey()
        self.close(True)

    def createSummary(self):
        return MenuSummary

    def isProtected(self):
        if config.ParentalControl.setuppinactive.value:
            if config.ParentalControl.config_sections.main_menu.value and not (
                    hasattr(self.session, 'infobar')
                    and self.session.infobar is None):
                return self.menuID == "mainmenu"
            elif config.ParentalControl.config_sections.configuration.value and self.menuID == "setup":
                return True
            elif config.ParentalControl.config_sections.timer_menu.value and self.menuID == "timermenu":
                return True
            elif config.ParentalControl.config_sections.standby_menu.value and self.menuID == "shutdown":
                return True

    def keyBlue(self):
        if "user" in config.usage.menu_sort_mode.value:
            self.session.openWithCallback(self.menuSortCallBack, MenuSort,
                                          self.parentmenu)
        else:
            return 0

    def menuSortCallBack(self, key=False):
        self.createMenuList()

    def keyCancel(self):
        self.closeNonRecursive()

    def hide_show_entries(self):
        self.list = []
        for entry in self.full_list:
            if not self.sub_menu_sort.getConfigValue(entry[2], "hidden"):
                self.list.append(entry)
        if not self.list:
            self.list.append(('', None, 'dummy', '10', 10))
        self.list.sort(key=lambda listweight: int(listweight[4]))
class AutoTimerFilterEditor(Screen, ConfigListScreen):
	"""Edit AutoTimer Filter"""

	skin = """<screen name="AutoTimerFilterEditor" title="Edit AutoTimer Filters" position="center,center" size="565,280">
		<ePixmap position="0,0" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
		<ePixmap position="140,0" size="140,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />
		<ePixmap position="280,0" size="140,40" pixmap="skin_default/buttons/yellow.png" transparent="1" alphatest="on" />
		<ePixmap position="420,0" size="140,40" pixmap="skin_default/buttons/blue.png" transparent="1" alphatest="on" />
		<widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
		<widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
		<widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
		<widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
		<widget name="config" position="5,45" size="555,225" scrollbarMode="showOnDemand" />
	</screen>"""

	def __init__(self, session, filterset, excludes, includes):
		Screen.__init__(self, session)

		# Summary
		self.setup_title = _("AutoTimer Filters")
		self.onChangedEntry = []

		self.typeSelection = NoSave(ConfigSelection(choices = [
			("title", _("in Title")),
			("short", _("in Shortdescription")),
			("desc", _("in Description")),
			("day", _("on Weekday"))]
		))
		self.typeSelection.addNotifier(self.refresh, initial_call = False)

		self.enabled = NoSave(ConfigYesNo(default = filterset))
		self.enabled.addNotifier(self.refresh, initial_call = False)

		self.excludes = excludes
		self.includes = includes
		self.oldexcludes = excludes
		self.oldincludes = includes
		self.idx = 0

		self.reloadList()

		ConfigListScreen.__init__(self, self.list, session = session, on_change = self.changed)

		# Initialize Buttons
		self["key_red"] = StaticText(_("Cancel"))
		self["key_green"] = StaticText(_("Save"))
		self["key_yellow"] = StaticText(_("Delete"))
		self["key_blue"] = StaticText(_("New"))

		# Define Actions
		self["actions"] = ActionMap(["SetupActions", "ColorActions"],
			{
				"cancel": self.cancel,
				"save": self.save,
				"yellow": self.remove,
				"blue": self.new
			}
		)

		# Trigger change
		self.changed()

		self.onLayoutFinish.append(self.setCustomTitle)

	def setCustomTitle(self):
		self.setTitle(_("Edit AutoTimer filters"))


	def changed(self):
		for x in self.onChangedEntry:
			try:
				x()
			except Exception:
				pass

	def getCurrentEntry(self):
		return self["config"].getCurrent()[0]

	def getCurrentValue(self):
		return str(self["config"].getCurrent()[1].getText())

	def createSummary(self):
		return SetupSummary

	def saveCurrent(self):
		del self.excludes[self.idx][:]
		del self.includes[self.idx][:]

		# Warning, accessing a ConfigListEntry directly might be considered evil!

		idx = -1
		for item in self["config"].getList()[:]:
			idx += 1
			# Skip empty entries (and those which are no filters)
			if item[1].value == "" or idx < 2:
				continue
			elif idx < self.lenExcludes:
				self.excludes[self.idx].append(item[1].value.encode("UTF-8"))
			else:
				self.includes[self.idx].append(item[1].value.encode("UTF-8"))

	def refresh(self, *args, **kwargs):
		self.saveCurrent()

		self.reloadList()
		self["config"].setList(self.list)

	def reloadList(self):
		self.list = [getConfigListEntry(_("Enable Filtering"), self.enabled)]
		if self.enabled.value:
			self.list.append(getConfigListEntry(_("Filter"), self.typeSelection))
			self.excludes = self.oldexcludes
			self.includes = self.oldincludes
		else:
			self.excludes = ([], [], [], [])
			self.includes = ([], [], [], [])

		if self.typeSelection.value == "day":
			self.idx = 3

			# Weekdays are presented as ConfigSelection
			self.list.extend([
				getConfigListEntry(_("Exclude"), NoSave(ConfigSelection(choices = weekdays, default = x)))
					for x in self.excludes[3]
			])
			self.lenExcludes = len(self.list)
			self.list.extend([
				getConfigListEntry(_("Include"), NoSave(ConfigSelection(choices = weekdays, default = x)))
					for x in self.includes[3]
			])
			return
		elif self.typeSelection.value == "title":
			self.idx = 0
		elif self.typeSelection.value == "short":
			self.idx = 1
		else: # self.typeSelection.value == "desc":
			self.idx = 2

		self.list.extend([
			getConfigListEntry(_("Exclude"), NoSave(ConfigText(default = x, fixed_size = False)))
				for x in self.excludes[self.idx]
		])
		self.lenExcludes = len(self.list)
		self.list.extend([
			getConfigListEntry(_("Include"), NoSave(ConfigText(default = x, fixed_size = False)))
				for x in self.includes[self.idx]
		])

	def remove(self):
		idx = self["config"].getCurrentIndex()
		if idx and idx > 1:
			if idx < self.lenExcludes:
				self.lenExcludes -= 1

			list = self["config"].getList()
			list.remove(self["config"].getCurrent())
			self["config"].setList(list)

	def new(self):
		self.session.openWithCallback(
			self.typeSelected,
			ChoiceBox,
			_("Select type of Filter"),
			[
				(_("Exclude"), 0),
				(_("Include"), 1),
			]
		)

	def typeSelected(self, ret):
		if ret is not None:
			list = self["config"].getList()

			if ret[1] == 0:
				pos = self.lenExcludes
				self.lenExcludes += 1
				text = ret[0]
			else:
				pos = len(self.list)
				text = ret[0]

			if self.typeSelection.value == "day":
				entry = getConfigListEntry(text, NoSave(ConfigSelection(choices = weekdays)))
			else:
				entry = getConfigListEntry(text, NoSave(ConfigText(fixed_size = False)))

			list.insert(pos, entry)
			self["config"].setList(list)

	def cancel(self):
		if self["config"].isChanged():
			self.session.openWithCallback(
				self.cancelConfirm,
				MessageBox,
				_("Really close without saving settings?")
			)
		else:
			self.close(None)

	def cancelConfirm(self, ret):
		if ret:
			self.close(None)

	def save(self):
		self.refresh()

		self.close((
			self.enabled.value,
			self.excludes,
			self.includes
		))
Ejemplo n.º 42
0
	def createConfig(self):
		self.mountusingEntry = None
		self.sharenameEntry = None
		self.mounttypeEntry = None
		self.activeEntry = None
		self.ipEntry = None
		self.sharedirEntry = None
		self.optionsEntry = None
		self.usernameEntry = None
		self.passwordEntry = None
		self.hdd_replacementEntry = None

		self.mountusing = []
		self.mountusing.append(("autofs", _("AUTOFS (mount as needed)")))
		self.mountusing.append(("fstab", _("FSTAB (mount at boot)")))
		self.mountusing.append(("enigma2", _("Enigma2 (mount using enigma2)")))
		self.mountusing.append(("old_enigma2", _("Enigma2 old format (mount using linux)")))

		self.sharetypelist = []
		self.sharetypelist.append(("cifs", _("CIFS share")))
		self.sharetypelist.append(("nfs", _("NFS share")))

		mountusing_default = "fstab"
		if getImageDistro() in ("openvix", "easy-gui-aus", "beyonwiz", "openatv", "openhdf"):
			mountusing_default = "autofs"

		if self.mountinfo.has_key('mountusing'):
			mountusing = self.mountinfo['mountusing']
			if mountusing is False:
				mountusing = mountusing_default
		else:
				mountusing = mountusing_default

		if self.mountinfo.has_key('mounttype'):
			mounttype = self.mountinfo['mounttype']
			if mounttype is False:
				mounttype = "nfs"
		else:
			mounttype = "nfs"

		if self.mountinfo.has_key('active'):
			active = self.mountinfo['active']
			if active == 'True':
				active = True
			if active == 'False':
				active = False
		else:
			active = True
		if self.mountinfo.has_key('ip'):
			if self.mountinfo['ip'] is False:
				ip = [192, 168, 0, 0]
			else:
				ip = self.convertIP(self.mountinfo['ip'])
		else:
			ip = [192, 168, 0, 0]

		if mounttype == "nfs":
			defaultOptions = "rw,nolock,tcp"
		else:
			defaultOptions = "rw,utf8"
		if self.mountinfo['sharename'] and self.mountinfo.has_key('sharename'):
			sharename = re_sub("\W", "", self.mountinfo['sharename'])
			self.old_sharename = sharename
		else:
			sharename = ""
			self.old_sharename = None
		if self.mountinfo.has_key('sharedir'):
			sharedir = self.mountinfo['sharedir']
			self.old_sharedir = sharedir
		else:
			sharedir = ""
			self.old_sharedir = None
		if self.mountinfo.has_key('options'):
			options = self.mountinfo['options']
		else:
			options = defaultOptions
		if self.mountinfo.has_key('username'):
			username = self.mountinfo['username']
		else:
			username = ""
		if self.mountinfo.has_key('password'):
			password = self.mountinfo['password']
		else:
			password = ""
		if self.mountinfo.has_key('hdd_replacement'):
			hdd_replacement = self.mountinfo['hdd_replacement']
			if hdd_replacement == 'True':
				hdd_replacement = True
			if hdd_replacement == 'False':
				hdd_replacement = False
		else:
			hdd_replacement = False
		if sharename is False:
			sharename = ""
		if sharedir is False:
			sharedir = ""
		if username is False:
			username = ""
		if password is False:
			password = ""

		self.mountusingConfigEntry = NoSave(ConfigSelection(self.mountusing, default = mountusing ))
		self.activeConfigEntry = NoSave(ConfigEnableDisable(default = active))
		self.ipConfigEntry = NoSave(ConfigIP(default = ip))
		self.sharenameConfigEntry = NoSave(ConfigText(default = sharename, visible_width = 50, fixed_size = False))
		self.sharedirConfigEntry = NoSave(ConfigText(default = sharedir, visible_width = 50, fixed_size = False))
		self.optionsConfigEntry = NoSave(ConfigText(default = defaultOptions, visible_width = 50, fixed_size = False))
		if options is not False:
			self.optionsConfigEntry.value = options
		self.usernameConfigEntry = NoSave(ConfigText(default = username, visible_width = 50, fixed_size = False))
		self.passwordConfigEntry = NoSave(ConfigPassword(default = password, visible_width = 50, fixed_size = False))
		self.mounttypeConfigEntry = NoSave(ConfigSelection(self.sharetypelist, default = mounttype ))
		self.hdd_replacementConfigEntry = NoSave(ConfigYesNo(default = hdd_replacement))
Ejemplo n.º 43
0
	def buildMy_rec(self, device):
		global device2
		device2 = ''
		try:
			if device.find('1') > 0:
				device2 = device.replace('1', '')
		except:
			device2 = ''
		try:
			if device.find('2') > 0:
				device2 = device.replace('2', '')
		except:
			device2 = ''
		try:
			if device.find('3') > 0:
				device2 = device.replace('3', '')
		except:
			device2 = ''
		try:
			if device.find('4') > 0:
				device2 = device.replace('4', '')
		except:
			device2 = ''
		try:
			if device.find('5') > 0:
				device2 = device.replace('5', '')
		except:
			device2 = ''
		try:
			if device.find('6') > 0:
				device2 = device.replace('6', '')
		except:
			device2 = ''
		try:
			if device.find('7') > 0:
				device2 = device.replace('7', '')
		except:
			device2 = ''
		try:
			if device.find('8') > 0:
				device2 = device.replace('8', '')
		except:
			device2 = ''
		try:
			if device.find('9') > 0:
				device2 = device.replace('9', '')
		except:
			device2 = ''
		try:
			if device =='mmcblk0p1':
				device2 = 'mmcblk0'
		except:
			device2 = ''
		try:
			devicetype = path.realpath('/sys/block/' + device2 + '/device')
		except:
			devicetype = ''
		d2 = device
		model = '-?-'
		name = "USB: "
		if 'sdhci' in devicetype:
			name = "MMC: "
			try:
				model = file('/sys/block/' + device2 + '/device/name').read()
			except:
				pass
			model = str(model).replace('\n', '')
		else:
			try:
				model = file('/sys/block/' + device2 + '/device/model').read()
			except:
				pass
			model = str(model).replace('\n', '')
		des = ''
		if devicetype.find('/devices/pci') != -1 or devicetype.find('/devices/platform/strict-ahci') != -1:
			name = _("HARD DISK: ")
		name = name + model
		f = open('/proc/mounts', 'r')
		for line in f.readlines():
			if line.find(device) != -1:
				parts = line.strip().split()
				d1 = parts[1]
				dtype = parts[2]
				break
				continue
			else:
				d1 = _("None")
				dtype = _("unavailable")
		f.close()
		f = open('/proc/partitions', 'r')
		for line in f.readlines():
			if line.find(device) != -1:
				parts = line.strip().split()
				size = int(parts[2])
				if (((float(size) / 1024) / 1024) / 1024) > 1:
					des = _("Size: ") + str(round((((float(size) / 1024) / 1024) / 1024),2)) + " " + _("TB")
				elif ((size / 1024) / 1024) > 1:
					des = _("Size: ") + str((size / 1024) / 1024) + " " + _("GB")
				else:
					des = _("Size: ") + str(size / 1024) + " " + _("MB")
			else:
				try:
					size = file('/sys/block/' + device2 + '/' + device + '/size').read()
					size = str(size).replace('\n', '')
					size = int(size)
				except:
					size = 0
				if ((((float(size) / 2) / 1024) / 1024) / 1024) > 1:
					des = _("Size: ") + str(round(((((float(size) / 2) / 1024) / 1024) / 1024),2)) + " " + _("TB")
				elif (((size / 2) / 1024) / 1024) > 1:
					des = _("Size: ") + str(((size / 2) / 1024) / 1024) + " " + _("GB")
				else:
					des = _("Size: ") + str((size / 2) / 1024) + " " + _("MB")
		f.close()
		choices = [('/media/' + device, '/media/' + device), ('/media/hdd', '/media/hdd'), ('/media/hdd2', '/media/hdd2'), ('/media/hdd3', '/media/hdd3'), ('/media/usb_hdd', '/media/usb_hdd'), ('/media/usb', '/media/usb'), ('/media/usb2', '/media/usb2'), ('/media/usb3', '/media/usb3')]
		if 'MMC' in name:
			choices.append(('/media/mmc', '/media/mmc'))
		item = NoSave(ConfigSelection(default='/media/' + device, choices=choices))
		if dtype == 'Linux':
			dtype = 'ext3'
		else:
			dtype = 'auto'
		item.value = d1.strip()
		text = name + ' ' + des + ' /dev/' + device
		res = getConfigListEntry(text, item, device, dtype)
		if des != '' and self.list.append(res):
			pass
Ejemplo n.º 44
0
class Menu(Screen, ProtectedScreen):
	ALLOW_SUSPEND = True

	def okbuttonClick(self):
		if self.number:
			self["menu"].setIndex(self.number - 1)
		self.resetNumberKey()
		selection = self["menu"].getCurrent()
		if selection and selection[1]:
			selection[1]()

	def execText(self, text):
		exec text

	def runScreen(self, arg):
		# arg[0] is the module (as string)
		# arg[1] is Screen inside this module
		#	plus possible arguments, as
		#	string (as we want to reference
		#	stuff which is just imported)
		# FIXME. somehow
		if arg[0] != "":
			exec "from " + arg[0] + " import *"

		self.openDialog(*eval(arg[1]))

	def nothing(self): #dummy
		pass

	def openDialog(self, *dialog): # in every layer needed
		self.session.openWithCallback(self.menuClosed, *dialog)

	def openSetup(self, dialog):
		self.session.openWithCallback(self.menuClosed, Setup, dialog)

	def addMenu(self, destList, node):
		requires = node.get("requires")
		if requires:
			if requires[0] == '!':
				if SystemInfo.get(requires[1:], False):
					return
			elif not SystemInfo.get(requires, False):
				return
		MenuTitle = _(node.get("text", "??").encode("UTF-8"))
		entryID = node.get("entryID", "undefined")
		weight = node.get("weight", 50)
		x = node.get("flushConfigOnClose")
		if x:
			a = boundFunction(self.session.openWithCallback, self.menuClosedWithConfigFlush, Menu, node)
		else:
			a = boundFunction(self.session.openWithCallback, self.menuClosed, Menu, node)
		#TODO add check if !empty(node.childNodes)
		destList.append((MenuTitle, a, entryID, weight))

	def menuClosedWithConfigFlush(self, *res):
		configfile.save()
		self.menuClosed(*res)

	def menuClosed(self, *res):
		if res and res[0]:
			self.close(True)
		else:
			self.createMenuList()

	def addItem(self, destList, node):
		requires = node.get("requires")
		if requires:
			if requires[0] == '!':
				if SystemInfo.get(requires[1:], False):
					return
			elif not SystemInfo.get(requires, False):
				return
		conditional = node.get("conditional")
		if conditional and not eval(conditional):
			return
		item_text = node.get("text", "").encode("UTF-8")
		entryID = node.get("entryID", "undefined")
		weight = node.get("weight", 50)
		for x in node:
			if x.tag == 'screen':
				module = x.get("module")
				screen = x.get("screen")

				if screen is None:
					screen = module

				# print module, screen
				if module:
					module = "Screens." + module
				else:
					module = ""

				# check for arguments. they will be appended to the
				# openDialog call
				args = x.text or ""
				screen += ", " + args

				destList.append((_(item_text or "??"), boundFunction(self.runScreen, (module, screen)), entryID, weight))
				return
			elif x.tag == 'code':
				destList.append((_(item_text or "??"), boundFunction(self.execText, x.text), entryID, weight))
				return
			elif x.tag == 'setup':
				id = x.get("id")
				if item_text == "":
					item_text = _(getSetupTitle(id))
				else:
					item_text = _(item_text)
				destList.append((item_text, boundFunction(self.openSetup, id), entryID, weight))
				return
		destList.append((item_text, self.nothing, entryID, weight))

	def sortByName(self, listentry):
		return listentry[0].lower()

	def __init__(self, session, parent):
		self.parentmenu = parent
		Screen.__init__(self, session)

		self["menu"] = List([])
		self["menu"].enableWrapAround = True
		self.createMenuList()

		# for the skin: first try a menu_<menuID>, then Menu
		self.skinName = [ ]
		if self.menuID:
			self.skinName.append("menu_" + self.menuID)
		self.skinName.append("Menu")

		ProtectedScreen.__init__(self)

		self["actions"] = NumberActionMap(["OkCancelActions", "MenuActions", "NumberActions"],
			{
				"ok": self.okbuttonClick,
				"cancel": self.closeNonRecursive,
				"menu": self.closeRecursive,
				"0": self.keyNumberGlobal,
				"1": self.keyNumberGlobal,
				"2": self.keyNumberGlobal,
				"3": self.keyNumberGlobal,
				"4": self.keyNumberGlobal,
				"5": self.keyNumberGlobal,
				"6": self.keyNumberGlobal,
				"7": self.keyNumberGlobal,
				"8": self.keyNumberGlobal,
				"9": self.keyNumberGlobal
			})
		if config.usage.menu_sort_mode.value == "user":
			self["EditActions"] = ActionMap(["ColorActions"],
			{
				"blue": self.keyBlue,
			})

		title = parent.get("title", "").encode("UTF-8") or None
		title = title and _(title) or _(parent.get("text", "").encode("UTF-8"))
		title = self.__class__.__name__ == "MenuSort" and _("Menusort (%s)") % title or title
		self["title"] = StaticText(title)
		self.setScreenPathMode(True)
		self.setTitle(title)

		self.number = 0
		self.nextNumberTimer = eTimer()
		self.nextNumberTimer.callback.append(self.okbuttonClick)

	def createMenuList(self):
		self.list = []
		self.menuID = None
		for x in self.parentmenu: #walk through the actual nodelist
			if not x.tag:
				continue
			if x.tag == 'item':
				item_level = int(x.get("level", 0))
				if item_level <= config.usage.setup_level.index:
					self.addItem(self.list, x)
					count += 1
			elif x.tag == 'menu':
				item_level = int(x.get("level", 0))
				if item_level <= config.usage.setup_level.index:
					self.addMenu(self.list, x)
					count += 1
			elif x.tag == "id":
				self.menuID = x.get("val")
				count = 0

			if self.menuID:
				# menuupdater?
				if menuupdater.updatedMenuAvailable(self.menuID):
					for x in menuupdater.getUpdatedMenu(self.menuID):
						if x[1] == count:
							self.list.append((x[0], boundFunction(self.runScreen, (x[2], x[3] + ", ")), x[4]))
							count += 1
		if self.menuID:
			# plugins
			for l in plugins.getPluginsForMenu(self.menuID):
				# check if a plugin overrides an existing menu
				plugin_menuid = l[2]
				for x in self.list:
					if x[2] == plugin_menuid:
						self.list.remove(x)
						break
				self.list.append((l[0], boundFunction(l[1], self.session, close=self.close), l[2], l[3] or 50))

		if config.usage.menu_sort_mode.value == "user" and self.menuID == "mainmenu":
			plugin_list = []
			id_list = []
			for l in plugins.getPlugins([PluginDescriptor.WHERE_PLUGINMENU ,PluginDescriptor.WHERE_EXTENSIONSMENU, PluginDescriptor.WHERE_EVENTINFO]):
				l.id = (l.name.lower()).replace(' ','_')
				if l.id not in id_list:
					id_list.append(l.id)
					plugin_list.append((l.name, boundFunction(l.__call__, self.session), l.id, 200))

		if self.menuID is not None and config.usage.menu_sort_mode.value == "user":
			self.sub_menu_sort = NoSave(ConfigDictionarySet())
			self.sub_menu_sort.value = config.usage.menu_sort_weight.getConfigValue(self.menuID, "submenu") or {}
			idx = 0
			for x in self.list:
				entry = list(self.list.pop(idx))
				m_weight = self.sub_menu_sort.getConfigValue(entry[2], "sort") or entry[3]
				entry.append(m_weight)
				self.list.insert(idx, tuple(entry))
				self.sub_menu_sort.changeConfigValue(entry[2], "sort", m_weight)
				idx += 1
			self.full_list = list(self.list)

		if config.usage.menu_sort_mode.value == "a_z":
			# Sort by Name
			self.list.sort(key=self.sortByName)
		elif config.usage.menu_sort_mode.value == "user":
			self.hide_show_entries()
		else:
			# Sort by Weight
			self.list.sort(key=lambda x: int(x[3]))

		if config.usage.menu_show_numbers.value:
			self.list = [(str(x[0] + 1) + " " +x[1][0], x[1][1], x[1][2]) for x in enumerate(self.list)]

		self["menu"].updateList(self.list)

	def keyNumberGlobal(self, number):
		self.number = self.number * 10 + number
		if self.number and self.number <= len(self["menu"].list):
			if number * 10 > len(self["menu"].list) or self.number >= 10:
				self.okbuttonClick()
			else:
				self.nextNumberTimer.start(1500, True)
		else:
			self.resetNumberKey()

	def resetNumberKey(self):
		self.nextNumberTimer.stop()
		self.number = 0

	def closeNonRecursive(self):
		self.resetNumberKey()
		self.close(False)

	def closeRecursive(self):
		self.resetNumberKey()
		self.close(True)

	def createSummary(self):
		return MenuSummary

	def isProtected(self):
		if config.ParentalControl.setuppinactive.value:
			if config.ParentalControl.config_sections.main_menu.value and not(hasattr(self.session, 'infobar') and self.session.infobar is None):
				return self.menuID == "mainmenu"
			elif config.ParentalControl.config_sections.configuration.value and self.menuID == "setup":
				return True
			elif config.ParentalControl.config_sections.timer_menu.value and self.menuID == "timermenu":
				return True
			elif config.ParentalControl.config_sections.standby_menu.value and self.menuID == "shutdown":
				return True

	def keyBlue(self):
		if config.usage.menu_sort_mode.value == "user":
			self.session.openWithCallback(self.menuSortCallBack, MenuSort, self.parentmenu)

	def menuSortCallBack(self, key=False):
		self.createMenuList()

	def keyCancel(self):
		self.closeNonRecursive()

	def hide_show_entries(self):
		self.list = []
		for entry in self.full_list:
			if not self.sub_menu_sort.getConfigValue(entry[2], "hidden"):
				self.list.append(entry)
		if not self.list:
			self.list.append(('',None,'dummy','10',10))
		self.list.sort(key=lambda listweight : int(listweight[4]))
Ejemplo n.º 45
0
class AutoMountEdit(Screen, ConfigListScreen):
	skin = """
		<screen name="AutoMountEdit" position="center,center" size="560,450" title="MountEdit">
			<ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
			<widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
			<widget name="config" position="5,50" size="550,250" zPosition="1" scrollbarMode="showOnDemand" />
			<ePixmap pixmap="skin_default/div-h.png" position="0,420" zPosition="1" size="560,2" />
			<widget source="introduction" render="Label" position="10,430" size="540,21" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#25062748" transparent="1"/>
			<widget name="VKeyIcon" pixmap="skin_default/buttons/key_text.png" position="10,430" zPosition="10" size="35,25" transparent="1" alphatest="on" />
			<widget name="HelpWindow" pixmap="skin_default/vkey_icon.png" position="160,350" zPosition="1" size="1,1" transparent="1" alphatest="on" />
		</screen>"""

	def __init__(self, session, plugin_path, mountinfo = None ):
		self.skin_path = plugin_path
		self.session = session
		Screen.__init__(self, self.session)

		self.onChangedEntry = [ ]
		self.mountinfo = mountinfo
		if self.mountinfo is None:
			#Initialize blank mount enty
			self.mountinfo = { 'isMounted': False, 'mountusing': False, 'active': False, 'ip': False, 'sharename': False, 'sharedir': False, 'username': False, 'password': False, 'mounttype' : False, 'options' : False, 'hdd_replacement' : False }

		self.applyConfigRef = None
		self.updateConfigRef = None
		self.mounts = iAutoMount.getMountsList()
		self.createConfig()

		self["actions"] = NumberActionMap(["SetupActions", "ColorActions"],
		{
			"ok": self.ok,
			"back": self.close,
			"cancel": self.close,
			"red": self.close,
			"green": self.ok,
		}, -2)

		self["VirtualKB"] = ActionMap(["VirtualKeyboardActions"],
		{
			"showVirtualKeyboard": self.KeyText,
		}, -2)

		self.list = []
		ConfigListScreen.__init__(self, self.list,session = self.session)
		self.createSetup()
		self.onLayoutFinish.append(self.layoutFinished)
		# Initialize Buttons
		self["VKeyIcon"] = Pixmap()
		self["HelpWindow"] = Pixmap()
		self["introduction"] = StaticText(_("Press OK to activate the settings."))
		self["key_red"] = StaticText(_("Cancel"))
		self["key_green"] = StaticText(_("Save"))
		self.selectionChanged()

	# for summary:
	def changedEntry(self):
		for x in self.onChangedEntry:
			x()

	def getCurrentEntry(self):
		return self["config"].getCurrent()[0]

	def getCurrentValue(self):
		return str(self["config"].getCurrent()[1].getText())

	def createSummary(self):
		from Screens.Setup import SetupSummary
		return SetupSummary

	def layoutFinished(self):
		self.setup_title = _("Mounts editor")
		Screen.setTitle(self, _(self.setup_title))
		self["VKeyIcon"].hide()
		self["VirtualKB"].setEnabled(False)
		self["HelpWindow"].hide()

	# helper function to convert ips from a sring to a list of ints
	def convertIP(self, ip):
		strIP = ip.split('.')
		ip = []
		for x in strIP:
			ip.append(int(x))
		return ip

	def exit(self):
		self.close()

	def createConfig(self):
		self.mountusingEntry = None
		self.sharenameEntry = None
		self.mounttypeEntry = None
		self.activeEntry = None
		self.ipEntry = None
		self.sharedirEntry = None
		self.optionsEntry = None
		self.usernameEntry = None
		self.passwordEntry = None
		self.hdd_replacementEntry = None

		self.mountusing = []
		self.mountusing.append(("autofs", _("AUTOFS (mount as needed)")))
		self.mountusing.append(("fstab", _("FSTAB (mount at boot)")))
		self.mountusing.append(("enigma2", _("Enigma2 (mount using enigma2)")))
		self.mountusing.append(("old_enigma2", _("Enigma2 old format (mount using linux)")))

		self.sharetypelist = []
		self.sharetypelist.append(("nfs", _("NFS share")))
		self.sharetypelist.append(("cifs", _("CIFS share")))

		if self.mountinfo.has_key('mountusing'):
			mountusing = self.mountinfo['mountusing']
			if mountusing is False:
				mountusing = "fstab"
		else:
			mountusing = "fstab"

		if self.mountinfo.has_key('mounttype'):
			mounttype = self.mountinfo['mounttype']
			if mounttype is False:
				mounttype = "nfs"
		else:
			mounttype = "nfs"

		if self.mountinfo.has_key('active'):
			active = self.mountinfo['active']
			if active == 'True':
				active = True
			if active == 'False':
				active = False
		else:
			active = True
		if self.mountinfo.has_key('ip'):
			if self.mountinfo['ip'] is False:
				ip = [192, 168, 0, 0]
			else:
				ip = self.convertIP(self.mountinfo['ip'])
		else:
			ip = [192, 168, 0, 0]

		if mounttype == "nfs":
			defaultOptions = "rw,nolock,tcp"
		else:
			defaultOptions = "rw,utf8"
		if self.mountinfo['sharename'] and self.mountinfo.has_key('sharename'):
			sharename = re_sub("\W", "", self.mountinfo['sharename'])
		else:
			sharename = "Sharename"
		if self.mountinfo.has_key('sharedir'):
			sharedir = self.mountinfo['sharedir']
		else:
			sharedir = "/export/hdd"
		if self.mountinfo.has_key('options'):
			options = self.mountinfo['options']
		else:
			options = defaultOptions
		if self.mountinfo.has_key('username'):
			username = self.mountinfo['username']
		else:
			username = ""
		if self.mountinfo.has_key('password'):
			password = self.mountinfo['password']
		else:
			password = ""
		if self.mountinfo.has_key('hdd_replacement'):
			hdd_replacement = self.mountinfo['hdd_replacement']
			if hdd_replacement == 'True':
				hdd_replacement = True
			if hdd_replacement == 'False':
				hdd_replacement = False
		else:
			hdd_replacement = False
		if sharename is False:
			sharename = "Sharename"
		if sharedir is False:
			sharedir = "/export/hdd"
		if username is False:
			username = ""
		if password is False:
			password = ""

		self.old_sharename = sharename
		self.old_sharedir = sharedir
		self.mountusingConfigEntry = NoSave(ConfigSelection(self.mountusing, default = mountusing ))
		self.activeConfigEntry = NoSave(ConfigEnableDisable(default = active))
		self.ipConfigEntry = NoSave(ConfigIP(default = ip))
		self.sharenameConfigEntry = NoSave(ConfigText(default = sharename, visible_width = 50, fixed_size = False))
		self.sharedirConfigEntry = NoSave(ConfigText(default = sharedir, visible_width = 50, fixed_size = False))
		self.optionsConfigEntry = NoSave(ConfigText(default = defaultOptions, visible_width = 50, fixed_size = False))
		if options is not False:
			self.optionsConfigEntry.value = options
		self.usernameConfigEntry = NoSave(ConfigText(default = username, visible_width = 50, fixed_size = False))
		self.passwordConfigEntry = NoSave(ConfigPassword(default = password, visible_width = 50, fixed_size = False))
		self.mounttypeConfigEntry = NoSave(ConfigSelection(self.sharetypelist, default = mounttype ))
		self.hdd_replacementConfigEntry = NoSave(ConfigYesNo(default = hdd_replacement))

	def createSetup(self):
		self.list = []
		self.mountusingEntry = getConfigListEntry(_("Mount using"), self.mountusingConfigEntry)
		self.list.append(self.mountusingEntry)
		self.activeEntry = getConfigListEntry(_("Active"), self.activeConfigEntry)
		self.list.append(self.activeEntry)
		self.sharenameEntry = getConfigListEntry(_("Local share name"), self.sharenameConfigEntry)
		self.list.append(self.sharenameEntry)
		self.mounttypeEntry = getConfigListEntry(_("Mount type"), self.mounttypeConfigEntry)
		self.list.append(self.mounttypeEntry)
		self.ipEntry = getConfigListEntry(_("Server IP"), self.ipConfigEntry)
		self.list.append(self.ipEntry)
		self.sharedirEntry = getConfigListEntry(_("Server share"), self.sharedirConfigEntry)
		self.list.append(self.sharedirEntry)
		self.hdd_replacementEntry = getConfigListEntry(_("use as HDD replacement"), self.hdd_replacementConfigEntry)
		self.list.append(self.hdd_replacementEntry)
		self.optionsEntry = getConfigListEntry(_("Mount options"), self.optionsConfigEntry)
		self.list.append(self.optionsEntry)
		if self.mounttypeConfigEntry.value == "cifs":
			self.usernameEntry = getConfigListEntry(_("Username"), self.usernameConfigEntry)
			self.list.append(self.usernameEntry)
			self.passwordEntry = getConfigListEntry(_("Password"), self.passwordConfigEntry)
			self.list.append(self.passwordEntry)

		self["config"].list = self.list
		self["config"].l.setList(self.list)
		self["config"].onSelectionChanged.append(self.selectionChanged)

	def newConfig(self):
		if self["config"].getCurrent() == self.mounttypeEntry:
			if self.mounttypeConfigEntry.value == "nfs":
				defaultOptions = "rw,nolock,tcp"
			else:
				defaultOptions = "rw,utf8"
			if self.mountinfo.has_key('options'):
				options = self.mountinfo['options']
			else:
				options = defaultOptions
			self.optionsConfigEntry = NoSave(ConfigText(default = defaultOptions, visible_width = 50, fixed_size = False))
			if options is not False:
				self.optionsConfigEntry.value = options
			self.createSetup()

	def KeyText(self):
		print "Green Pressed"
		if self["config"].getCurrent() == self.sharenameEntry:
			self.session.openWithCallback(lambda x : self.VirtualKeyBoardCallback(x, 'sharename'), VirtualKeyBoard, title = (_("Enter share name:")), text = self.sharenameConfigEntry.value)
		if self["config"].getCurrent() == self.sharedirEntry:
			self.session.openWithCallback(lambda x : self.VirtualKeyBoardCallback(x, 'sharedir'), VirtualKeyBoard, title = (_("Enter share directory:")), text = self.sharedirConfigEntry.value)
		if self["config"].getCurrent() == self.optionsEntry:
			self.session.openWithCallback(lambda x : self.VirtualKeyBoardCallback(x, 'options'), VirtualKeyBoard, title = (_("Enter options:")), text = self.optionsConfigEntry.value)
		if self["config"].getCurrent() == self.usernameEntry:
			self.session.openWithCallback(lambda x : self.VirtualKeyBoardCallback(x, 'username'), VirtualKeyBoard, title = (_("Enter username:"******"config"].getCurrent() == self.passwordEntry:
			self.session.openWithCallback(lambda x : self.VirtualKeyBoardCallback(x, 'password'), VirtualKeyBoard, title = (_("Enter password:"******"config"].invalidate(self.sharenameConfigEntry)
			if entry == 'sharedir':
				self.sharedirConfigEntry.setValue(callback)
				self["config"].invalidate(self.sharedirConfigEntry)
			if entry == 'options':
				self.optionsConfigEntry.setValue(callback)
				self["config"].invalidate(self.optionsConfigEntry)
			if entry == 'username':
				self.usernameConfigEntry.setValue(callback)
				self["config"].invalidate(self.usernameConfigEntry)
			if entry == 'password':
				self.passwordConfigEntry.setValue(callback)
				self["config"].invalidate(self.passwordConfigEntry)

	def keyLeft(self):
		ConfigListScreen.keyLeft(self)
		self.newConfig()

	def keyRight(self):
		ConfigListScreen.keyRight(self)
		self.newConfig()

	def selectionChanged(self):
		current = self["config"].getCurrent()
		if current == self.mountusingEntry or current == self.activeEntry or current == self.ipEntry or current == self.mounttypeEntry or current == self.hdd_replacementEntry:
			self["VKeyIcon"].hide()
			self["VirtualKB"].setEnabled(False)
		else:
			helpwindowpos = self["HelpWindow"].getPosition()
			if current[1].help_window.instance is not None:
				current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1]))
				self["VKeyIcon"].show()
				self["VirtualKB"].setEnabled(True)

	def ok(self):
		current = self["config"].getCurrent()
		if current == self.sharenameEntry or current == self.sharedirEntry or current == self.sharedirEntry or current == self.optionsEntry or current == self.usernameEntry or current == self.passwordEntry:
			if current[1].help_window.instance is not None:
				current[1].help_window.instance.hide()

		sharename = re_sub("\W", "", self.sharenameConfigEntry.value)
		if self.sharedirConfigEntry.value.startswith("/"):
			sharedir = self.sharedirConfigEntry.value[1:]
		else:
			sharedir = self.sharedirConfigEntry.value

		sharexists = False
		for data in self.mounts:
			if self.mounts[data]['sharename'] == self.old_sharename:
					sharexists = True
					break

		if self.old_sharename != self.sharenameConfigEntry.value:
			self.session.openWithCallback(self.updateConfig, MessageBox, _("You have changed the share name!\nUpdate existing entry and continue?\n"), default=False )
		elif self.old_sharename == self.sharenameConfigEntry.value and sharexists:
			self.session.openWithCallback(self.updateConfig, MessageBox, _("A mount entry with this name already exists!\nUpdate existing entry and continue?\n"), default=False )
		else:
			self.session.openWithCallback(self.applyConfig, MessageBox, _("Are you sure you want to save this network mount?\n\n") )

	def updateConfig(self, ret = False):
		if (ret == True):
			sharedir = None
			if self.old_sharename != self.sharenameConfigEntry.value:
				xml_sharename = self.old_sharename
			else:
				xml_sharename = self.sharenameConfigEntry.value

			if self.sharedirConfigEntry.value.startswith("/"):
				sharedir = self.sharedirConfigEntry.value[1:]
			else:
				sharedir = self.sharedirConfigEntry.value
			iAutoMount.setMountsAttribute(xml_sharename, "mountusing", self.mountusingConfigEntry.value)
			iAutoMount.setMountsAttribute(xml_sharename, "sharename", self.sharenameConfigEntry.value)
			iAutoMount.setMountsAttribute(xml_sharename, "active", self.activeConfigEntry.value)
			iAutoMount.setMountsAttribute(xml_sharename, "ip", self.ipConfigEntry.getText())
			iAutoMount.setMountsAttribute(xml_sharename, "sharedir", sharedir)
			iAutoMount.setMountsAttribute(xml_sharename, "mounttype", self.mounttypeConfigEntry.value)
			iAutoMount.setMountsAttribute(xml_sharename, "options", self.optionsConfigEntry.value)
			iAutoMount.setMountsAttribute(xml_sharename, "username", self.usernameConfigEntry.value)
			iAutoMount.setMountsAttribute(xml_sharename, "password", self.passwordConfigEntry.value)
			iAutoMount.setMountsAttribute(xml_sharename, "hdd_replacement", self.hdd_replacementConfigEntry.value)

			self.updateConfigRef = None
			self.updateConfigRef = self.session.openWithCallback(self.updateConfigfinishedCB, MessageBox, _("Please wait while updating your network mount..."), type = MessageBox.TYPE_INFO, enable_input = False)
			iAutoMount.writeMountsConfig()
			iAutoMount.getAutoMountPoints(self.updateConfigDataAvail, True)
		else:
			self.close()

	def updateConfigDataAvail(self, data):
		if data is True:
			self.updateConfigRef.close(True)

	def updateConfigfinishedCB(self,data):
		if data is True:
			self.session.openWithCallback(self.Updatefinished, MessageBox, _("Your network mount has been updated."), type = MessageBox.TYPE_INFO, timeout = 10)

	def Updatefinished(self,data):
		if data is not None:
			if data is True:
				self.close()

	def applyConfig(self, ret = False):
		if (ret == True):
			data = { 'isMounted': False, 'mountusing': False, 'active': False, 'ip': False, 'sharename': False, 'sharedir': False, \
					'username': False, 'password': False, 'mounttype' : False, 'options' : False, 'hdd_replacement' : False }
			data['mountusing'] = self.mountusingConfigEntry.value
			data['active'] = self.activeConfigEntry.value
			data['ip'] = self.ipConfigEntry.getText()
			data['sharename'] = re_sub("\W", "", self.sharenameConfigEntry.value)
			# "\W" matches everything that is "not numbers, letters, or underscores",where the alphabet defaults to ASCII.
			if self.sharedirConfigEntry.value.startswith("/"):
				data['sharedir'] = self.sharedirConfigEntry.value[1:]
			else:
				data['sharedir'] = self.sharedirConfigEntry.value
			data['options'] =  self.optionsConfigEntry.value
			data['mounttype'] = self.mounttypeConfigEntry.value
			data['username'] = self.usernameConfigEntry.value
			data['password'] = self.passwordConfigEntry.value
			data['hdd_replacement'] = self.hdd_replacementConfigEntry.value
			self.applyConfigRef = None
			self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait for activation of your network mount..."), type = MessageBox.TYPE_INFO, enable_input = False)
			iAutoMount.automounts[self.sharenameConfigEntry.value] = data
			iAutoMount.writeMountsConfig()
			iAutoMount.getAutoMountPoints(self.applyConfigDataAvail, True)
		else:
			self.close()

	def applyConfigDataAvail(self, data):
		if data is True:
			self.applyConfigRef.close(True)

	def applyConfigfinishedCB(self,data):
		if data is True:
			self.session.openWithCallback(self.applyfinished, MessageBox, _("Your network mount has been activated."), type = MessageBox.TYPE_INFO, timeout = 10)

	def applyfinished(self,data):
		if data is not None:
			if data is True:
				self.close()
Ejemplo n.º 46
0
class GrowleeConfiguration(Screen, ConfigListScreen):
    skin = """
		<screen name="GrowleeConfiguration" position="center,center" size="560,400" title="Growlee Setup" >
			<ePixmap position="0,0" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
			<ePixmap position="140,0" size="140,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />
			<ePixmap position="280,0" size="140,40" pixmap="skin_default/buttons/yellow.png" transparent="1" alphatest="on" />
			<ePixmap position="420,0" size="140,40" pixmap="skin_default/buttons/blue.png" transparent="1" alphatest="on" />
			<widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
			<widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
			<widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
			<widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
			<widget name="config" position="5,45" size="550,350" scrollbarMode="showOnDemand" />
		</screen>"""

    def __init__(self, session):
        Screen.__init__(self, session)

        # Buttons
        self["key_red"] = StaticText(_("Cancel"))
        self["key_green"] = StaticText(_("OK"))
        self["key_yellow"] = StaticText(_("New"))
        self["key_blue"] = StaticText(_("Delete"))

        # Summary
        self.setup_title = "Growlee Configuration"
        self.onChangedEntry = []

        # Define Actions
        self["setupActions"] = ActionMap(
            ["SetupActions", "ColorActions"],
            {"blue": self.delete, "yellow": self.new, "cancel": self.keyCancel, "save": self.keySave},
        )

        self.hostElement = NoSave(ConfigSelection(choices=[(x, x.name.value) for x in config.plugins.growlee.hosts]))
        self.hostElement.addNotifier(self.setupList, initial_call=False)
        ConfigListScreen.__init__(self, [], session=session, on_change=self.changed)
        self.cur = self.hostElement.value

        # Trigger change
        self.setupList()
        self.changed()

    def delete(self):
        from Screens.MessageBox import MessageBox

        self.session.openWithCallback(
            self.deleteConfirm, MessageBox, _("Really delete this entry?\nIt cannot be recovered!")
        )

    def deleteConfirm(self, result):
        if result and config.plugins.growlee.hostcount.value > 0:
            config.plugins.growlee.hostcount.value -= 1
            config.plugins.growlee.hosts.remove(self.cur)
            self.hostElement.setChoices([(x, x.name.value) for x in config.plugins.growlee.hosts])
            self.cur = self.hostElement.value

    def new(self):
        self.cur = addHost(_("New connection"))
        config.plugins.growlee.hostcount.value += 1
        self.hostElement.setChoices([(x, x.name.value) for x in config.plugins.growlee.hosts])
        self.hostElement.setValue(self.cur)

    def changed(self):
        for x in self.onChangedEntry:
            x()

    def setupList(self, *args):
        last = self.cur
        if self.setupList in last.protocol.notifiers:
            last.protocol.removeNotifier(self.setupList)
        cur = self.hostElement.value
        self.cur = cur
        cur.protocol.addNotifier(self.setupList, initial_call=False)

        l = [
            getConfigListEntry(_("Host"), self.hostElement),
            getConfigListEntry(_("Name"), cur.name),
            getConfigListEntry(_("Type"), cur.protocol),
            getConfigListEntry(_("Minimum Priority"), cur.level),
            getConfigListEntry(_("Send Notifications?"), cur.enable_outgoing),
        ]

        proto = cur.protocol.value
        if proto == "prowl":
            l.append(getConfigListEntry(_("API Key"), cur.password))
        else:
            if proto != "gntp":
                l.append(getConfigListEntry(_("Receive Notifications?"), cur.enable_incoming))
            l.append(getConfigListEntry(_("Address"), cur.address))
            if proto == "growl" or proto == "gntp":
                l.append(getConfigListEntry(_("Password"), cur.password))

        self["config"].list = l

    def getCurrentEntry(self):
        cur = self["config"].getCurrent()
        return cur and cur[0]

    def getCurrentValue(self):
        cur = self["config"].getCurrent()
        return cur and str(cur[1].getText())

    def createSummary(self):
        return SetupSummary

    def keySave(self):
        config.plugins.growlee.save()
        if self["config"].isChanged():

            def doConnect(*args, **kwargs):
                growleeConnection.listen()

            d = growleeConnection.stop()
            if d is not None:
                d.addCallback(doConnect).addErrback(emergencyDisable)
            else:
                maybeConnect()

        self.saveAll()
        self.close()

    def close(self):
        if self.setupList in self.cur.protocol.notifiers:
            self.cur.protocol.removeNotifier(self.setupList)
        Screen.close(self)
Ejemplo n.º 47
0
	def createMenuList(self):
		self.list = []
		self.menuID = None
		for x in self.parentmenu: #walk through the actual nodelist
			if not x.tag:
				continue
			if x.tag == 'item':
				item_level = int(x.get("level", 0))
				if item_level <= config.usage.setup_level.index:
					self.addItem(self.list, x)
					count += 1
			elif x.tag == 'menu':
				item_level = int(x.get("level", 0))
				if item_level <= config.usage.setup_level.index:
					self.addMenu(self.list, x)
					count += 1
			elif x.tag == "id":
				self.menuID = x.get("val")
				count = 0

			if self.menuID:
				# menuupdater?
				if menuupdater.updatedMenuAvailable(self.menuID):
					for x in menuupdater.getUpdatedMenu(self.menuID):
						if x[1] == count:
							self.list.append((x[0], boundFunction(self.runScreen, (x[2], x[3] + ", ")), x[4]))
							count += 1
		if self.menuID:
			# plugins
			for l in plugins.getPluginsForMenu(self.menuID):
				# check if a plugin overrides an existing menu
				plugin_menuid = l[2]
				for x in self.list:
					if x[2] == plugin_menuid:
						self.list.remove(x)
						break
				self.list.append((l[0], boundFunction(l[1], self.session, close=self.close), l[2], l[3] or 50))

		if config.usage.menu_sort_mode.value == "user" and self.menuID == "mainmenu":
			plugin_list = []
			id_list = []
			for l in plugins.getPlugins([PluginDescriptor.WHERE_PLUGINMENU ,PluginDescriptor.WHERE_EXTENSIONSMENU, PluginDescriptor.WHERE_EVENTINFO]):
				l.id = (l.name.lower()).replace(' ','_')
				if l.id not in id_list:
					id_list.append(l.id)
					plugin_list.append((l.name, boundFunction(l.__call__, self.session), l.id, 200))

		if self.menuID is not None and config.usage.menu_sort_mode.value == "user":
			self.sub_menu_sort = NoSave(ConfigDictionarySet())
			self.sub_menu_sort.value = config.usage.menu_sort_weight.getConfigValue(self.menuID, "submenu") or {}
			idx = 0
			for x in self.list:
				entry = list(self.list.pop(idx))
				m_weight = self.sub_menu_sort.getConfigValue(entry[2], "sort") or entry[3]
				entry.append(m_weight)
				self.list.insert(idx, tuple(entry))
				self.sub_menu_sort.changeConfigValue(entry[2], "sort", m_weight)
				idx += 1
			self.full_list = list(self.list)

		if config.usage.menu_sort_mode.value == "a_z":
			# Sort by Name
			self.list.sort(key=self.sortByName)
		elif config.usage.menu_sort_mode.value == "user":
			self.hide_show_entries()
		else:
			# Sort by Weight
			self.list.sort(key=lambda x: int(x[3]))

		if config.usage.menu_show_numbers.value:
			self.list = [(str(x[0] + 1) + " " +x[1][0], x[1][1], x[1][2]) for x in enumerate(self.list)]

		self["menu"].updateList(self.list)
Ejemplo n.º 48
0
config.plugins.merlinEpgCenter.replaceInfobarChannelUp = ConfigSelection(
    default="-1", choices=TAB_CHOICES)
config.plugins.merlinEpgCenter.replaceInfobarChannelDown = ConfigSelection(
    default="-1", choices=TAB_CHOICES)
config.plugins.merlinEpgCenter.replaceShowEventView = ConfigSelection(
    default="-1", choices=TAB_CHOICES)
config.plugins.merlinEpgCenter.epgPaths = ConfigSelection(
    default=eEnv.resolve('${datadir}/enigma2/picon_50x30/'),
    choices=[
        (eEnv.resolve('${datadir}/enigma2/picon_50x30/'),
         eEnv.resolve('${datadir}/enigma2/picon_50x30')),
        ('/media/cf/picon_50x30/', '/media/cf/picon_50x30'),
        ('/media/usb/picon_50x30/', '/media/usb/picon_50x30'),
    ])
config.plugins.merlinEpgCenter.showColoredEpgTimes = ConfigYesNo(True)
config.plugins.merlinEpgCenter.searchString = NoSave(ConfigText(default=""))
config.plugins.merlinEpgCenter.searchHistory = ConfigSet(choices=[])
config.plugins.merlinEpgCenter.showInputHelp = ConfigYesNo(True)
config.plugins.merlinEpgCenter.listItemHeight = ConfigSelectionNumber(
    min=0, max=20, stepwidth=2, default=0, wraparound=True)
config.plugins.merlinEpgCenter.listStyle = ConfigSelection(
    default=STYLE_SINGLE_LINE,
    choices=[
        (STYLE_SINGLE_LINE, _("single line style")),
        (STYLE_SHORT_DESCRIPTION, _("with short description")),
    ])
config.plugins.merlinEpgCenter.skin = ConfigText(default="")
config.plugins.merlinEpgCenter.skinSelection = NoSave(
    ConfigSelection(choices=[]))
config.plugins.merlinEpgCenter.limitSearchToBouquetServices = ConfigYesNo(
    False)
Ejemplo n.º 49
0
	def buildMy_rec(self, device):
		try:
			if device.find('1') > 0:
				device2 = device.replace('1', '')
		except:
			device2 = ''
		try:
			if device.find('2') > 0:
				device2 = device.replace('2', '')
		except:
			device2 = ''
		try:
			if device.find('3') > 0:
				device2 = device.replace('3', '')
		except:
			device2 = ''
		try:
			if device.find('4') > 0:
				device2 = device.replace('4', '')
		except:
			device2 = ''
		devicetype = path.realpath('/sys/block/' + device2 + '/device')
		d2 = device
		name = 'USB: '
		mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/Infopanel/icons/dev_usbstick.png'
		model = file('/sys/block/' + device2 + '/device/model').read()
		model = str(model).replace('\n', '')
		des = ''
		if devicetype.find('/devices/pci') != -1:
			name = _("HARD DISK: ")
			mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/Infopanel/icons/dev_hdd.png'
		name = name + model
		f = open('/proc/mounts', 'r')
		for line in f.readlines():
			if line.find(device) != -1:
				parts = line.strip().split()
				d1 = parts[1]
				dtype = parts[2]
				break
				continue
			else:
				d1 = _("None")
				dtype = _("unavailable")
		f.close()
		f = open('/proc/partitions', 'r')
		for line in f.readlines():
			if line.find(device) != -1:
				parts = line.strip().split()
				size = int(parts[2])
				if (((float(size) / 1024) / 1024) / 1024) > 1:
					des = _("Size: ") + str(round((((float(size) / 1024) / 1024) / 1024),2)) + _("TB")
				elif ((size / 1024) / 1024) > 1:
					des = _("Size: ") + str((size / 1024) / 1024) + _("GB")
				else:
					des = _("Size: ") + str(size / 1024) + _("MB")
			else:
				try:
					size = file('/sys/block/' + device2 + '/' + device + '/size').read()
					size = str(size).replace('\n', '')
					size = int(size)
				except:
					size = 0
				if ((((float(size) / 2) / 1024) / 1024) / 1024) > 1:
					des = _("Size: ") + str(round(((((float(size) / 2) / 1024) / 1024) / 1024),2)) + _("TB")
				elif (((size / 2) / 1024) / 1024) > 1:
					des = _("Size: ") + str(((size / 2) / 1024) / 1024) + _("GB")
				else:
					des = _("Size: ") + str((size / 2) / 1024) + _("MB")
		f.close()
		item = NoSave(ConfigSelection(default='/media/' + device, choices=[('/media/' + device, '/media/' + device),
		('/media/hdd', '/media/hdd'),
		('/media/hdd2', '/media/hdd2'),
		('/media/hdd3', '/media/hdd3'),
		('/media/usb', '/media/usb'),
		('/media/usb2', '/media/usb2'),
		('/media/usb3', '/media/usb3')]))
		if dtype == 'Linux':
			dtype = 'ext3'
		else:
			dtype = 'auto'
		item.value = d1.strip()
		text = name + ' ' + des + ' /dev/' + device
		res = getConfigListEntry(text, item, device, dtype)

		if des != '' and self.list.append(res):
			pass
Ejemplo n.º 50
0
class OscamServerEntryConfigScreen(Screen, ConfigListScreen):
	skin = """
		<screen flags="wfNoBorder" position="%d,0" size="440,%d" name="OscamServerEntryConfigScreen" >
			<widget render="Label" source="title" position="20,80" size="400,26" valign="center" zPosition="5" transparent="0" foregroundColor="#fcc000" font="Regular;22"/>
			<widget name="config" position="20,130" size="400,200" scrollbarMode="showOnDemand" />
			<eLabel text="" position="20,450" size="400,2" transparent="0" backgroundColor="#ffffff" />
			<ePixmap name="ButtonRed" pixmap="skin_default/buttons/red.png" position="20,460" size="140,40" zPosition="4" transparent="1" alphatest="on"/>
			<widget render="Label" source= "ButtonRedtext" position="20,460" size="140,40" valign="center" halign="center" zPosition="5" transparent="1" foregroundColor="white" font="Regular;18"/>
			<ePixmap name="ButtonGreen" pixmap="skin_default/buttons/green.png" position="160,460" size="140,40" zPosition="4" transparent="1" alphatest="on"/>
			<widget render="Label" source= "ButtonGreentext" position="160,460" size="140,40" valign="center" halign="center" zPosition="5" transparent="1" foregroundColor="white" font="Regular;18"/>
		</screen>""" % (dlg_xh(440))

	def __init__(self, session, entry, index):
		self.skin = OscamServerEntryConfigScreen.skin
		self.session = session
		Screen.__init__(self, session)

		if entry == None:
			entry = oscamServer()
		self.index = index

		# Server Adresse IP-Format oder TextFormat?
		serverIP = self.isIPaddress(entry.serverIP)
		if serverIP and config.plugins.OscamStatus.useIP.value:
			self.isIP = True
		else:
			self.isIP = False

		serverPort = int(entry.serverPort)

		self.serverNameConfigEntry = NoSave(ConfigText(default = entry.serverName, fixed_size = False, visible_width=20))
		if self.isIP:
			self.serverIPConfigEntry = NoSave(ConfigIP( default = serverIP, auto_jump=True))
		else:
			self.serverIPConfigEntry = NoSave(ConfigText(default = entry.serverIP, fixed_size = False, visible_width=20))
			self.serverIPConfigEntry.setUseableChars(u'1234567890aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ.-_')
		self.portConfigEntry       = NoSave(ConfigInteger(default = serverPort, limits=(0,65536)))
		self.usernameConfigEntry   = NoSave(ConfigText(default = entry.username, fixed_size = False, visible_width=20))
		self.passwordConfigEntry   = NoSave(ConfigPassword(default = entry.password, fixed_size = False))
		self.useSSLConfigEntry     = NoSave(ConfigYesNo(entry.useSSL))

		ConfigListScreen.__init__(self, [], session = session)
		self.createSetup()

		self["title"] = StaticText(_("Oscam Server Setup"))
		self["ButtonRedtext"] = StaticText(_("return"))
		self["ButtonGreentext"] = StaticText(_("save"))
		self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
		{
			"red": self.Close,
			"green": self.Save,
			"cancel": self.Close
		}, -1)

		self.onLayoutFinish.append(self.LayoutFinished)

	def LayoutFinished(self):
		x,h = dlg_xh(self.instance.size().width())
		self.instance.move(ePoint(x, 0))

	def createSetup(self):
		self.list = []
		self.list.append(getConfigListEntry(_("Oscam Server Name"), self.serverNameConfigEntry))
		self.list.append(getConfigListEntry(_("Oscam Server Address"), self.serverIPConfigEntry))
		self.list.append(getConfigListEntry(_("Port"), self.portConfigEntry))
		self.list.append(getConfigListEntry(_("Username (httpuser)"), self.usernameConfigEntry))
		self.list.append(getConfigListEntry(_("Password (httppwd)"), self.passwordConfigEntry))
		self.list.append(getConfigListEntry(_("use SSL"), self.useSSLConfigEntry))
		self["config"].setList(self.list)

	def isIPaddress(self, txt):
		theIP = txt.split('.')
		if len(theIP) != 4:
			return False
		serverIP = []
		for x in theIP:
			try:
				serverIP.append(int(x))
			except:
				return False
		return serverIP

	def Close(self):
		self.close()

	def Save(self):
		entry = oscamServer()
		entry.username   = self.usernameConfigEntry.value
		entry.password   = self.passwordConfigEntry.value
		entry.serverName = self.serverNameConfigEntry.value
		if self.isIP:
			entry.serverIP   = "%d.%d.%d.%d" % tuple(self.serverIPConfigEntry.value)
		else:
			entry.serverIP   = self.serverIPConfigEntry.value
		entry.serverPort = str(self.portConfigEntry.value)
		entry.useSSL     = self.useSSLConfigEntry.value
		oscamServers = readCFG()
		if self.index == -1:
			oscamServers.append(entry)
		else:
			oscamServers[self.index] = entry
		writeCFG(oscamServers)
		self.close()
Ejemplo n.º 51
0
    def createMenuList(self, showNumericHelp=False):
        self["key_blue"].text = _(
            "Edit menu") if config.usage.menu_sort_mode.value == "user" else ""
        self.list = []
        self.menuID = None
        for x in self.parentmenu:  #walk through the actual nodelist
            if not x.tag:
                continue
            if x.tag == 'item':
                item_level = int(x.get("level", 0))
                if item_level <= config.usage.setup_level.index:
                    self.addItem(self.list, x)
                    count += 1
            elif x.tag == 'menu':
                item_level = int(x.get("level", 0))
                if item_level <= config.usage.setup_level.index:
                    self.addMenu(self.list, x)
                    count += 1
            elif x.tag == "id":
                self.menuID = x.get("val")
                count = 0

            if self.menuID:
                # menuupdater?
                if menuupdater.updatedMenuAvailable(self.menuID):
                    for x in menuupdater.getUpdatedMenu(self.menuID):
                        if x[1] == count:
                            self.list.append(
                                (x[0],
                                 boundFunction(self.runScreen,
                                               (x[2], x[3] + ", ")), x[4]))
                            count += 1
        if self.menuID:
            # plugins
            for l in plugins.getPluginsForMenu(self.menuID):
                # check if a plugin overrides an existing menu
                plugin_menuid = l[2]
                for x in self.list:
                    if x[2] == plugin_menuid:
                        self.list.remove(x)
                        break
                self.list.append(
                    (l[0], boundFunction(l[1], self.session,
                                         close=self.close), l[2], l[3] or 50))

        if "user" in config.usage.menu_sort_mode.value and self.menuID == "mainmenu":
            plugin_list = []
            id_list = []
            for l in plugins.getPlugins([
                    PluginDescriptor.WHERE_PLUGINMENU,
                    PluginDescriptor.WHERE_EXTENSIONSMENU,
                    PluginDescriptor.WHERE_EVENTINFO
            ]):
                l.id = (l.name.lower()).replace(' ', '_')
                if l.id not in id_list:
                    id_list.append(l.id)
                    plugin_list.append(
                        (l.name, boundFunction(l.__call__,
                                               self.session), l.id, 200))

        if self.menuID is not None and "user" in config.usage.menu_sort_mode.value:
            self.sub_menu_sort = NoSave(ConfigDictionarySet())
            self.sub_menu_sort.value = config.usage.menu_sort_weight.getConfigValue(
                self.menuID, "submenu") or {}
            idx = 0
            for x in self.list:
                entry = list(self.list.pop(idx))
                m_weight = self.sub_menu_sort.getConfigValue(
                    entry[2], "sort") or entry[3]
                entry.append(m_weight)
                self.list.insert(idx, tuple(entry))
                self.sub_menu_sort.changeConfigValue(entry[2], "sort",
                                                     m_weight)
                idx += 1
            self.full_list = list(self.list)

        if config.usage.menu_sort_mode.value == "a_z":
            # Sort by Name
            self.list.sort(key=self.sortByName)
        elif "user" in config.usage.menu_sort_mode.value:
            self.hide_show_entries()
        else:
            # Sort by Weight
            self.list.sort(key=lambda x: int(x[3]))

        if config.usage.menu_show_numbers.value in ("menu&plugins",
                                                    "menu") or showNumericHelp:
            self.list = [(str(x[0] + 1) + " " + x[1][0], x[1][1], x[1][2])
                         for x in enumerate(self.list)]

        self["menu"].updateList(self.list)
Ejemplo n.º 52
0
 def createSetup(self):
     self.changePin = None
     self.reloadLists = None
     self.list = []
     self.list.append(
         getConfigListEntry(_("Protect services"),
                            config.ParentalControl.servicepinactive))
     if config.ParentalControl.servicepinactive.value:
         self.changePin = getConfigListEntry(_("Change PIN"),
                                             NoSave(ConfigNothing()))
         self.list.append(self.changePin)
         self.list.append(
             getConfigListEntry(_("Remember service PIN"),
                                config.ParentalControl.storeservicepin))
         if config.ParentalControl.storeservicepin.value != "never":
             self.list.append(
                 getConfigListEntry(_("Hide parental locked services"),
                                    config.ParentalControl.hideBlacklist))
         self.list.append(
             getConfigListEntry(_("Protect on epg age"),
                                config.ParentalControl.age))
         self.reloadLists = getConfigListEntry(_("Reload blacklists"),
                                               NoSave(ConfigNothing()))
         self.list.append(self.reloadLists)
     self.list.append(
         getConfigListEntry(_("Protect Screens"),
                            config.ParentalControl.setuppinactive))
     if config.ParentalControl.setuppinactive.value:
         if not self.changePin:
             self.changePin = getConfigListEntry(_("Change PIN"),
                                                 NoSave(ConfigNothing()))
             self.list.append(self.changePin)
         self.list.append(
             getConfigListEntry(
                 _("Protect main menu"),
                 config.ParentalControl.config_sections.main_menu))
         if not config.ParentalControl.config_sections.main_menu.value:
             self.list.append(
                 getConfigListEntry(
                     _("Protect timer menu"),
                     config.ParentalControl.config_sections.timer_menu))
             self.list.append(
                 getConfigListEntry(
                     _("Protect plugin browser"),
                     config.ParentalControl.config_sections.plugin_browser))
             self.list.append(
                 getConfigListEntry(
                     _("Protect configuration"),
                     config.ParentalControl.config_sections.configuration))
             self.list.append(
                 getConfigListEntry(
                     _("Protect standby menu"),
                     config.ParentalControl.config_sections.standby_menu))
         self.list.append(
             getConfigListEntry(
                 _("Protect movie list"),
                 config.ParentalControl.config_sections.movie_list))
         self.list.append(
             getConfigListEntry(
                 _("Protect context menus"),
                 config.ParentalControl.config_sections.context_menus))
         self.list.append(
             getConfigListEntry(
                 _("Protect Quickmenu"),
                 config.ParentalControl.config_sections.quickmenu))
         self.list.append(
             getConfigListEntry(
                 _("Protect InfoPanel"),
                 config.ParentalControl.config_sections.infopanel))
     self["config"].list = self.list
     self["config"].setList(self.list)