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)
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)
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."))
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
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()
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
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)
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 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))
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 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))
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
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 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)
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)
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))
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))
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
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)
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",
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
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):
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
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)
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))
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)
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)
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 ))
'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")),
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())
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 ))
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 )
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 ))
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 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
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]))
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()
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)
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)
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)
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
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()
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 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)