def getJsonFromConfig(cnf): if cnf.__class__.__name__ == "ConfigSelection" or cnf.__class__.__name__ == "ConfigSelectionNumber": if type(cnf.choices.choices) == dict: choices = [] for choice in cnf.choices.choices: choices.append((choice, _(cnf.choices.choices[choice]))) elif type(cnf.choices.choices[0]) == tuple: choices = [] for choice_tuple in cnf.choices.choices: choices.append((choice_tuple[0], _(choice_tuple[1]))) else: choices = [] for choice in cnf.choices.choices: choices.append((choice, _(choice))) return {"result": True, "type": "select", "choices": choices, "current": cnf.value} elif ( cnf.__class__.__name__ == "ConfigBoolean" or cnf.__class__.__name__ == "ConfigEnableDisable" or cnf.__class__.__name__ == "ConfigYesNo" ): return {"result": True, "type": "checkbox", "current": cnf.value} elif cnf.__class__.__name__ == "ConfigSet": return {"result": True, "type": "multicheckbox", "choices": cnf.choices.choices, "current": cnf.value} elif cnf.__class__.__name__ == "ConfigNumber": return {"result": True, "type": "number", "current": cnf.value} elif cnf.__class__.__name__ == "ConfigInteger": return {"result": True, "type": "number", "current": cnf.value, "limits": (cnf.limits[0][0], cnf.limits[0][1])} elif cnf.__class__.__name__ == "ConfigText": return {"result": True, "type": "text", "current": cnf.value} print "[ModernWebif] Unknown class ", cnf.__class__.__name__ return {"result": False, "type": "unknown"}
def setSleepTimer(session, time, action, enabled): if action not in ["shutdown", "standby"]: action = "standby" if hasattr(session.nav, "SleepTimer"): try: ret = getSleepTimer(session) from Screens.Standby import inStandby if inStandby is not None: ret["message"] = _("ERROR: Cannot set SleepTimer while device is in Standby-Mode") return ret if enabled == False: session.nav.SleepTimer.clear() ret = getSleepTimer(session) ret["message"] = _("Sleeptimer has been disabled") return ret config.SleepTimer.action.value = action config.SleepTimer.action.save() session.nav.SleepTimer.setSleepTime(time) ret = getSleepTimer(session) ret["message"] = _("Sleeptimer set to %d minutes") % time return ret except Exception, e: return { "result": False, "message": _("SleepTimer Error") }
def setSleepTimer(session, time, action, enabled): if action not in ["shutdown", "standby"]: action = "standby" if hasattr(session.nav, "SleepTimer"): try: ret = getSleepTimer(session) from Screens.Standby import inStandby if inStandby is not None: ret["message"] = _( "ERROR: Cannot set SleepTimer while device is in Standby-Mode" ) return ret if enabled == False: session.nav.SleepTimer.clear() ret = getSleepTimer(session) ret["message"] = _("Sleeptimer has been disabled") return ret config.SleepTimer.action.value = action config.SleepTimer.action.save() session.nav.SleepTimer.setSleepTime(time) ret = getSleepTimer(session) ret["message"] = _("Sleeptimer set to %d minutes") % time return ret except Exception, e: return {"result": False, "message": _("SleepTimer Error")}
def editTimer(session, serviceref, begin, end, name, description, disabled, justplay, afterEvent, dirname, tags, repeated, channelOld, beginOld, endOld, vpsinfo, always_zap): # TODO: exception handling channelOld_str = ':'.join(str(channelOld).split(':')[:11]) rt = session.nav.RecordTimer for timer in rt.timer_list + rt.processed_timers: needed_ref = ':'.join(timer.service_ref.ref.toString().split(':')[:11]) == channelOld_str if needed_ref and int(timer.begin) == beginOld and int(timer.end) == endOld: timer.service_ref = ServiceReference(serviceref) # TODO: start end time check timer.begin = int(float(begin)) timer.end = int(float(end)) timer.name = name timer.description = description # TODO : EIT #timer.eit = eit timer.disabled = disabled timer.justplay = justplay timer.afterEvent = afterEvent timer.dirname = dirname timer.tags = tags timer.repeated = repeated timer.processRepeated() if vpsinfo is not None: timer.vpsplugin_enabled = vpsinfo["vpsplugin_enabled"] timer.vpsplugin_overwrite = vpsinfo["vpsplugin_overwrite"] timer.vpsplugin_time = vpsinfo["vpsplugin_time"] if always_zap <> -1: if hasattr(timer,"always_zap"): timer.always_zap = always_zap == 1 # TODO: multi tuner test sanity = TimerSanityCheck(rt.timer_list, timer) conflicts = None if not sanity.check(): conflicts = sanity.getSimulTimerList() if conflicts is not None: for conflict in conflicts: if conflict.setAutoincreaseEnd(entry): rt.timeChanged(conflict) if not sanity.check(): conflicts = sanity.getSimulTimerList() if conflicts is None: rt.timeChanged(timer) return { "result": True, "message": _("Timer '%s' changed") % name } else: return { "result": False, "message": _("Timer '%s' not saved while Conflict") % name } return { "result": False, "message": _("Could not find timer '%s' with given start and end time!") % name }
def addTimer(session, serviceref, begin, end, name, description, disabled, justplay, afterevent, dirname, tags, repeated, vpsinfo=None, logentries=None, eit=0, always_zap=-1): rt = session.nav.RecordTimer print "mao1", dirname if not dirname: dirname = preferredTimerPath() print "mao2", dirname try: timer = RecordTimerEntry( ServiceReference(serviceref), begin, end, name, description, eit, disabled, justplay, afterevent, dirname=dirname, tags=tags) timer.repeated = repeated if logentries: timer.log_entries = logentries conflicts = rt.record(timer) if conflicts: errors = [] for conflict in conflicts: errors.append(conflict.name) return { "result": False, "message": _("Conflicting Timer(s) detected! %s") % " / ".join(errors) } #VPS if vpsinfo is not None: timer.vpsplugin_enabled = vpsinfo["vpsplugin_enabled"] timer.vpsplugin_overwrite = vpsinfo["vpsplugin_overwrite"] timer.vpsplugin_time = vpsinfo["vpsplugin_time"] if always_zap <> -1: if hasattr(timer,"always_zap"): timer.always_zap = always_zap == 1 except Exception, e: print e return { "result": False, "message": _("Could not add timer '%s'!") % name }
def getMessageAnswer(): global lastreply reply = lastreply if reply is None: return {"result": False, "message": _('No answer in time')} return { "result": True, "message": _('Answer is YES!') if reply else _('Answer is NO!') }
def toggleTimerStatus(session, serviceref, begin, end): serviceref = unquote(serviceref) serviceref_str = ':'.join(str(serviceref).split(':')[:11]) rt = session.nav.RecordTimer for timer in rt.timer_list + rt.processed_timers: needed_ref = ':'.join( timer.service_ref.ref.toString().split(':')[:11]) == serviceref_str if needed_ref and int(timer.begin) == begin and int(timer.end) == end: if timer.disabled: timer.enable() effect = "enabled" sanity = TimerSanityCheck(rt.timer_list, timer) if not sanity.check(): timer.disable() return { "result": False, "message": _("Timer '%s' not enabled while Conflict") % (timer.name) } elif sanity.doubleCheck(): timer.disable() return { "result": False, "message": _("Timer '%s' already exists!") % (timer.name) } else: if timer.isRunning(): return { "result": False, "message": _("The timer '%s' now recorded! Not disabled!") % (timer.name) } else: timer.disable() effect = "disabled" rt.timeChanged(timer) return { "result": True, "message": _("The timer '%s' has been %s successfully") % (timer.name, effect), "disabled": timer.disabled } return {"result": False, "message": _("No matching Timer found")}
def getSleepTimer(session): if hasattr(session.nav, "SleepTimer"): try: return { "enabled": session.nav.SleepTimer.isActive(), "minutes": session.nav.SleepTimer.getCurrentSleepTime(), "action": config.SleepTimer.action.value, "message": _("Sleeptimer is enabled") if session.nav.SleepTimer.isActive() else _("Sleeptimer is disabled") } except Exception, e: return { "result": False, "message": _("SleepTimer error") }
def getMessageAnswer(): global lastreply reply = lastreply if reply is None: return { "result": False, "message": _('No answer in time') } return { "result": True, "message": _('Answer is YES!') if reply else _('Answer is NO!') }
def testMandatoryArguments(self, request, keys): for key in keys: if key not in request.args.keys(): return { "result": False, "message": _("Missing mandatory parameter '%s'") % key } if len(request.args[key][0]) == 0: return { "result": False, "message": _("The parameter '%s' can't be empty") % key } return None
def testMandatoryArguments(self, request, keys): for key in keys: if key not in request.args.keys(): return { "result": False, "message": _("Missing mandatory parameter '%s'") % key } if len(request.args[key][0]) == 0: return { "result": False, "message": _("The parameter '%s' can't be empty") % key } return None
def addTimerByEventId(session, eventid, serviceref, justplay, dirname, tags, vpsinfo, always_zap): event = eEPGCache.getInstance().lookupEventId(eServiceReference(serviceref), eventid) if event is None: return { "result": False, "message": _("EventId not found") } (begin, end, name, description, eit) = parseEvent(event) return addTimer( session, serviceref, begin, end, name, description, False, justplay, AFTEREVENT.AUTO, dirname, tags, False, vpsinfo, None, eit, always_zap )
def getVPSChannels(session): vpsfile="/etc/enigma2/vps.xml" from Tools.Directories import fileExists if fileExists(vpsfile): try: import xml.etree.cElementTree vpsfile = file(vpsfile, 'r') vpsdom = xml.etree.cElementTree.parse(vpsfile) vpsfile.close() xmldata = vpsdom.getroot() channels = [] for ch in xmldata.findall("channel"): channels.append({ "serviceref": ch.attrib["serviceref"], "has_pdc": ch.attrib["has_pdc"], "last_check": ch.attrib["last_check"], "default_vps": ch.attrib["default_vps"] }) return { "result": True, "channels": channels } except Exception, e: return { "result": False, "message": _("Error parsing vps.xml") }
def removeTimer(session, serviceref, begin, end): serviceref_str = ':'.join(str(serviceref).split(':')[:11]) rt = session.nav.RecordTimer for timer in rt.timer_list + rt.processed_timers: needed_ref = ':'.join(timer.service_ref.ref.toString().split(':')[:11]) == serviceref_str if needed_ref and int(timer.begin) == begin and int(timer.end) == end: rt.removeEntry(timer) return { "result": True, "message": _("The timer '%s' has been deleted successfully") % timer.name } return { "result": False, "message": _("No matching Timer found") }
def removeTimer(session, serviceref, begin, end): serviceref_str = ':'.join(str(serviceref).split(':')[:11]) rt = session.nav.RecordTimer for timer in rt.timer_list + rt.processed_timers: needed_ref = ':'.join( timer.service_ref.ref.toString().split(':')[:11]) == serviceref_str if needed_ref and int(timer.begin) == begin and int(timer.end) == end: rt.removeEntry(timer) return { "result": True, "message": _("The timer '%s' has been deleted successfully") % timer.name } return {"result": False, "message": _("No matching Timer found")}
def getJsonFromConfig(cnf): if cnf.__class__.__name__ == "ConfigSelection" or cnf.__class__.__name__ == "ConfigSelectionNumber": if type(cnf.choices.choices) == dict: choices = [] for choice in cnf.choices.choices: choices.append((choice, _(cnf.choices.choices[choice]))) elif type(cnf.choices.choices[0]) == tuple: choices = [] for choice_tuple in cnf.choices.choices: choices.append((choice_tuple[0], _(choice_tuple[1]))) else: choices = [] for choice in cnf.choices.choices: choices.append((choice, _(choice))) return { "result": True, "type": "select", "choices": choices, "current": cnf.value } elif cnf.__class__.__name__ == "ConfigBoolean" or cnf.__class__.__name__ == "ConfigEnableDisable" or cnf.__class__.__name__ == "ConfigYesNo": return {"result": True, "type": "checkbox", "current": cnf.value} elif cnf.__class__.__name__ == "ConfigSet": return { "result": True, "type": "multicheckbox", "choices": cnf.choices.choices, "current": cnf.value } elif cnf.__class__.__name__ == "ConfigNumber": return {"result": True, "type": "number", "current": cnf.value} elif cnf.__class__.__name__ == "ConfigInteger": return { "result": True, "type": "number", "current": cnf.value, "limits": (cnf.limits[0][0], cnf.limits[0][1]) } elif cnf.__class__.__name__ == "ConfigText": return {"result": True, "type": "text", "current": cnf.value} print "[ModernWebif] Unknown class ", cnf.__class__.__name__ return {"result": False, "type": "unknown"}
def getSleepTimer(session): if hasattr(session.nav, "SleepTimer"): try: return { "enabled": session.nav.SleepTimer.isActive(), "minutes": session.nav.SleepTimer.getCurrentSleepTime(), "action": config.SleepTimer.action.value, "message": _("Sleeptimer is enabled") if session.nav.SleepTimer.isActive() else _("Sleeptimer is disabled") } except Exception, e: return {"result": False, "message": _("SleepTimer error")}
def getPowerTimer(session): try: from PowerTimer import TIMERTYPE ,AFTEREVENT timers = [] timer_list = session.nav.PowerTimer.timer_list processed_timers = session.nav.PowerTimer.processed_timers for timer in timer_list + processed_timers: list = [] for time, code, msg in timer.log_entries: list.append({ "code": str(code), "time": str(time), "msg": str(msg) }) timers.append({ "timertype": str(timer.timerType), "timertypename": str({ TIMERTYPE.WAKEUP: "wakeup", TIMERTYPE.WAKEUPTOSTANDBY: "wakeuptostandby", TIMERTYPE.AUTOSTANDBY: "autostandby", TIMERTYPE.AUTODEEPSTANDBY: "autodeepstandby", TIMERTYPE.STANDBY: "standby", TIMERTYPE.DEEPSTANDBY: "deepstandby", TIMERTYPE.REBOOT: "reboot", TIMERTYPE.RESTART: "restart" }[timer.timerType]), "begin": str(int(timer.begin)), "end": str(int(timer.end)), "repeated": str(int(timer.repeated)), "afterevent": str(timer.afterEvent), "aftereventname": str({ AFTEREVENT.NONE: "nothing", AFTEREVENT.WAKEUPTOSTANDBY: "wakeuptostandby", AFTEREVENT.STANDBY: "standby", AFTEREVENT.DEEPSTANDBY: "deepstandby" }[timer.afterEvent]), "disabled": str(int(timer.disabled)), "autosleepinstandbyonly": str(timer.autosleepinstandbyonly), "autosleepdelay": str(timer.autosleepdelay), "autosleeprepeat": str(timer.autosleeprepeat), "logentries" : list }) return { "result": True, "timers": timers } except Exception, e: print e return { "result": False, "message": _("PowerTimer feature not available") }
def toggleTimerStatus(session, serviceref, begin, end): serviceref = unquote(serviceref) serviceref_str = ':'.join(str(serviceref).split(':')[:11]) rt = session.nav.RecordTimer for timer in rt.timer_list + rt.processed_timers: needed_ref = ':'.join(timer.service_ref.ref.toString().split(':')[:11]) == serviceref_str if needed_ref and int(timer.begin) == begin and int(timer.end) == end: if timer.disabled: timer.enable() effect = "enabled" sanity = TimerSanityCheck(rt.timer_list, timer) if not sanity.check(): timer.disable() return { "result": False, "message": _("Timer '%s' not enabled while Conflict") % (timer.name) } elif sanity.doubleCheck(): timer.disable() return { "result": False, "message": _("Timer '%s' already exists!") % (timer.name) } else: if timer.isRunning(): return { "result": False, "message": _("The timer '%s' now recorded! Not disabled!") % (timer.name) } else: timer.disable() effect = "disabled" rt.timeChanged(timer) return { "result": True, "message": _("The timer '%s' has been %s successfully") % (timer.name, effect), "disabled": timer.disabled } return { "result": False, "message": _("No matching Timer found") }
def parseConfigFiles(self): sections = [] for setupfile in self.setupfiles: # print "[ModernWebif] loading configuration file :", setupfile setupfile = file(setupfile, 'r') setupdom = xml.etree.cElementTree.parse(setupfile) setupfile.close() xmldata = setupdom.getroot() for section in xmldata.findall("setup"): configs = [] requires = section.get("requires") if requires and not SystemInfo.get(requires, False): continue key = section.get("key") if key not in self.allowedsections: showModernWebif = section.get("showModernWebif") if showModernWebif == "1": self.allowedsections.append(key) else: continue # print "[ModernWebif] loading configuration section :", key for entry in section: if entry.tag == "item": requires = entry.get("requires") if requires and not SystemInfo.get(requires, False): continue if int(entry.get("level", 0)) > config.usage.setup_level.index: continue configs.append(entry) if len(configs): sections.append({ "key": key, "description": _(section.get("title")) }) title = _(section.get("title", "")) self.section_config[key] = (title, configs) sections = sorted(sections, key=lambda k: k['description']) self.sections = sections
def addTimerByEventId(session, eventid, serviceref, justplay, dirname, tags, vpsinfo, always_zap): event = eEPGCache.getInstance().lookupEventId( eServiceReference(serviceref), eventid) if event is None: return {"result": False, "message": _("EventId not found")} (begin, end, name, description, eit) = parseEvent(event) return addTimer(session, serviceref, begin, end, name, description, False, justplay, AFTEREVENT.AUTO, dirname, tags, False, vpsinfo, None, eit, always_zap)
def P_message(self, request): res = self.testMandatoryArguments(request, ["text", "type"]) if res: return res try: ttype = int(request.args["type"][0]) except Exception, e: return { "result": False, "message": _("type %s is not a number") % request.args["type"][0] }
def getAdapterIPv6(ifname): addr = _("IPv4-only kernel") firstpublic = None if fileExists('/proc/net/if_inet6'): addr = _("IPv4-only Python/Twisted") if has_ipv6 and version.major >= 12: proc = '/proc/net/if_inet6' tempaddrs = [] for line in file(proc).readlines(): if line.startswith('fe80'): continue tmpaddr = "" tmp = line.split() if ifname == tmp[5]: tmpaddr = ":".join( [tmp[0][i:i + 4] for i in range(0, len(tmp[0]), 4)]) if firstpublic is None and (tmpaddr.startswith('2') or tmpaddr.startswith('3')): firstpublic = normalize_ipv6(tmpaddr) if tmp[2].lower() != "ff": tmpaddr = "%s/%s" % (tmpaddr, int(tmp[2].lower(), 16)) tmpaddr = normalize_ipv6(tmpaddr) tempaddrs.append(tmpaddr) if len(tempaddrs) > 1: tempaddrs.sort() addr = ', '.join(tempaddrs) elif len(tempaddrs) == 1: addr = tempaddrs[0] elif len(tempaddrs) == 0: addr = _("none/IPv4-only network") return {'addr': addr, 'firstpublic': firstpublic}
def P_remotecontrol(self, request): res = self.testMandatoryArguments(request, ["command"]) if res: return res id = -1 try: id = int(request.args["command"][0]) except Exception, e: return { "result": False, "message": _("The parameter 'command' must be a number") }
def P_message(self, request): res = self.testMandatoryArguments(request, ["text", "type"]) if res: return res try: ttype = int(request.args["type"][0]) except Exception, e: return { "result": False, "message": _("type %s is not a number") % request.args["type"][0] }
def P_remotecontrol(self, request): res = self.testMandatoryArguments(request, ["command"]) if res: return res id = -1 try: id = int(request.args["command"][0]) except Exception, e: return { "result": False, "message": _("The parameter 'command' must be a number") }
def getAdapterIPv6(ifname): addr = _("IPv4-only kernel") firstpublic = None if fileExists("/proc/net/if_inet6"): addr = _("IPv4-only Python/Twisted") if has_ipv6 and version.major >= 12: proc = "/proc/net/if_inet6" tempaddrs = [] for line in file(proc).readlines(): if line.startswith("fe80"): continue tmpaddr = "" tmp = line.split() if ifname == tmp[5]: tmpaddr = ":".join([tmp[0][i : i + 4] for i in range(0, len(tmp[0]), 4)]) if firstpublic is None and (tmpaddr.startswith("2") or tmpaddr.startswith("3")): firstpublic = normalize_ipv6(tmpaddr) if tmp[2].lower() != "ff": tmpaddr = "%s/%s" % (tmpaddr, int(tmp[2].lower(), 16)) tmpaddr = normalize_ipv6(tmpaddr) tempaddrs.append(tmpaddr) if len(tempaddrs) > 1: tempaddrs.sort() addr = ", ".join(tempaddrs) elif len(tempaddrs) == 1: addr = tempaddrs[0] elif len(tempaddrs) == 0: addr = _("none/IPv4-only network") return {"addr": addr, "firstpublic": firstpublic}
def parseConfigFiles(self): sections = [] for setupfile in self.setupfiles: # print "[ModernWebif] loading configuration file :", setupfile setupfile = file(setupfile, "r") setupdom = xml.etree.cElementTree.parse(setupfile) setupfile.close() xmldata = setupdom.getroot() for section in xmldata.findall("setup"): configs = [] requires = section.get("requires") if requires and not SystemInfo.get(requires, False): continue key = section.get("key") if key not in self.allowedsections: showModernWebif = section.get("showModernWebif") if showModernWebif == "1": self.allowedsections.append(key) else: continue # print "[ModernWebif] loading configuration section :", key for entry in section: if entry.tag == "item": requires = entry.get("requires") if requires and not SystemInfo.get(requires, False): continue if int(entry.get("level", 0)) > config.usage.setup_level.index: continue configs.append(entry) if len(configs): sections.append({"key": key, "description": _(section.get("title"))}) title = _(section.get("title", "")) self.section_config[key] = (title, configs) sections = sorted(sections, key=lambda k: k["description"]) self.sections = sections
def sendMessage(session, message, ttype, timeout): global lastreply if ttype not in [MessageBox.TYPE_YESNO, MessageBox.TYPE_INFO, MessageBox.TYPE_WARNING, MessageBox.TYPE_ERROR]: ttype = MessageBox.TYPE_INFO if ttype == MessageBox.TYPE_YESNO: lastreply = None session.openWithCallback(messageReply, MessageBox, message, type=ttype, timeout=timeout) else: session.open(MessageBox, message, type=ttype, timeout=timeout) return { "result": True, "message": _('Message sent successfully!') }
def P_vol(self, request): if "set" not in request.args.keys() or request.args["set"][0] == "state": return getVolumeStatus() elif request.args["set"][0] == "up": return setVolumeUp() elif request.args["set"][0] == "down": return setVolumeDown() elif request.args["set"][0] == "mute": return setVolumeMute() elif request.args["set"][0][:3] == "set": try: return setVolume(int(request.args["set"][0][3:])) except Exception, e: res = getVolumeStatus() res["result"] = False res["message"] = _("Wrong parameter format 'set=%s'. Use set=set15 ") % request.args["set"][0] return rets
def getConfigs(key): configs = [] title = None if not len(configfiles.sections): configfiles.getConfigs() if key in configfiles.section_config: config_entries = configfiles.section_config[key][1] title = configfiles.section_config[key][0] if config_entries: for entry in config_entries: try: data = getJsonFromConfig(eval(entry.text or "")) text = _(entry.get("text", "")) if "limits" in data: text = "%s (%d - %d)" % (text, data["limits"][0], data["limits"][1]) configs.append({"description": text, "path": entry.text or "", "data": data}) except Exception, e: pass
def sendMessage(session, message, ttype, timeout): global lastreply if ttype not in [ MessageBox.TYPE_YESNO, MessageBox.TYPE_INFO, MessageBox.TYPE_WARNING, MessageBox.TYPE_ERROR ]: ttype = MessageBox.TYPE_INFO if ttype == MessageBox.TYPE_YESNO: lastreply = None session.openWithCallback(messageReply, MessageBox, message, type=ttype, timeout=timeout) else: session.open(MessageBox, message, type=ttype, timeout=timeout) return {"result": True, "message": _('Message sent successfully!')}
def P_vol(self, request): if "set" not in request.args.keys( ) or request.args["set"][0] == "state": return getVolumeStatus() elif request.args["set"][0] == "up": return setVolumeUp() elif request.args["set"][0] == "down": return setVolumeDown() elif request.args["set"][0] == "mute": return setVolumeMute() elif request.args["set"][0][:3] == "set": try: return setVolume(int(request.args["set"][0][3:])) except Exception, e: res = getVolumeStatus() res["result"] = False res["message"] = _( "Wrong parameter format 'set=%s'. Use set=set15 " ) % request.args["set"][0] return rets
def getVPSChannels(session): vpsfile = "/etc/enigma2/vps.xml" from Tools.Directories import fileExists if fileExists(vpsfile): try: import xml.etree.cElementTree vpsfile = file(vpsfile, 'r') vpsdom = xml.etree.cElementTree.parse(vpsfile) vpsfile.close() xmldata = vpsdom.getroot() channels = [] for ch in xmldata.findall("channel"): channels.append({ "serviceref": ch.attrib["serviceref"], "has_pdc": ch.attrib["has_pdc"], "last_check": ch.attrib["last_check"], "default_vps": ch.attrib["default_vps"] }) return {"result": True, "channels": channels} except Exception, e: return {"result": False, "message": _("Error parsing vps.xml")}
def getConfigs(key): configs = [] title = None if not len(configfiles.sections): configfiles.getConfigs() if key in configfiles.section_config: config_entries = configfiles.section_config[key][1] title = configfiles.section_config[key][0] if config_entries: for entry in config_entries: try: data = getJsonFromConfig(eval(entry.text or "")) text = _(entry.get("text", "")) if "limits" in data: text = "%s (%d - %d)" % (text, data["limits"][0], data["limits"][1]) configs.append({ "description": text, "path": entry.text or "", "data": data }) except Exception, e: pass
def cleanupTimer(session): session.nav.RecordTimer.cleanup() return { "result": True, "message": _("List of Timers has been cleaned") }
def prepareMainTemplate(self): from Components.Network import iNetwork ifaces = iNetwork.getConfiguredAdapters() if len(ifaces): ip_list = iNetwork.getAdapterAttribute(ifaces[0], "ip") # use only the first configured interface ip = "%d.%d.%d.%d" % (ip_list[0], ip_list[1], ip_list[2], ip_list[3]) ret = getCollapsedMenus() ret['remotegrabscreenshot'] = getRemoteGrabScreenshot()['remotegrabscreenshot'] ret['configsections'] = getConfigsSections()['sections'] ret['zapstream'] = getZapStream()['zapstream'] ret['showname'] = getShowName()['showname'] ret['customname'] = getCustomName()['customname'] ret['boxname'] = getBoxName()['boxname'] if not ret['boxname'] or not ret['customname']: ret['boxname'] = getInfo()['brand']+" "+getInfo()['model'] ret['box'] = getBoxType() ret["remote"] = remote from Components.config import config if hasattr(eEPGCache, 'FULL_DESCRIPTION_SEARCH'): ret['epgsearchcaps'] = True else: ret['epgsearchcaps'] = False if config.ModernWebif.webcache.epg_desc_search.value: config.ModernWebif.webcache.epg_desc_search.value = False config.ModernWebif.webcache.epg_desc_search.save() ret['epgsearchtype'] = getEPGSearchType()['epgsearchtype'] extras = [] extras.append({ 'key': 'ajax/settings','description': _("Settings")}) if fileExists(resolveFilename(SCOPE_PLUGINS, "Extensions/LCD4linux/WebSite.pyo")): lcd4linux_key = "lcd4linux/config" if fileExists(resolveFilename(SCOPE_PLUGINS, "Extensions/WebInterface/plugin.pyo")): try: lcd4linux_port = "http://" + ip + ":" + str(config.plugins.Webinterface.http.port.value) + "/" lcd4linux_key = lcd4linux_port + 'lcd4linux/config' except KeyError: lcd4linux_key = None if lcd4linux_key: extras.append({ 'key': lcd4linux_key, 'description': _("LCD4Linux Setup")}) if fileExists("/usr/keys/oscam_atv/oscam.conf"): oscam_atv_config = ConfigParser.ConfigParser() oscam_atv_config.readfp(open('/usr/keys/oscam_atv/oscam.conf')) oscam_port = oscam_atv_config.get("webif","httpport"); oscam_link = "http://" + ip + ":" + oscam_port + "/" extras.append({ 'key': oscam_link, 'description': _("OSCam Webinterface")}) try: from Plugins.Extensions.AutoTimer.AutoTimer import AutoTimer extras.append({ 'key': 'ajax/at','description': _('AutoTimer')}) except ImportError: pass if fileExists(resolveFilename(SCOPE_PLUGINS, "Extensions/ModernWebif/controllers/views/ajax/bqe.tmpl")): extras.append({ 'key': 'ajax/bqe','description': _('BouquetEditor')}) try: from Plugins.Extensions.EPGRefresh.EPGRefresh import epgrefresh extras.append({ 'key': 'ajax/epgr','description': _('EPGRefresh')}) except ImportError: pass ret['extras'] = extras return ret
def editTimer(session, serviceref, begin, end, name, description, disabled, justplay, afterEvent, dirname, tags, repeated, channelOld, beginOld, endOld, vpsinfo, always_zap): # TODO: exception handling channelOld_str = ':'.join(str(channelOld).split(':')[:11]) rt = session.nav.RecordTimer for timer in rt.timer_list + rt.processed_timers: needed_ref = ':'.join( timer.service_ref.ref.toString().split(':')[:11]) == channelOld_str if needed_ref and int(timer.begin) == beginOld and int( timer.end) == endOld: timer.service_ref = ServiceReference(serviceref) # TODO: start end time check timer.begin = int(float(begin)) timer.end = int(float(end)) timer.name = name timer.description = description # TODO : EIT #timer.eit = eit timer.disabled = disabled timer.justplay = justplay timer.afterEvent = afterEvent timer.dirname = dirname timer.tags = tags timer.repeated = repeated timer.processRepeated() if vpsinfo is not None: timer.vpsplugin_enabled = vpsinfo["vpsplugin_enabled"] timer.vpsplugin_overwrite = vpsinfo["vpsplugin_overwrite"] timer.vpsplugin_time = vpsinfo["vpsplugin_time"] if always_zap <> -1: if hasattr(timer, "always_zap"): timer.always_zap = always_zap == 1 # TODO: multi tuner test sanity = TimerSanityCheck(rt.timer_list, timer) conflicts = None if not sanity.check(): conflicts = sanity.getSimulTimerList() if conflicts is not None: for conflict in conflicts: if conflict.setAutoincreaseEnd(entry): rt.timeChanged(conflict) if not sanity.check(): conflicts = sanity.getSimulTimerList() if conflicts is None: rt.timeChanged(timer) return { "result": True, "message": _("Timer '%s' changed") % name } else: return { "result": False, "message": _("Timer '%s' not saved while Conflict") % name } return { "result": False, "message": _("Could not find timer '%s' with given start and end time!") % name }
def tvbrowser(session, request): if "name" in request.args: name = request.args['name'][0] else: name = "Unknown" if "description" in request.args: description = "".join(request.args['description'][0]) description = description.replace("\n", " ") else: description = "" disabled = False if "disabled" in request.args: if (request.args['disabled'][0] == "1"): disabled = True justplay = False if 'justplay' in request.args: if (request.args['justplay'][0] == "1"): justplay = True afterevent = 3 if 'afterevent' in request.args: if (request.args['afterevent'][0] == "0") or (request.args['afterevent'][0] == "1") or (request.args['afterevent'][0] == "2"): afterevent = int(request.args['afterevent'][0]) location = preferredTimerPath() if "dirname" in request.args: location = request.args['dirname'][0] if not location: location = "/hdd/movie/" begin = int(mktime((int(request.args['syear'][0]), int(request.args['smonth'][0]), int(request.args['sday'][0]), int(request.args['shour'][0]), int(request.args['smin'][0]), 0, 0, 0, -1))) end = int(mktime((int(request.args['syear'][0]), int(request.args['smonth'][0]), int(request.args['sday'][0]), int(request.args['ehour'][0]), int(request.args['emin'][0]), 0, 0, 0, -1))) if end < begin: end += 86400 repeated = int(request.args['repeated'][0]) if repeated == 0: for element in ("mo", "tu", "we", "th", "fr", "sa", "su", "ms", "mf"): if element in request.args: number = request.args[element][0] or 0 del request.args[element][0] repeated = repeated + int(number) if repeated > 127: repeated = 127 repeated = repeated if request.args['sRef'][0] is None: return { "result": False, "message": _("Missing requesteter: sRef") } else: takeApart = unquote(request.args['sRef'][0]).decode('utf-8', 'ignore').encode('utf-8').split('|') sRef = takeApart[1] tags = [] if 'tags' in request.args and request.args['tags'][0]: tags = unescape(request.args['tags'][0]).split(' ') if request.args['command'][0] == "add": del request.args['command'][0] return addTimer(session, sRef, begin, end, name, description, disabled, justplay, afterevent, location , tags , repeated) elif request.args['command'][0] == "del": del request.args['command'][0] return removeTimer(session, sRef, begin, end) elif request.args['command'][0] == "change": del request.args['command'][0] return editTimer(session, sRef, begin, end, name, description, disabled, justplay, afterevent, location, tags, repeated, begin, end, serviceref) else: return { "result": False, "message": _("Unknown command: '%s'") % request.args['command'][0] }
def recordNow(session, infinite): rt = session.nav.RecordTimer serviceref = session.nav.getCurrentlyPlayingServiceReference().toString() try: event = session.nav.getCurrentService().info().getEvent(0) except Exception: event = None if not event and not infinite: return { "result": False, "message": _("No event found! Not recording!") } if event: (begin, end, name, description, eit) = parseEvent(event) begin = time() msg = _("Instant record for current Event started") else: name = "instant record" description = "" eit = 0 if infinite: begin = time() end = begin + 3600 * 10 msg = _("Infinite Instant recording started") timer = RecordTimerEntry( ServiceReference(serviceref), begin, end, name, description, eit, False, False, 0, dirname=preferredInstantRecordPath() ) timer.dontSave = True if rt.record(timer): return { "result": False, "message": _("Timer conflict detected! Not recording!") } nt = { "serviceref": str(timer.service_ref), "servicename": timer.service_ref.getServiceName().replace('\xc2\x86', '').replace('\xc2\x87', ''), "eit": timer.eit, "name": timer.name, "begin": timer.begin, "end": timer.end, "duration": timer.end - timer.begin } return { "result": True, "message": msg, "newtimer": nt }
class WebController(BaseController): def __init__(self, session, path=""): BaseController.__init__(self, path) self.session = session self.putChild("stream", StreamController(session)) def prePageLoad(self, request): request.setHeader("content-type", "text/xml") def testMandatoryArguments(self, request, keys): for key in keys: if key not in request.args.keys(): return { "result": False, "message": _("Missing mandatory parameter '%s'") % key } if len(request.args[key][0]) == 0: return { "result": False, "message": _("The parameter '%s' can't be empty") % key } return None def P_about(self, request): return {"info": getInfo(), "service": getCurrentService(self.session)} def P_statusinfo(self, request): # we don't need to fill logs with this api (it's called too many times) self.suppresslog = True return getStatusInfo(self) def P_tunersignal(self, request): return getFrontendStatus(self.session) def P_vol(self, request): if "set" not in request.args.keys( ) or request.args["set"][0] == "state": return getVolumeStatus() elif request.args["set"][0] == "up": return setVolumeUp() elif request.args["set"][0] == "down": return setVolumeDown() elif request.args["set"][0] == "mute": return setVolumeMute() elif request.args["set"][0][:3] == "set": try: return setVolume(int(request.args["set"][0][3:])) except Exception, e: res = getVolumeStatus() res["result"] = False res["message"] = _( "Wrong parameter format 'set=%s'. Use set=set15 " ) % request.args["set"][0] return rets res = getVolumeStatus() res["result"] = False res["message"] = _( "Unknown Volume command %s") % request.args["set"][0] return res
timer.vpsplugin_time = vpsinfo["vpsplugin_time"] if always_zap <> -1: if hasattr(timer,"always_zap"): timer.always_zap = always_zap == 1 except Exception, e: print e return { "result": False, "message": _("Could not add timer '%s'!") % name } return { "result": True, "message": _("Timer '%s' added") % name } def addTimerByEventId(session, eventid, serviceref, justplay, dirname, tags, vpsinfo, always_zap): event = eEPGCache.getInstance().lookupEventId(eServiceReference(serviceref), eventid) if event is None: return { "result": False, "message": _("EventId not found") } (begin, end, name, description, eit) = parseEvent(event) return addTimer( session, serviceref, begin,
def cleanupTimer(session): session.nav.RecordTimer.cleanup() return {"result": True, "message": _("List of Timers has been cleaned")}
def writeTimerList(session): session.nav.RecordTimer.saveTimer() return {"result": True, "message": _("TimerList has been saved")}
def recordNow(session, infinite): rt = session.nav.RecordTimer serviceref = session.nav.getCurrentlyPlayingServiceReference().toString() try: event = session.nav.getCurrentService().info().getEvent(0) except Exception: event = None if not event and not infinite: return { "result": False, "message": _("No event found! Not recording!") } if event: (begin, end, name, description, eit) = parseEvent(event) begin = time() msg = _("Instant record for current Event started") else: name = "instant record" description = "" eit = 0 if infinite: begin = time() end = begin + 3600 * 10 msg = _("Infinite Instant recording started") timer = RecordTimerEntry(ServiceReference(serviceref), begin, end, name, description, eit, False, False, 0, dirname=preferredInstantRecordPath()) timer.dontSave = True if rt.record(timer): return { "result": False, "message": _("Timer conflict detected! Not recording!") } nt = { "serviceref": str(timer.service_ref), "servicename": timer.service_ref.getServiceName().replace('\xc2\x86', '').replace('\xc2\x87', ''), "eit": timer.eit, "name": timer.name, "begin": timer.begin, "end": timer.end, "duration": timer.end - timer.begin } return {"result": True, "message": msg, "newtimer": nt}
def tvbrowser(session, request): if "name" in request.args: name = request.args['name'][0] else: name = "Unknown" if "description" in request.args: description = "".join(request.args['description'][0]) description = description.replace("\n", " ") else: description = "" disabled = False if "disabled" in request.args: if (request.args['disabled'][0] == "1"): disabled = True justplay = False if 'justplay' in request.args: if (request.args['justplay'][0] == "1"): justplay = True afterevent = 3 if 'afterevent' in request.args: if (request.args['afterevent'][0] == "0") or (request.args['afterevent'][0] == "1") or (request.args['afterevent'][0] == "2"): afterevent = int(request.args['afterevent'][0]) location = preferredTimerPath() if "dirname" in request.args: location = request.args['dirname'][0] if not location: location = "/hdd/movie/" begin = int( mktime((int(request.args['syear'][0]), int(request.args['smonth'][0]), int(request.args['sday'][0]), int(request.args['shour'][0]), int(request.args['smin'][0]), 0, 0, 0, -1))) end = int( mktime((int(request.args['syear'][0]), int(request.args['smonth'][0]), int(request.args['sday'][0]), int(request.args['ehour'][0]), int(request.args['emin'][0]), 0, 0, 0, -1))) if end < begin: end += 86400 repeated = int(request.args['repeated'][0]) if repeated == 0: for element in ("mo", "tu", "we", "th", "fr", "sa", "su", "ms", "mf"): if element in request.args: number = request.args[element][0] or 0 del request.args[element][0] repeated = repeated + int(number) if repeated > 127: repeated = 127 repeated = repeated if request.args['sRef'][0] is None: return {"result": False, "message": _("Missing requesteter: sRef")} else: takeApart = unquote(request.args['sRef'][0]).decode( 'utf-8', 'ignore').encode('utf-8').split('|') sRef = takeApart[1] tags = [] if 'tags' in request.args and request.args['tags'][0]: tags = unescape(request.args['tags'][0]).split(' ') if request.args['command'][0] == "add": del request.args['command'][0] return addTimer(session, sRef, begin, end, name, description, disabled, justplay, afterevent, location, tags, repeated) elif request.args['command'][0] == "del": del request.args['command'][0] return removeTimer(session, sRef, begin, end) elif request.args['command'][0] == "change": del request.args['command'][0] return editTimer(session, sRef, begin, end, name, description, disabled, justplay, afterevent, location, tags, repeated, begin, end, serviceref) else: return { "result": False, "message": _("Unknown command: '%s'") % request.args['command'][0] }
def writeTimerList(session): session.nav.RecordTimer.saveTimer() return { "result": True, "message": _("TimerList has been saved") }
def getPowerTimer(session): try: from PowerTimer import TIMERTYPE, AFTEREVENT timers = [] timer_list = session.nav.PowerTimer.timer_list processed_timers = session.nav.PowerTimer.processed_timers for timer in timer_list + processed_timers: list = [] for time, code, msg in timer.log_entries: list.append({ "code": str(code), "time": str(time), "msg": str(msg) }) timers.append({ "timertype": str(timer.timerType), "timertypename": str({ TIMERTYPE.WAKEUP: "wakeup", TIMERTYPE.WAKEUPTOSTANDBY: "wakeuptostandby", TIMERTYPE.AUTOSTANDBY: "autostandby", TIMERTYPE.AUTODEEPSTANDBY: "autodeepstandby", TIMERTYPE.STANDBY: "standby", TIMERTYPE.DEEPSTANDBY: "deepstandby", TIMERTYPE.REBOOT: "reboot", TIMERTYPE.RESTART: "restart" }[timer.timerType]), "begin": str(int(timer.begin)), "end": str(int(timer.end)), "repeated": str(int(timer.repeated)), "afterevent": str(timer.afterEvent), "aftereventname": str({ AFTEREVENT.NONE: "nothing", AFTEREVENT.WAKEUPTOSTANDBY: "wakeuptostandby", AFTEREVENT.STANDBY: "standby", AFTEREVENT.DEEPSTANDBY: "deepstandby" }[timer.afterEvent]), "disabled": str(int(timer.disabled)), "autosleepinstandbyonly": str(timer.autosleepinstandbyonly), "autosleepdelay": str(timer.autosleepdelay), "autosleeprepeat": str(timer.autosleeprepeat), "logentries": list }) return {"result": True, "timers": timers} except Exception, e: print e return { "result": False, "message": _("PowerTimer feature not available") }
def addTimer(session, serviceref, begin, end, name, description, disabled, justplay, afterevent, dirname, tags, repeated, vpsinfo=None, logentries=None, eit=0, always_zap=-1): rt = session.nav.RecordTimer print "mao1", dirname if not dirname: dirname = preferredTimerPath() print "mao2", dirname try: timer = RecordTimerEntry(ServiceReference(serviceref), begin, end, name, description, eit, disabled, justplay, afterevent, dirname=dirname, tags=tags) timer.repeated = repeated if logentries: timer.log_entries = logentries conflicts = rt.record(timer) if conflicts: errors = [] for conflict in conflicts: errors.append(conflict.name) return { "result": False, "message": _("Conflicting Timer(s) detected! %s") % " / ".join(errors) } #VPS if vpsinfo is not None: timer.vpsplugin_enabled = vpsinfo["vpsplugin_enabled"] timer.vpsplugin_overwrite = vpsinfo["vpsplugin_overwrite"] timer.vpsplugin_time = vpsinfo["vpsplugin_time"] if always_zap <> -1: if hasattr(timer, "always_zap"): timer.always_zap = always_zap == 1 except Exception, e: print e return { "result": False, "message": _("Could not add timer '%s'!") % name }
timer.vpsplugin_enabled = vpsinfo["vpsplugin_enabled"] timer.vpsplugin_overwrite = vpsinfo["vpsplugin_overwrite"] timer.vpsplugin_time = vpsinfo["vpsplugin_time"] if always_zap <> -1: if hasattr(timer, "always_zap"): timer.always_zap = always_zap == 1 except Exception, e: print e return { "result": False, "message": _("Could not add timer '%s'!") % name } return {"result": True, "message": _("Timer '%s' added") % name} def addTimerByEventId(session, eventid, serviceref, justplay, dirname, tags, vpsinfo, always_zap): event = eEPGCache.getInstance().lookupEventId( eServiceReference(serviceref), eventid) if event is None: return {"result": False, "message": _("EventId not found")} (begin, end, name, description, eit) = parseEvent(event) return addTimer(session, serviceref, begin, end, name, description, False, justplay, AFTEREVENT.AUTO, dirname, tags, False, vpsinfo, None, eit, always_zap)