from Components.config import config
import timer
-import xml.dom.minidom
+import xml.etree.cElementTree
from enigma import eEPGCache, getBestPlayableServiceReference, \
eServiceReference, iRecordableService, quitMainloop
from time import localtime
-from Tools.XMLTools import elementsWithTag, mergeText, stringToXML
+from Tools.XMLTools import stringToXML
from ServiceReference import ServiceReference
# ok, for descriptions etc we have:
record_service = property(lambda self: self.__record_service, setRecordService)
def createTimer(xml):
- begin = int(xml.getAttribute("begin"))
- end = int(xml.getAttribute("end"))
- serviceref = ServiceReference(xml.getAttribute("serviceref").encode("utf-8"))
- description = xml.getAttribute("description").encode("utf-8")
- repeated = xml.getAttribute("repeated").encode("utf-8")
- disabled = long(xml.getAttribute("disabled") or "0")
- justplay = long(xml.getAttribute("justplay") or "0")
- afterevent = str(xml.getAttribute("afterevent") or "nothing")
+ begin = int(xml.get("begin"))
+ end = int(xml.get("end"))
+ serviceref = ServiceReference(xml.get("serviceref").encode("utf-8"))
+ description = xml.get("description").encode("utf-8")
+ repeated = xml.get("repeated").encode("utf-8")
+ disabled = long(xml.get("disabled") or "0")
+ justplay = long(xml.get("justplay") or "0")
+ afterevent = str(xml.get("afterevent") or "nothing")
afterevent = {
"nothing": AFTEREVENT.NONE,
"standby": AFTEREVENT.STANDBY,
"deepstandby": AFTEREVENT.DEEPSTANDBY,
"auto": AFTEREVENT.AUTO
}[afterevent]
- if xml.hasAttribute("eit") and xml.getAttribute("eit") != "None":
- eit = long(xml.getAttribute("eit"))
+ eit = xml.get("eit")
+ if eit and eit != "None":
+ eit = long(eit);
else:
eit = None
- if xml.hasAttribute("location") and xml.getAttribute("location") != "None":
- location = xml.getAttribute("location").encode("utf-8")
+ location = xml.get("location")
+ if location and location != "None":
+ location = location.encode("utf-8")
else:
location = None
- if xml.hasAttribute("tags") and xml.getAttribute("tags"):
- tags = xml.getAttribute("tags").encode("utf-8").split(' ')
+ tags = xml.get("tags")
+ if tags and tags != "None":
+ tags = tags.encode("utf-8").split(' ')
else:
tags = None
- name = xml.getAttribute("name").encode("utf-8")
- #filename = xml.getAttribute("filename").encode("utf-8")
+ name = xml.get("name").encode("utf-8")
+ #filename = xml.get("filename").encode("utf-8")
entry = RecordTimerEntry(serviceref, begin, end, name, description, eit, disabled, justplay, afterevent, dirname = location, tags = tags)
entry.repeated = int(repeated)
- for l in elementsWithTag(xml.childNodes, "log"):
- time = int(l.getAttribute("time"))
- code = int(l.getAttribute("code"))
- msg = mergeText(l.childNodes).strip().encode("utf-8")
+ for l in xml.findall("log"):
+ time = int(l.get("time"))
+ code = int(l.get("code"))
+ msg = l.text.strip().encode("utf-8")
entry.log_entries.append((time, code, msg))
return entry
def loadTimer(self):
# TODO: PATH!
try:
- doc = xml.dom.minidom.parse(self.Filename)
- except xml.parsers.expat.ExpatError:
+ doc = xml.etree.cElementTree.parse(self.Filename)
+ except SyntaxError:
from Tools.Notifications import AddPopup
from Screens.MessageBox import MessageBox
try:
import os
os.rename(self.Filename, self.Filename + "_old")
- except IOError:
+ except (IOError, OSError):
print "renaming broken timer failed"
return
+ except IOError:
+ print "timers.xml not found!"
+ return
- root = doc.childNodes[0]
+ root = doc.getroot()
# put out a message when at least one timer overlaps
checkit = True
- for timer in elementsWithTag(root.childNodes, "timer"):
+ for timer in root.findall("timer"):
newTimer = createTimer(timer)
if (self.record(newTimer, True, True) is not None) and (checkit == True):
from Tools.Notifications import AddPopup
checkit = False # at moment it is enough when the message is displayed one time
def saveTimer(self):
- #doc = xml.dom.minidom.Document()
- #root_element = doc.createElement('timers')
- #doc.appendChild(root_element)
- #root_element.appendChild(doc.createTextNode("\n"))
-
+ #root_element = xml.etree.cElementTree.Element('timers')
+ #root_element.text = "\n"
+
#for timer in self.timer_list + self.processed_timers:
# some timers (instant records) don't want to be saved.
# skip them
#if timer.dontSave:
#continue
- #t = doc.createTextNode("\t")
- #root_element.appendChild(t)
- #t = doc.createElement('timer')
- #t.setAttribute("begin", str(int(timer.begin)))
- #t.setAttribute("end", str(int(timer.end)))
- #t.setAttribute("serviceref", str(timer.service_ref))
- #t.setAttribute("repeated", str(timer.repeated))
- #t.setAttribute("name", timer.name)
- #t.setAttribute("description", timer.description)
- #t.setAttribute("eit", str(timer.eit))
-
+ #t = xml.etree.cElementTree.SubElement(root_element, 'timers')
+ #t.set("begin", str(int(timer.begin)))
+ #t.set("end", str(int(timer.end)))
+ #t.set("serviceref", str(timer.service_ref))
+ #t.set("repeated", str(timer.repeated))
+ #t.set("name", timer.name)
+ #t.set("description", timer.description)
+ #t.set("afterevent", str({
+ # AFTEREVENT.NONE: "nothing",
+ # AFTEREVENT.STANDBY: "standby",
+ # AFTEREVENT.DEEPSTANDBY: "deepstandby",
+ # AFTEREVENT.AUTO: "auto"}))
+ #if timer.eit is not None:
+ # t.set("eit", str(timer.eit))
+ #if timer.dirname is not None:
+ # t.set("location", str(timer.dirname))
+ #t.set("disabled", str(int(timer.disabled)))
+ #t.set("justplay", str(int(timer.justplay)))
+ #t.text = "\n"
+ #t.tail = "\n"
+
#for time, code, msg in timer.log_entries:
- #t.appendChild(doc.createTextNode("\t\t"))
- #l = doc.createElement('log')
- #l.setAttribute("time", str(time))
- #l.setAttribute("code", str(code))
- #l.appendChild(doc.createTextNode(msg))
- #t.appendChild(l)
- #t.appendChild(doc.createTextNode("\n"))
-
- #root_element.appendChild(t)
- #t = doc.createTextNode("\n")
- #root_element.appendChild(t)
-
-
- #file = open(self.Filename, "w")
- #doc.writexml(file)
- #file.write("\n")
- #file.close()
+ #l = xml.etree.cElementTree.SubElement(t, 'log')
+ #l.set("time", str(time))
+ #l.set("code", str(code))
+ #l.text = str(msg)
+ #l.tail = "\n"
+
+ #doc = xml.etree.cElementTree.ElementTree(root_element)
+ #doc.write(self.Filename)
list = []
<menu text="Standby / Restart" entryID="standby_restart_list">
<id val="shutdown" />
<!--<item text="Standby"><code>quitMainloop(0)</code></item>-->
+ <item text="Sleep Timer" entryID="sleep"><screen module="SleepTimerEdit" screen="SleepTimerEdit" /></item>
<item text="Standby" entryID="standby"><screen module="Standby" screen="Standby"/></item>
<item text="Restart" entryID="restart"><screen module="Standby" screen="TryQuitMainloop">2</screen></item>
<item level="2" text="Restart GUI" entryID="restart_enigma"><screen module="Standby" screen="TryQuitMainloop">3</screen></item>
{
snr = 0xFF - (snr & 0xFF);
if (snr != 0)
- return (int)(-100 * (log10(snr) - log10(255)));
+ return 10 * (int)(-100 * (log10(snr) - log10(255)));
return 0;
}
/* else
t = time.localtime(default)
ConfigSequence.__init__(self, seperator = ":", limits = [(0,23),(0,59)], default = [t.tm_hour, t.tm_min])
+ def increment(self):
+ # Check if Minutes maxed out
+ if self._value[1] == 59:
+ # Check if Hours not maxed out
+ if self._value[0] < 23:
+ # Increment Hour, reset Minutes to 0
+ self._value[0] += 1
+ self._value[1] = 0
+ else:
+ # Increment Minutes
+ self._value[1] += 1
+ # Trigger change
+ self.changed()
+
+ def decrement(self):
+ # Check if Minutes is minimum
+ if self._value[1] == 0:
+ # Check if Hour is greater than 0
+ if self._value[0] > 0:
+ # Decrement Hour, set Minutes to 59
+ self._value[0] -= 1
+ self._value[1] = 59
+ else:
+ # Decrement Minutes
+ self._value[1] -= 1
+ # Trigger change
+ self.changed()
+
class ConfigInteger(ConfigSequence):
def __init__(self, default, limits = (0, 9999999999)):
ConfigSequence.__init__(self, seperator = ":", limits = [limits], default = default)
def mainMenu(self):
print "loading mainmenu XML..."
- menu = mdom.childNodes[0]
- assert menu.tagName == "menu", "root element in menu must be 'menu'!"
+ menu = mdom.getroot()
+ assert menu.tag == "menu", "root element in menu must be 'menu'!"
self.session.infobar = self
# so we can access the currently active infobar from screens opened from within the mainmenu
# at the moment used from the SubserviceSelection
- self.session.openWithCallback(self.mainMenuClosed, MainMenu, menu, menu.childNodes)
+ self.session.openWithCallback(self.mainMenuClosed, MainMenu, menu)
def mainMenuClosed(self, *val):
self.session.infobar = None
from Tools.Directories import resolveFilename, SCOPE_SKIN
-import xml.dom.minidom
+import xml.etree.cElementTree
from Screens.Setup import Setup, getSetupTitle
-from Tools import XMLTools
-
# <item text="TV-Mode">self.setModeTV()</item>
# <item text="Radio-Mode">self.setModeRadio()</item>
# <item text="File-Mode">self.setModeFile()</item>
# read the menu
-menufile = file(resolveFilename(SCOPE_SKIN, 'menu.xml'), 'r')
-mdom = xml.dom.minidom.parseString(menufile.read())
-menufile.close()
+mdom = xml.etree.cElementTree.parse(resolveFilename(SCOPE_SKIN, 'menu.xml'))
class boundFunction:
def __init__(self, fnc, *args):
self.session.openWithCallback(self.menuClosed, Setup, dialog)
def addMenu(self, destList, node):
- requires = node.getAttribute("requires")
+ requires = node.get("requires")
if requires and not SystemInfo.get(requires, False):
return
- MenuTitle = _(node.getAttribute("text").encode("UTF-8") or "??")
- entryID = node.getAttribute("entryID") or "undefined"
- weight = node.getAttribute("weight") or 50
- x = node.getAttribute("flushConfigOnClose")
+ 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, node.childNodes)
+ a = boundFunction(self.session.openWithCallback, self.menuClosedWithConfigFlush, Menu, node)
else:
- a = boundFunction(self.session.openWithCallback, self.menuClosed, Menu, node, node.childNodes)
+ a = boundFunction(self.session.openWithCallback, self.menuClosed, Menu, node)
#TODO add check if !empty(node.childNodes)
destList.append((MenuTitle, a, entryID, weight))
self.close(True)
def addItem(self, destList, node):
- requires = node.getAttribute("requires")
+ requires = node.get("requires")
if requires and not SystemInfo.get(requires, False):
return
- item_text = node.getAttribute("text").encode("UTF-8")
- entryID = node.getAttribute("entryID") or "undefined"
- weight = node.getAttribute("weight") or 50
- for x in node.childNodes:
- if x.nodeType != xml.dom.minidom.Element.nodeType:
- continue
- elif x.tagName == 'screen':
- module = x.getAttribute("module") or None
- screen = x.getAttribute("screen") or None
+ 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
# check for arguments. they will be appended to the
# openDialog call
- args = XMLTools.mergeText(x.childNodes)
+ args = x.text or ""
screen += ", " + args
destList.append((_(item_text or "??"), boundFunction(self.runScreen, (module, screen)), entryID, weight))
return
- elif x.tagName == 'code':
- destList.append((_(item_text or "??"), boundFunction(self.execText, XMLTools.mergeText(x.childNodes)), entryID, weight))
+ elif x.tag == 'code':
+ destList.append((_(item_text or "??"), boundFunction(self.execText, x.text), entryID, weight))
return
- elif x.tagName == 'setup':
- id = x.getAttribute("id")
+ elif x.tag == 'setup':
+ id = x.get("id")
if item_text == "":
item_text = _(getSetupTitle(id)) + "..."
else:
destList.append((item_text, self.nothing, entryID, weight))
- def __init__(self, session, parent, childNode):
+ def __init__(self, session, parent):
Screen.__init__(self, session)
list = []
menuID = None
- for x in childNode: #walk through the actual nodelist
- if x.nodeType != xml.dom.minidom.Element.nodeType:
- continue
- elif x.tagName == 'item':
- item_level = int(x.getAttribute("level") or "0")
-
+ for x in parent: #walk through the actual nodelist
+ if x.tag == 'item':
+ item_level = int(x.get("level", 0))
if item_level <= config.usage.setup_level.index:
self.addItem(list, x)
count += 1
- elif x.tagName == 'menu':
+ elif x.tag == 'menu':
self.addMenu(list, x)
count += 1
- elif x.tagName == "id":
- menuID = x.getAttribute("val")
+ elif x.tag == "id":
+ menuID = x.get("val")
count = 0
if menuID is not None:
"9": self.keyNumberGlobal
})
- a = parent.getAttribute("title").encode("UTF-8") or None
+ a = parent.get("title", "").encode("UTF-8") or None
a = a and _(a)
if a is None:
- a = _(parent.getAttribute("text").encode("UTF-8"))
+ a = _(parent.get("text", "").encode("UTF-8"))
self["title"] = StaticText(a)
self.menu_title = a
from Components.Label import Label
from Components.Pixmap import Pixmap
-import xml.dom.minidom
-from Tools import XMLTools
+import xml.etree.cElementTree
# FIXME: use resolveFile!
# read the setupmenu
except:
# if not found in the current path, we use the global datadir-path
setupfile = file('/usr/share/enigma2/setup.xml', 'r')
-setupdom = xml.dom.minidom.parseString(setupfile.read())
+setupdom = xml.etree.cElementTree.parse(setupfile)
setupfile.close()
class SetupSummary(Screen):
self["config"].setList(list)
def refill(self, list):
- xmldata = setupdom.childNodes[0]
- entries = xmldata.childNodes
- for x in entries: #walk through the actual nodelist
- if x.nodeType != xml.dom.minidom.Element.nodeType:
+ xmldata = setupdom.getroot()
+ for x in xmldata.findall("setup"):
+ if x.get("key") != self.setup:
continue
- elif x.tagName == 'setup':
- if x.getAttribute("key") != self.setup:
- continue
- self.addItems(list, x.childNodes);
- self.setup_title = x.getAttribute("title").encode("UTF-8")
+ self.addItems(list, x);
+ self.setup_title = x.get("title", "").encode("UTF-8")
def __init__(self, session, setup):
Screen.__init__(self, session)
def createSummary(self):
return SetupSummary
- def addItems(self, list, childNode):
- for x in childNode:
- if x.nodeType != xml.dom.minidom.Element.nodeType:
- continue
- elif x.tagName == 'item':
- item_level = int(x.getAttribute("level") or "0")
+ def addItems(self, list, parentNode):
+ for x in parentNode:
+ if x.tag == 'item':
+ item_level = int(x.get("level", 0))
if not self.levelChanged in config.usage.setup_level.notifiers:
config.usage.setup_level.notifiers.append(self.levelChanged)
if item_level > config.usage.setup_level.index:
continue
- requires = x.getAttribute("requires")
+ requires = x.get("requires")
if requires and not SystemInfo.get(requires, False):
continue;
- item_text = _(x.getAttribute("text").encode("UTF-8") or "??")
- b = eval(XMLTools.mergeText(x.childNodes));
+ item_text = _(x.get("text", "??").encode("UTF-8"))
+ b = eval(x.text or "");
if b == "":
continue
#add to configlist
list.append( (item_text, item) )
def getSetupTitle(id):
- xmldata = setupdom.childNodes[0].childNodes
- for x in XMLTools.elementsWithTag(xmldata, "setup"):
- if x.getAttribute("key") == id:
- return x.getAttribute("title").encode("UTF-8")
+ xmldata = setupdom.getroot()
+ for x in xmldata.findall("setup"):
+ if x.get("key") == id:
+ return x.get("title", "").encode("UTF-8")
raise "unknown setup id '%s'!" % repr(id)
self.updateState()
def removeTimerQuestion(self):
- if not self["timerlist"].getCurrent():
+ cur = self["timerlist"].getCurrent()
+ if not cur:
return
- self.session.openWithCallback(self.removeTimer, MessageBox, _("Really delete this timer?"))
+
+ self.session.openWithCallback(self.removeTimer, MessageBox, _("Do you really want to delete %s?") % (cur.name))
def removeTimer(self, result):
if not result:
self.createConfig()
- self["actions"] = NumberActionMap(["SetupActions"],
+ self["actions"] = NumberActionMap(["SetupActions", "GlobalActions", "PiPSetupActions"],
{
"ok": self.keySelect,
"save": self.keyGo,
"cancel": self.keyCancel,
+ "volumeUp": self.incrementStart,
+ "volumeDown": self.decrementStart,
+ "size+": self.incrementEnd,
+ "size-": self.decrementEnd
}, -2)
self.list = []
self.entryDate = getConfigListEntry(_("Date"), self.timerentry_date)
if self.timerentry_type.value == "once":
self.list.append(self.entryDate)
- self.list.append(getConfigListEntry(_("StartTime"), self.timerentry_starttime))
+
+ self.entryStartTime = getConfigListEntry(_("StartTime"), self.timerentry_starttime)
+ self.list.append(self.entryStartTime)
if self.timerentry_justplay.value != "zap":
- self.list.append(getConfigListEntry(_("EndTime"), self.timerentry_endtime))
+ self.entryEndTime = getConfigListEntry(_("EndTime"), self.timerentry_endtime)
+ self.list.append(self.entryEndTime)
+ else:
+ self.entryEndTime = None
self.channelEntry = getConfigListEntry(_("Channel"), self.timerentry_service)
self.list.append(self.channelEntry)
self.saveTimer()
self.close((True, self.timer))
+ def incrementStart(self):
+ self.timerentry_starttime.increment()
+ self["config"].invalidate(self.entryStartTime)
+
+ def decrementStart(self):
+ self.timerentry_starttime.decrement()
+ self["config"].invalidate(self.entryStartTime)
+
+ def incrementEnd(self):
+ if self.entryEndTime is not None:
+ self.timerentry_endtime.increment()
+ self["config"].invalidate(self.entryEndTime)
+
+ def decrementEnd(self):
+ if self.entryEndTime is not None:
+ self.timerentry_endtime.decrement()
+ self["config"].invalidate(self.entryEndTime)
+
def subserviceSelected(self, service):
if not service is None:
self.timer.service_ref = ServiceReference(service[1])
profile("Standby,PowerKey")
import Screens.Standby
from Screens.Menu import MainMenu, mdom
-import xml.dom.minidom
from GlobalActions import globalActionMap
class PowerKey:
self.shutdown()
elif action == "show_menu":
print "Show shutdown Menu"
- menu = mdom.childNodes[0]
- for x in menu.childNodes:
- if x.nodeType != xml.dom.minidom.Element.nodeType:
- continue
- elif x.tagName == 'menu':
- for y in x.childNodes:
- if y.nodeType != xml.dom.minidom.Element.nodeType:
- continue
- elif y.tagName == 'id':
- id = y.getAttribute("val")
- if id and id == "shutdown":
- self.session.infobar = self
- menu_screen = self.session.openWithCallback(self.MenuClosed, MainMenu, x, x.childNodes)
- menu_screen.setTitle(_("Standby / Restart"))
- return
+ root = mdom.getroot()
+ for x in root.findall("menu"):
+ y = x.find("id")
+ if y is not None:
+ id = y.get("val")
+ if id and id == "shutdown":
+ self.session.infobar = self
+ menu_screen = self.session.openWithCallback(self.MenuClosed, MainMenu, x)
+ menu_screen.setTitle(_("Standby / Restart"))
+ return
def powerdown(self):
self.standbyblocked = 0
# generate a timer to test
- import xml.dom.minidom
+ import xml.etree.cElementTree
import RecordTimer
- timer = RecordTimer.createTimer(xml.dom.minidom.parseString(
+ timer = RecordTimer.createTimer(xml.etree.cElementTree.fromstring(
"""
<timer
begin="%d"
disabled="0"
justplay="0">
</timer>""" % (at + timer_start, at + timer_start + timer_length, repeat)
- ).childNodes[0])
+ ))
t.record(timer)