def calculateFilename(self): service_name = self.service_ref.getServiceName() begin_date = strftime("%Y%m%d %H%M", localtime(self.begin)) begin_shortdate = strftime("%Y%m%d", localtime(self.begin)) print "begin_date: ", begin_date print "service_name: ", service_name print "name:", self.name print "description: ", self.description filename = begin_date + " - " + service_name if self.name: if config.usage.setup_level.index >= 2: # expert+ if config.recording.filename_composition.value == "short": filename = begin_shortdate + " - " + self.name elif config.recording.filename_composition.value == "long": filename += " - " + self.name + " - " + self.description else: filename += " - " + self.name # standard else: filename += " - " + self.name if config.recording.ascii_filenames.value: filename = ASCIItranslit.legacyEncode(filename) if not self.dirname or not Directories.fileExists(self.dirname, 'w'): if self.dirname: self.dirnameHadToFallback = True dirname = defaultMoviePath() else: dirname = self.dirname self.Filename = Directories.getRecordingFilename(filename, dirname) self.log(0, "Filename calculated as: '%s'" % self.Filename)
def calculateFilename(self, name=None): service_name = self.service_ref.getServiceName() begin_date = strftime("%Y%m%d %H%M", localtime(self.begin)) name = name or self.name filename = begin_date + " - " + service_name if name: if config.recording.filename_composition.value == "event": filename = name + ' - ' + begin_date + "_" + service_name elif config.recording.filename_composition.value == "short": filename = strftime("%Y%m%d", localtime(self.begin)) + " - " + name elif config.recording.filename_composition.value == "long": filename += " - " + name + " - " + self.description else: filename += " - " + name # standard if config.recording.ascii_filenames.value: filename = ASCIItranslit.legacyEncode(filename) if not self.dirname: dirname = (defaultMoviePath()) else: dirname = (self.dirname) if dirname is None: dirname = (defaultMoviePath()) self.dirnameHadToFallback = True if not dirname: return None self.Filename = Directories.getRecordingFilename(filename, dirname) self.log(0, "Filename calculated as: '%s'" % self.Filename) return self.Filename
def calculateFilename(self): service_name = self.service_ref.getServiceName() begin_date = strftime("%Y%m%d %H%M", localtime(self.begin)) # print "begin_date: ", begin_date # print "service_name: ", service_name # print "name:", self.name # print "description: ", self.description # filename = begin_date + " - " + service_name if self.name: if config.recording.filename_composition.getValue() == "short": filename = strftime("%Y%m%d", localtime(self.begin)) + " - " + self.name elif config.recording.filename_composition.getValue() == "long": filename += " - " + self.name + " - " + self.description else: filename += " - " + self.name # standard if config.recording.ascii_filenames.getValue(): filename = ASCIItranslit.legacyEncode(filename) if not self.dirname: dirname = findSafeRecordPath(defaultMoviePath()) else: dirname = findSafeRecordPath(self.dirname) if dirname is None: dirname = findSafeRecordPath(defaultMoviePath()) self.dirnameHadToFallback = True if not dirname: return None self.Filename = Directories.getRecordingFilename(filename, dirname) self.log(0, "Filename calculated as: '%s'" % self.Filename) return self.Filename
def loadTimer(self): # TODO: PATH! if not Directories.fileExists(self.Filename): return try: file = open(self.Filename, 'r') doc = xml.etree.cElementTree.parse(file) file.close() except SyntaxError: from Tools.Notifications import AddPopup from Screens.MessageBox import MessageBox AddPopup(_("The timer file (timers.xml) is corrupt and could not be loaded."), type = MessageBox.TYPE_ERROR, timeout = 0, id = "TimerLoadFailed") print "[RecordTimer] timers.xml failed to load!" try: os.rename(self.Filename, self.Filename + "_old") except (IOError, OSError): print "[RecordTimer] renaming broken timer failed" return except IOError: print "[RecordTimer] timers.xml not found!" return root = doc.getroot() # put out a message when at least one timer overlaps checkit = True for timer in root.findall("timer"): newTimer = createTimer(timer) if (self.record(newTimer, True, dosave=False) is not None) and (checkit == True): from Tools.Notifications import AddPopup from Screens.MessageBox import MessageBox AddPopup(_("Timer overlap in timers.xml detected!\nPlease recheck it!"), type = MessageBox.TYPE_ERROR, timeout = 0, id = "TimerLoadFailed") checkit = False # at moment it is enough when the message is displayed one time
def __init__(self, session, newTimer): self.xmlfile = Directories.resolveFilename( Directories.SCOPE_PLUGINS, "Extensions/AutoTimer/autotimerwizard.xml" ) WizardLanguage.__init__(self, session, showSteps=True, showStepSlider=True) AutoTimerEditorBase.__init__(self, newTimer) Rc.__init__(self) # self.skinName = ["AutoTimerWizard", "NetworkWizard"] self["wizard"] = Pixmap() self["HelpWindow"] = Pixmap() self["HelpWindow"].hide() self["VKeyIcon"] = Boolean(False) self.doCancel = False self.emptyMatch = False self.tailingWhitespacesMatch = False # We might need to change shown items, so add some notifiers self.timespan.addNotifier(self.regenTimespanList, initial_call=False) self.generateTimespanList() self.servicesDlg = self.session.instantiateDialog( AutoTimerServiceEditor, self.serviceRestriction, self.services, self.bouquets ) self.filterDlg = self.session.instantiateDialog( AutoTimerFilterEditor, self.filterSet, self.excludes, self.includes ) self["TextEntryActions"] = ActionMap( ["TextEntryActions"], {"deleteForward": self.deleteForward, "deleteBackward": self.deleteBackward}, -2 )
def calculateFilename(self): service_name = self.service_ref.getServiceName() begin_date = strftime("%Y%m%d %H%M", localtime(self.begin)) # print "begin_date: ", begin_date # print "service_name: ", service_name # print "name:", self.name # print "description: ", self.description # filename = begin_date + " - " + service_name if self.name: if config.recording.filename_composition.value == "veryveryshort": filename = self.name elif config.recording.filename_composition.value == "veryshort": filename = self.name + " - " + begin_date elif config.recording.filename_composition.value == "short": filename = strftime("%Y%m%d", localtime(self.begin)) + " - " + self.name elif config.recording.filename_composition.value == "long": filename += " - " + self.name + " - " + self.description else: filename += " - " + self.name # standard if config.recording.ascii_filenames.value: filename = ASCIItranslit.legacyEncode(filename) self.Filename = Directories.getRecordingFilename(filename, self.MountPath) if debug: self.log(0, "Filename calculated as: '%s'" % self.Filename) return self.Filename
def createDirCallback(self, res): if res: path = os.path.join(self['filelist'].current_directory, res) if not os.path.exists(path): if not Directories.createDir(path): self.session.open(MessageBox, _('Creating directory %s failed.') % path, type=MessageBox.TYPE_ERROR, timeout=5) self['filelist'].refresh() else: self.session.open(MessageBox, _('The path %s already exists.') % path, type=MessageBox.TYPE_ERROR, timeout=5)
def __init__(self): timer.Timer.__init__(self) self.Filename = Directories.resolveFilename(Directories.SCOPE_CONFIG, "pm_timers.xml") try: self.loadTimer() except IOError: print "unable to load timers from file!"
def dirAction(choice): if choice: if choice[1] == "folder": if not Directories.createDir(ret): self.session.open(MessageBox, _("Creating directory %s failed.") % (ret), type = MessageBox.TYPE_ERROR) return self.close(ret) else: self.cancel()
def __init__(self, session): self.xmlfile = Directories.resolveFilename(Directories.SCOPE_PLUGINS, "Extensions/GBIpboxClient/gbipboxwizard.xml") Wizard.__init__(self, session) self.setTitle(_('GBIpbox Client')) self.skinName = ["GBIpboxWizard", "NetworkWizard"] self["wizard"] = Pixmap() self["HelpWindow"] = Pixmap() self["HelpWindow"].hide() self["VKeyIcon"] = Boolean(False)
def removeDirCallback(self, name, res): if res: if not Directories.removeDir(name): self.session.open(MessageBox, _('Removing directory %s failed. (Maybe not empty.)') % name, type=MessageBox.TYPE_ERROR, timeout=5) else: self['filelist'].refresh() self.removeBookmark(name, True) val = self.realBookmarks and self.realBookmarks.value if val and name in val: val.remove(name) self.realBookmarks.value = val self.realBookmarks.save()
def calculateFilename(self): service_name = self.service_ref.getServiceName() begin_date = time.strftime("%Y%m%d %H%M", time.localtime(self.begin)) print "begin_date: ", begin_date print "service_name: ", service_name print "name:", self.name print "description: ", self.description filename = begin_date + " - " + service_name if self.name: filename += " - " + self.name if config.recording.ascii_filenames.value: filename = ASCIItranslit.legacyEncode(filename) if self.dirname and not Directories.fileExists(self.dirname, "w"): self.dirnameHadToFallback = True self.Filename = Directories.getRecordingFilename(filename, None) else: self.Filename = Directories.getRecordingFilename(filename, self.dirname) self.log(0, "Filename calculated as: '%s'" % self.Filename)
def __init__(self): timer.Timer.__init__(self) self.onTimerAdded = [] self.onTimerRemoved = [] self.onTimerChanged = [] self.Filename = Directories.resolveFilename(Directories.SCOPE_CONFIG, "timers.xml") try: self.loadTimer() except IOError: print "unable to load timers from file!"
def loadStaticConfig(self): """ Always try to load the static config file from /etc/enigma2/curlytx-pagefeed.xml """ staticFeedPath = Directories.resolveFilename(Directories.SCOPE_CONFIG, self.staticPageFeedFile) if not os.path.exists(staticFeedPath): return from AtomFeed import AtomFeed AtomFeed( 'file://' + staticFeedPath, self.saveStaticConfig, self.loadStaticConfigFail )
def loadTimer(self): if not Directories.fileExists(self.Filename): return try: file = open(self.Filename, 'r') doc = xml.etree.cElementTree.parse(file) file.close() except SyntaxError: from Tools.Notifications import AddPopup AddPopup(_( "The timer file (pm_timers.xml) is corrupt and could not be loaded." ), type=MessageBox.TYPE_ERROR, timeout=0, id="TimerLoadFailed") print("[PowerTimer] pm_timers.xml failed to load!") try: os.rename(self.Filename, self.Filename + "_old") except (IOError, OSError): print("[PowerTimer] renaming broken timer failed") return except IOError: print("[PowerTimer] pm_timers.xml not found!") return root = doc.getroot() checkit = True for timer in root.findall("timer"): newTimer = createTimer(timer) if (self.record(newTimer, True, dosave=False) is not None) and (checkit == True): from Tools.Notifications import AddPopup AddPopup(_( "Timer overlap in pm_timers.xml detected!\nPlease recheck it!" ), type=MessageBox.TYPE_ERROR, timeout=0, id="TimerLoadFailed") checkit = False
def __init__(self): assert not HdmiCec.instance, "only one HdmiCec instance is allowed!" HdmiCec.instance = self self.wait = eTimer() self.wait.timeout.get().append(self.sendCmd) self.repeat = eTimer() self.repeat.timeout.get().append(self.wakeupMessages) self.queue = [] eHdmiCEC.getInstance().messageReceived.get().append(self.messageReceived) config.misc.standbyCounter.addNotifier(self.onEnterStandby, initial_call = False) config.misc.DeepStandby.addNotifier(self.onEnterDeepStandby, initial_call = False) self.setFixedPhysicalAddress(config.hdmicec.fixed_physical_address.value) self.logicaladdress = eHdmiCEC.getInstance().getLogicalAddress() self.saveVolUp = None self.saveVolDown = None self.saveVolMute = None self.volumeForwardingDestination = 0 config.hdmicec.volume_forwarding.addNotifier(self.configVolumeForwarding) config.hdmicec.enabled.addNotifier(self.configVolumeForwarding) uptime = float(open("/proc/uptime", "r").read().split()[0]) if config.hdmicec.handle_deepstandby_events.value and uptime < 120: filename = Directories.resolveFilename(Directories.SCOPE_CONFIG, "timers.xml") try: doc = xml.etree.cElementTree.parse(filename) except: doc = None if doc: root = doc.getroot() for timer in root.findall("timer"): begin = int(timer.get("begin")) disabled = long(timer.get("disabled") or "0") justplay = long(timer.get("justplay") or "0") always_zap = long(timer.get("always_zap") or "0") if begin < time() or begin > time() + 360 or disabled or justplay or always_zap: continue if Standby.inStandby is None: Notifications.AddNotification(Standby.Standby) return self.onLeaveStandby()
def load_pdc(self): try: doc = xml_parse(Directories.resolveFilename(Directories.SCOPE_CONFIG, "vps.xml")) xmlroot = doc.getroot() if xmlroot is not None: for xml in xmlroot.findall("channel"): serviceref = xml.get("serviceref").encode("utf-8") has_pdc = xml.get("has_pdc") last_check = xml.get("last_check") default_vps = xml.get("default_vps") self.checked_services[serviceref] = { } self.checked_services[serviceref]["last_check"] = int(last_check) self.checked_services[serviceref]["has_pdc"] = int(has_pdc) if default_vps and default_vps != "None": self.checked_services[serviceref]["default_vps"] = int(default_vps) else: self.checked_services[serviceref]["default_vps"] = 0 except: pass
def load_pdc(self): try: doc = xml_parse(Directories.resolveFilename(Directories.SCOPE_CONFIG, "vps.xml")) xmlroot = doc.getroot() if xmlroot is not None: for xml in xmlroot.findall("channel"): serviceref = xml.get("serviceref").encode("utf-8") has_pdc = xml.get("has_pdc") last_check = xml.get("last_check") default_vps = xml.get("default_vps") self.checked_services[serviceref] = {} self.checked_services[serviceref]["last_check"] = int(last_check) self.checked_services[serviceref]["has_pdc"] = int(has_pdc) if default_vps and default_vps != "None": self.checked_services[serviceref]["default_vps"] = int(default_vps) else: self.checked_services[serviceref]["default_vps"] = 0 except: pass
def __init__(self): assert not HdmiCec.instance, "only one HdmiCec instance is allowed!" HdmiCec.instance = self self.wait = eTimer() self.wait.timeout.get().append(self.sendCmd) self.queue = [] eHdmiCEC.getInstance().messageReceived.get().append(self.messageReceived) config.misc.standbyCounter.addNotifier(self.onEnterStandby, initial_call = False) config.misc.DeepStandby.addNotifier(self.onEnterDeepStandby, initial_call = False) self.setFixedPhysicalAddress(config.hdmicec.fixed_physical_address.value) self.logicaladdress = eHdmiCEC.getInstance().getLogicalAddress() self.saveVolUp = None self.saveVolDown = None self.saveVolMute = None self.volumeForwardingDestination = 0 config.hdmicec.volume_forwarding.addNotifier(self.configVolumeForwarding) config.hdmicec.enabled.addNotifier(self.configVolumeForwarding) uptime = float(open("/proc/uptime", "r").read().split()[0]) if config.hdmicec.handle_deepstandby_events.value and uptime < 120: filename = Directories.resolveFilename(Directories.SCOPE_CONFIG, "timers.xml") try: doc = xml.etree.cElementTree.parse(filename) except: doc = None if doc: root = doc.getroot() for timer in root.findall("timer"): begin = int(timer.get("begin")) disabled = long(timer.get("disabled") or "0") justplay = long(timer.get("justplay") or "0") always_zap = long(timer.get("always_zap") or "0") if begin < time() or begin > time() + 360 or disabled or justplay or always_zap: continue if Standby.inStandby is None: Notifications.AddNotification(Standby.Standby) return self.wakeupMessages()
def save_pdc(self): list = [] list.append('<?xml version="1.0" ?>\n') list.append('<pdc_available>\n') now = time() for ch in self.checked_services: if (self.checked_services[ch]["last_check"] < (now - check_pdc_interval_available)) and self.checked_services[ch]["default_vps"] != 1: continue list.append('<channel') list.append(' serviceref="' + stringToXML(ch) + '"') list.append(' has_pdc="' + str(int(self.checked_services[ch]["has_pdc"])) + '"') list.append(' last_check="' + str(int(self.checked_services[ch]["last_check"])) + '"') list.append(' default_vps="' + str(int(self.checked_services[ch]["default_vps"])) + '"') list.append('></channel>\n') list.append('</pdc_available>\n') file = open(Directories.resolveFilename(Directories.SCOPE_CONFIG, "vps.xml"), "w") for x in list: file.write(x) file.close()
def calculateFilename(self, name=None): service_name = self.service_ref.getServiceName() begin_date = strftime("%Y%m%d %H%M", localtime(self.begin)) name = name or self.name filename = begin_date + " - " + service_name if name: if config.recording.filename_composition.value == "event": filename = name + ' - ' + begin_date + "_" + service_name elif config.recording.filename_composition.value == "short": filename = strftime("%Y%m%d", localtime(self.begin)) + " - " + name elif config.recording.filename_composition.value == "long": filename += " - " + name + " - " + self.description else: filename += " - " + name # standard if config.recording.ascii_filenames.value: filename = ASCIItranslit.legacyEncode(filename) self.Filename = Directories.getRecordingFilename(filename, self.MountPath) self.log(0, "Filename calculated as: '%s'" % self.Filename) return self.Filename
def __init__(self, session, newTimer): self.xmlfile = Directories.resolveFilename( Directories.SCOPE_PLUGINS, "Extensions/AutoTimer/autotimerwizard.xml") WizardLanguage.__init__(self, session, showSteps=True, showStepSlider=True) AutoTimerEditorBase.__init__(self, newTimer) Rc.__init__(self) self.skinName = ["AutoTimerWizard", "NetworkWizard"] self["wizard"] = Pixmap() self["HelpWindow"] = Pixmap() self["HelpWindow"].hide() self["VKeyIcon"] = Boolean(False) self.doCancel = False self.emptyMatch = False self.tailingWhitespacesMatch = False # We might need to change shown items, so add some notifiers self.timespan.addNotifier(self.regenTimespanList, initial_call=False) self.generateTimespanList() self.servicesDlg = self.session.instantiateDialog( AutoTimerServiceEditor, self.serviceRestriction, self.services, self.bouquets) self.filterDlg = self.session.instantiateDialog( AutoTimerFilterEditor, self.filterSet, self.excludes, self.includes) self["TextEntryActions"] = ActionMap( ["TextEntryActions"], { "deleteForward": self.deleteForward, "deleteBackward": self.deleteBackward }, -2)
def loadTimer(self): if not Directories.fileExists(self.Filename): return try: doc = xml.etree.cElementTree.parse(self.Filename) except SyntaxError: from Tools.Notifications import AddPopup from Screens.MessageBox import MessageBox AddPopup(_("The timer file (timers.xml) is corrupt and could not be loaded."), type = MessageBox.TYPE_ERROR, timeout = 0, id = "TimerLoadFailed") print "timers.xml failed to load!" try: import os os.rename(self.Filename, self.Filename + "_old") except (IOError, OSError): print "renaming broken timer failed" return except IOError: print "timers.xml not found!" return root = doc.getroot() checkit = False timer_text = "" for timer in root.findall("timer"): newTimer = createTimer(timer) conflict_list = self.record(newTimer, ignoreTSC=True, dosave=False, loadtimer=True) if conflict_list: checkit = True if newTimer in conflict_list: timer_text += _("\nTimer '%s' disabled!") % newTimer.name if checkit: from Tools.Notifications import AddPopup from Screens.MessageBox import MessageBox AddPopup(_("Timer overlap in timers.xml detected!\nPlease recheck it!") + timer_text, type = MessageBox.TYPE_ERROR, timeout = 0, id = "TimerLoadFailed")
def loadTimer(self): # TODO: PATH! if not Directories.fileExists(self.Filename): return try: file = open(self.Filename, 'r') doc = xml.etree.cElementTree.parse(file) file.close() except SyntaxError: from Tools.Notifications import AddPopup from Screens.MessageBox import MessageBox AddPopup(_("The timer file (pm_timers.xml) is corrupt and could not be loaded."), type = MessageBox.TYPE_ERROR, timeout = 0, id = "TimerLoadFailed") print "pm_timers.xml failed to load!" try: import os os.rename(self.Filename, self.Filename + "_old") except (IOError, OSError): print "renaming broken timer failed" return except IOError: print "pm_timers.xml not found!" return root = doc.getroot() # put out a message when at least one timer overlaps checkit = True for timer in root.findall("timer"): newTimer = createTimer(timer) if (self.record(newTimer, True, dosave=False) is not None) and (checkit == True): from Tools.Notifications import AddPopup from Screens.MessageBox import MessageBox AddPopup(_("Timer overlap in pm_timers.xml detected!\nPlease recheck it!"), type = MessageBox.TYPE_ERROR, timeout = 0, id = "TimerLoadFailed") checkit = False # at moment it is enough when the message is displayed one time
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))