Merge branch 'master' of fraxinas@git.opendreambox.org:/git/enigma2
authorFraxinas <andreas.frisch@multimedia-labs.de>
Wed, 3 Dec 2008 16:53:56 +0000 (17:53 +0100)
committerFraxinas <andreas.frisch@multimedia-labs.de>
Wed, 3 Dec 2008 16:53:56 +0000 (17:53 +0100)
RecordTimer.py
data/menu.xml
lib/dvb/frontend.cpp
lib/python/Components/config.py
lib/python/Screens/InfoBarGenerics.py
lib/python/Screens/Menu.py
lib/python/Screens/Setup.py
lib/python/Screens/TimerEdit.py
lib/python/Screens/TimerEntry.py
mytest.py
tests/test_timer.py

index cac475d..8449a2d 100644 (file)
@@ -4,7 +4,7 @@ from Tools import Directories, Notifications
 
 from Components.config import config
 import timer
-import xml.dom.minidom
+import xml.etree.cElementTree
 
 from enigma import eEPGCache, getBestPlayableServiceReference, \
        eServiceReference, iRecordableService, quitMainloop
@@ -17,7 +17,7 @@ import Screens.Standby
 
 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:
@@ -354,42 +354,45 @@ class RecordTimerEntry(timer.TimerEntry, object):
        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
@@ -415,8 +418,8 @@ class RecordTimer(timer.Timer):
        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
 
@@ -426,15 +429,18 @@ class RecordTimer(timer.Timer):
                        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
@@ -443,45 +449,44 @@ class RecordTimer(timer.Timer):
                                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 = []
 
index 369b20e..6bf5e3f 100644 (file)
@@ -103,6 +103,7 @@ self.session.openWithCallback(msgClosed, MessageBox, _("When you do a factory re
                <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>
index 55be6f9..b25794f 100644 (file)
@@ -857,7 +857,7 @@ int eDVBFrontend::readFrontendData(int type)
                        {
                                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
index 4d57bbb..d79337b 100755 (executable)
@@ -604,6 +604,34 @@ class ConfigClock(ConfigSequence):
                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)
index b923340..af29ed4 100644 (file)
@@ -348,14 +348,14 @@ class InfoBarMenu:
 
        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
index 92039b4..93f23df 100644 (file)
@@ -9,12 +9,10 @@ from Components.SystemInfo import SystemInfo
 
 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>
@@ -22,9 +20,7 @@ from Tools import XMLTools
 
 
 # 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):
@@ -103,17 +99,17 @@ class Menu(Screen):
                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))
 
@@ -126,18 +122,16 @@ class Menu(Screen):
                        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
@@ -150,16 +144,16 @@ class Menu(Screen):
 
                                # 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:
@@ -169,26 +163,23 @@ class Menu(Screen):
                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:
@@ -237,10 +228,10 @@ class Menu(Screen):
                                "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
 
index 3ff0b76..35918b5 100644 (file)
@@ -6,8 +6,7 @@ from Components.ConfigList import ConfigListScreen
 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
@@ -17,7 +16,7 @@ try:
 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):
@@ -63,16 +62,12 @@ class Setup(ConfigListScreen, 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)
@@ -118,12 +113,10 @@ class Setup(ConfigListScreen, Screen):
        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)
@@ -132,12 +125,12 @@ class Setup(ConfigListScreen, Screen):
                                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
@@ -148,8 +141,8 @@ class Setup(ConfigListScreen, Screen):
                                        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)
index aae345d..18ab2b7 100644 (file)
@@ -199,9 +199,11 @@ class TimerEditList(Screen):
                        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:
index be8b524..0544eff 100644 (file)
@@ -32,11 +32,15 @@ class TimerEntry(Screen, ConfigListScreen):
 
                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 = []
@@ -160,9 +164,14 @@ class TimerEntry(Screen, ConfigListScreen):
                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)
 
@@ -319,6 +328,24 @@ class TimerEntry(Screen, ConfigListScreen):
                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])
index 886efab..014f94c 100644 (file)
--- a/mytest.py
+++ b/mytest.py
@@ -321,7 +321,6 @@ class Session:
 profile("Standby,PowerKey")
 import Screens.Standby
 from Screens.Menu import MainMenu, mdom
-import xml.dom.minidom
 from GlobalActions import globalActionMap
 
 class PowerKey:
@@ -350,21 +349,16 @@ 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
index 565a838..ea8b0bd 100644 (file)
@@ -24,10 +24,10 @@ def test_timer(repeat = 0, timer_start = 3600, timer_length = 1000, sim_length =
 
 
        # 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" 
@@ -41,7 +41,7 @@ def test_timer(repeat = 0, timer_start = 3600, timer_length = 1000, sim_length =
                        disabled="0" 
                        justplay="0">
        </timer>""" % (at + timer_start, at + timer_start + timer_length, repeat)
-       ).childNodes[0])
+       ))
 
        t.record(timer)