* cleanup imports,
authorMoritz Venn <ritzmo@users.schwerkraft.elitedvb.net>
Thu, 9 Apr 2009 22:06:58 +0000 (22:06 +0000)
committerMoritz Venn <ritzmo@users.schwerkraft.elitedvb.net>
Thu, 9 Apr 2009 22:06:58 +0000 (22:06 +0000)
 * remove some leftover code,
 * smaller speedups,
 * some formatting changes,
 * rely on base code instead of just copying it,
 * small fix for subservices,
 * not longer change local base timer if we set it to local (it will be kept without the changes though),
 * close editor when remote timer added successfully,
 * maybe some other stuff i either forgot about or am too lazy to mention (this message is way too long anyway)

remotetimer/src/__init__.py
remotetimer/src/plugin.py

index 31dc0c8..e69de29 100644 (file)
@@ -1,15 +0,0 @@
-import Plugins.Plugin\r
-from Components.config import config\r
-from Components.config import ConfigSubsection\r
-from Components.config import ConfigSelection\r
-from Components.config import ConfigInteger\r
-from Components.config import ConfigSubList\r
-from Components.config import ConfigSubDict\r
-from Components.config import ConfigText\r
-from Components.config import configfile\r
-from Components.config import ConfigYesNo\r
-from Components.config import ConfigIP\r
-\r
-config.plugins.rtc = ConfigSubsection()\r
-config.plugins.rtc.httphost = ConfigText("", False)\r
-config.plugins.rtc.httpport = ConfigInteger(80, (0,65535))\r
index dc667ee..291bf81 100644 (file)
 from Plugins.Plugin import PluginDescriptor
 from Screens.Screen import Screen
 
-from Components.ActionMap import ActionMap, NumberActionMap
-from Components.Label import Label
+from Components.ActionMap import NumberActionMap
 from Components.Button import Button
 
 from Components.ConfigList import ConfigList, ConfigListScreen
-from Components.config import getConfigListEntry, config, ConfigSubsection, ConfigSelection, ConfigText, ConfigIP, ConfigYesNo, ConfigNumber, KEY_LEFT, KEY_RIGHT, KEY_0
+from Components.config import getConfigListEntry, config, ConfigSubsection, ConfigText, ConfigIP, ConfigYesNo, ConfigNumber, KEY_LEFT, KEY_RIGHT, KEY_0
 
 from Screens.TimerEntry import TimerEntry
 from Screens.MessageBox import MessageBox
 from Screens.MovieSelection import getPreferredTagEditor
 from RecordTimer import AFTEREVENT
-from Tools.Directories import resolveFilename, SCOPE_HDD
 from enigma import eEPGCache
-from time import localtime, mktime, time, strftime
-from datetime import datetime
 
+from Tools.BoundFunction import boundFunction
+
+import time
 from twisted.web.client import getPage 
-from xml.dom.minidom import *
+from xml.dom.minidom import parseString
 
 import urllib
 #------------------------------------------------------------------------------------------
 
-my_global_session = None
-
 config.plugins.remoteTimer = ConfigSubsection()
 config.plugins.remoteTimer.httphost = ConfigText(default="" , fixed_size = False)
 config.plugins.remoteTimer.httpip = ConfigIP(default=[0, 0, 0, 0])
@@ -84,11 +81,12 @@ class RemoteTimerSetup(Screen, ConfigListScreen):
                self["key_red"] = Button(_("Cancel"))
                self["key_green"] = Button(_("OK"))
 
-               self.list = []
-               self.list.append(getConfigListEntry(_("Remote Timer - Hostname"), config.plugins.remoteTimer.httphost))
-               self.list.append(getConfigListEntry(_("Remote Timer - Netwerk-IP"), config.plugins.remoteTimer.httpip))
-               self.list.append(getConfigListEntry(_("Remote Timer - WebIf Port"), config.plugins.remoteTimer.httpport))
-               ConfigListScreen.__init__(self, self.list, session)
+               ConfigListScreen.__init__(self, [
+                       getConfigListEntry(_("Remote Timer - Hostname"), config.plugins.remoteTimer.httphost),
+                       getConfigListEntry(_("Remote Timer - Netwerk-IP"), config.plugins.remoteTimer.httpip),
+                       getConfigListEntry(_("Remote Timer - WebIf Port"), config.plugins.remoteTimer.httpport)
+               ], session)
+               
 
        def keyLeft(self):
                self["config"].handleKey(KEY_LEFT)
@@ -100,9 +98,9 @@ class RemoteTimerSetup(Screen, ConfigListScreen):
                self["config"].handleKey(KEY_0 + number)
 
        def keySave(self):
-               print "################################"
-               print config.plugins.remoteTimer.httphost.value
-               print "################################"
+               #print "################################"
+               #print config.plugins.remoteTimer.httphost.value
+               #print "################################"
                config.plugins.remoteTimer.save()
                timerInit()
                self.close()
@@ -110,199 +108,140 @@ class RemoteTimerSetup(Screen, ConfigListScreen):
        def Exit(self):
                self.close()
 
+baseTimerEntrySetup = None
+baseTimerEntryGo = None
+
 def timerInit():
-               TimerEntry.createSetup = createNewnigma2Setup
-               TimerEntry.keyGo = newnigma2KeyGo
+       global baseTimerEntrySetup, baseTimerEntryGo
+       if baseTimerEntrySetup is None:
+               baseTimerEntrySetup = TimerEntry.createSetup
+       if baseTimerEntryGo is None:
+               baseTimerEntryGo = TimerEntry.keyGo
+       TimerEntry.createSetup = createNewnigma2Setup
+       TimerEntry.keyGo = newnigma2KeyGo
 
 def createNewnigma2Setup(self, widget):
+       baseTimerEntrySetup(self, widget)
        self.timerentry_remote = ConfigYesNo()
-       self.list = []
-       self.list.append(getConfigListEntry(_("Remote Timer"), self.timerentry_remote))
-       self.list.append(getConfigListEntry(_("Name"), self.timerentry_name))
-       self.list.append(getConfigListEntry(_("Description"), self.timerentry_description))
-       self.timerJustplayEntry = getConfigListEntry(_("Timer Type"), self.timerentry_justplay)
-       self.list.append(self.timerJustplayEntry)
-       self.timerTypeEntry = getConfigListEntry(_("Repeat Type"), self.timerentry_type)
-       self.list.append(self.timerTypeEntry)
-
-       if self.timerentry_type.value == "once":
-               self.frequencyEntry = None
-       else: # repeated
-               self.frequencyEntry = getConfigListEntry(_("Repeats"), self.timerentry_repeated)
-               self.list.append(self.frequencyEntry)
-               self.repeatedbegindateEntry = getConfigListEntry(_("Starting on"), self.timerentry_repeatedbegindate)
-               self.list.append(self.repeatedbegindateEntry)
-               if self.timerentry_repeated.value == "daily":
-                       pass
-               if self.timerentry_repeated.value == "weekdays":
-                       pass
-               if self.timerentry_repeated.value == "weekly":
-                       self.list.append(getConfigListEntry(_("Weekday"), self.timerentry_weekday))
-
-               if self.timerentry_repeated.value == "user":
-                       self.list.append(getConfigListEntry(_("Monday"), self.timerentry_day[0]))
-                       self.list.append(getConfigListEntry(_("Tuesday"), self.timerentry_day[1]))
-                       self.list.append(getConfigListEntry(_("Wednesday"), self.timerentry_day[2]))
-                       self.list.append(getConfigListEntry(_("Thursday"), self.timerentry_day[3]))
-                       self.list.append(getConfigListEntry(_("Friday"), self.timerentry_day[4]))
-                       self.list.append(getConfigListEntry(_("Saturday"), self.timerentry_day[5]))
-                       self.list.append(getConfigListEntry(_("Sunday"), self.timerentry_day[6]))
-       self.entryDate = getConfigListEntry(_("Date"), self.timerentry_date)
-       if self.timerentry_type.value == "once":
-               self.list.append(self.entryDate)
-               
-       self.entryStartTime = getConfigListEntry(_("StartTime"), self.timerentry_starttime)
-       self.list.append(self.entryStartTime)
-       if self.timerentry_justplay.value != "zap":
-               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.dirname = getConfigListEntry(_("Location"), self.timerentry_dirname)
-       self.tagsSet = getConfigListEntry(_("Tags"), self.timerentry_tagsset)
-       if self.timerentry_justplay.value != "zap":
-               if config.usage.setup_level.index >= 2: # expert+
-                       self.list.append(self.dirname)
-               if getPreferredTagEditor():
-                       self.list.append(self.tagsSet)
-               self.list.append(getConfigListEntry(_("After event"), self.timerentry_afterevent))
+       self.list.insert(0, getConfigListEntry(_("Remote Timer"), self.timerentry_remote))
 
+       # force re-reading the list
        self[widget].list = self.list
-       self[widget].l.setList(self.list)
 
-def newnigma2KeyGo(self):
-               self.timer.name = self.timerentry_name.value
-               self.timer.description = self.timerentry_description.value
-               self.timer.justplay = self.timerentry_justplay.value == "zap"
-               self.timer.resetRepeated()
-               self.timer.afterEvent = {
-                       "nothing": AFTEREVENT.NONE,
-                       "deepstandby": AFTEREVENT.DEEPSTANDBY,
-                       "standby": AFTEREVENT.STANDBY,
-                       "auto": AFTEREVENT.AUTO
-                       }[self.timerentry_afterevent.value]
-               self.timer.service_ref = self.timerentry_service_ref
-               self.timer.tags = self.timerentry_tags
-
-               self.timer.dirname = self.timerentry_dirname.value
-               config.movielist.last_timer_videodir.value = self.timer.dirname
-               config.movielist.last_timer_videodir.save()
-
-               if self.timerentry_type.value == "once":
-                       self.timer.begin, self.timer.end = self.getBeginEnd()
-               if self.timerentry_type.value == "repeated":
-                       if self.timerentry_repeated.value == "daily":
-                               for x in (0, 1, 2, 3, 4, 5, 6):
-                                       self.timer.setRepeated(x)
-
-                       if self.timerentry_repeated.value == "weekly":
-                               self.timer.setRepeated(self.timerentry_weekday.index)
-
-                       if self.timerentry_repeated.value == "weekdays":
-                               for x in (0, 1, 2, 3, 4):
-                                       self.timer.setRepeated(x)
-
-                       if self.timerentry_repeated.value == "user":
-                               for x in (0, 1, 2, 3, 4, 5, 6):
-                                       if self.timerentry_day[x].value:
-                                               self.timer.setRepeated(x)
-
-                       self.timer.repeatedbegindate = self.getTimestamp(self.timerentry_repeatedbegindate.value, self.timerentry_starttime.value)
-                       if self.timer.repeated:
-                               self.timer.begin = self.getTimestamp(self.timerentry_repeatedbegindate.value, self.timerentry_starttime.value)
-                               self.timer.end = self.getTimestamp(self.timerentry_repeatedbegindate.value, self.timerentry_endtime.value)
-                       else:
-                               self.timer.begin = self.getTimestamp(time.time(), self.timerentry_starttime.value)
-                               self.timer.end = self.getTimestamp(time.time(), self.timerentry_endtime.value)
-
-                       # when a timer end is set before the start, add 1 day
-                       if self.timer.end < self.timer.begin:
-                               self.timer.end += 86400
+def newnigma2SubserviceSelected(self, service):
+       if service is not None:
+               # ouch, this hurts a little
+               service_ref = timerentry_service_ref
+               self.timerentry_service_ref = ServiceReference(service[1])
+               eit = self.timer.eit
+               self.timer.eit = None
+
+               newnigma2KeyGo(self)
+
+               self.timerentry_service_ref = service_ref
+               self.timer.eit = eit
 
+def newnigma2KeyGo(self):
+       if not self.timerentry_remote.value:
+               baseTimerEntryGo(self)
+       else:
+               service_ref = self.timerentry_service_ref
                if self.timer.eit is not None:
-                       event = eEPGCache.getInstance().lookupEventId(self.timer.service_ref.ref, self.timer.eit)
+                       event = eEPGCache.getInstance().lookupEventId(service_ref.ref, self.timer.eit)
                        if event:
                                n = event.getNumOfLinkageServices()
                                if n > 1:
                                        tlist = []
                                        ref = self.session.nav.getCurrentlyPlayingServiceReference()
-                                       parent = self.timer.service_ref.ref
+                                       parent = service_ref.ref
                                        selection = 0
                                        for x in range(n):
                                                i = event.getLinkageService(parent, x)
                                                if i.toString() == ref.toString():
                                                        selection = x
                                                tlist.append((i.getName(), i))
-                                       self.session.openWithCallback(self.subserviceSelected, ChoiceBox, title=_("Please select a subservice to record..."), list = tlist, selection = selection)
+                                       self.session.openWithCallback(boundFunction(newnigma2SubserviceSelected, self), ChoiceBox, title=_("Please select a subservice to record..."), list = tlist, selection = selection)
                                        return
                                elif n > 0:
-                                       parent = self.timer.service_ref.ref
-                                       self.timer.service_ref = ServiceReference(event.getLinkageService(parent, 0))
-
-               if self.timerentry_remote.value:
-                       self.rt_name = urllib.quote(self.timer.name.decode('utf8').encode('utf8','ignore'))
-                       self.rt_description = urllib.quote(self.timer.description.decode('utf8').encode('utf8','ignore'))
-                       self.rt_disabled = 0
-                       self.rt_repeated = 0
-                       self.rt_afterEvent = 0
-               
-                       if self.timer.justplay:
-                               self.rt_justplay = 1
-                       else:
-                               self.rt_justplay = 0
+                                       parent = service_ref.ref
+                                       service_ref = ServiceReference(event.getLinkageService(parent, 0))
+
+               # XXX: this will - without any hassle - ignore the value of repeated
+               begin, end = self.getBeginEnd()
+
+               # when a timer end is set before the start, add 1 day
+               if end < begin:
+                       end += 86400
+       
+               rt_name = urllib.quote(self.timerentry_name.value.decode('utf8').encode('utf8','ignore'))
+               rt_description = urllib.quote(self.timerentry_description.value.decode('utf8').encode('utf8','ignore'))
+               rt_disabled = 0 # XXX: do we really want to hardcode this? why do we offer this option then?
+               rt_repeated = 0 # XXX: same here
        
-                       if self.timer.afterEvent == "standby":
-                               self.rt_afterEvent = 1
-                       if self.timer.afterEvent == "deepstandby":
-                               self.rt_afterEvent = 2
-
-                       # Add Timer on RemoteBox via WebIf Command
-                       # http://192.168.178.20/web/timeradd?sRef=&begin=&end=&name=&description=&disabled=&justplay=&afterevent=&repeated=
-                       self.remoteip = "%d.%d.%d.%d" % tuple(config.plugins.remoteTimer.httpip.value)
-                       self.remoteurl = "http://%s:%s/web/timeradd?sRef=%s&begin=%s&end=%s&name=%s&description=%s&disabled=%s&justplay=%s&afterevent=%s&repeated=%s" % (
-                               self.remoteip,
-                               config.plugins.remoteTimer.httpport.value,
-                               self.timer.service_ref,
-                               self.timer.begin,
-                               self.timer.end,
-                               self.rt_name,
-                               self.rt_description,
-                               self.rt_disabled,
-                               self.rt_justplay,
-                               self.rt_afterEvent,
-                               self.rt_repeated
-                       )
-                       print "######### debug remote " + self.remoteurl
-                       global my_global_session
-                       my_global_session = self.session
-                       getPage(self.remoteurl).addCallback(_gotPageLoad).addErrback(errorLoad)
+               if self.timerentry_justplay.value == "zap":
+                       rt_justplay = 1
                else:
-                       self.saveTimer()
-                       self.close((True, self.timer))
+                       rt_justplay = 0
 
-def _gotPageLoad(html):
+               # XXX: this one is tricky since we do not know if the remote box offers afterEventAuto so lets just keep it simple for now
+               rt_afterEvent = {
+                       "deepstandby": AFTEREVENT.DEEPSTANDBY,
+                       "standby": AFTEREVENT.STANDBY,
+               }.get(self.timerentry_afterevent.value, AFTEREVENT.NONE)
+
+               # Add Timer on RemoteBox via WebIf Command
+               # http://192.168.178.20/web/timeradd?sRef=&begin=&end=&name=&description=&disabled=&justplay=&afterevent=&repeated=
+               remoteip = "%d.%d.%d.%d" % tuple(config.plugins.remoteTimer.httpip.value)
+               remoteurl = "http://%s:%s/web/timeradd?sRef=%s&begin=%s&end=%s&name=%s&description=%s&disabled=%s&justplay=%s&afterevent=%s&repeated=%s" % (
+                       remoteip,
+                       config.plugins.remoteTimer.httpport.value,
+                       service_ref,
+                       begin,
+                       end,
+                       rt_name,
+                       rt_description,
+                       rt_disabled,
+                       rt_justplay,
+                       rt_afterEvent,
+                       rt_repeated
+               )
+               print "######### debug remote", remoteurl
+               getPage(remoteurl).addCallback(boundFunction(_gotPageLoad, self.session, self)).addErrback(boundFunction(errorLoad, self.session))
+
+def _gotPageLoadCb(timerEntry, doClose, *args):
+       if doClose:
+               timerEntry.keyCancel()
+
+def _gotPageLoad(session, timerEntry, html):
        remoteresponse = parseXml( html)
-       print "_gotPageLoad remoteresponse:" + remoteresponse
-       my_global_session.open(MessageBox,("Set Timer on Remote DreamBox via WebIf:\n%s") % (remoteresponse),  MessageBox.TYPE_INFO)
-
-def errorLoad(error):
-       print "errorLoad ERROR:" + error
-       my_global_session.open(MessageBox,("ERROR - Set Timer on Remote DreamBox via WebIf:\n%s") % (error),  MessageBox.TYPE_INFO)
-
+       #print "_gotPageLoad remoteresponse:", remoteresponse
+       # XXX: should be improved...
+       doClose = remoteresponse == "Timer added successfully!"
+       session.openWithCallback(
+               boundFunction(_gotPageLoadCb, timerEntry, doClose),
+               MessageBox,
+               _("Set Timer on Remote DreamBox via WebIf:\n%s") % (remoteresponse),
+               MessageBox.TYPE_INFO
+       )
+
+def errorLoad(session, error):
+       #print "errorLoad ERROR:", error
+       session.open(
+               MessageBox,
+               _("ERROR - Set Timer on Remote DreamBox via WebIf:\n%s") % (error),
+               MessageBox.TYPE_INFO
+       )
 
 def parseXml(string):
        try:
-               dom = xml.dom.minidom.parseString(string)
+               dom = parseString(string)
                for entry in dom.firstChild.childNodes:
                        if entry.nodeName == 'e2statetext':
                                result = entry.firstChild.data.encode("utf-8")
-               #print "parseXml debug result:" + result
+               #print "parseXml debug result:", result
                return result
        except:
-               return "ERROR XML PARS"
+               return "ERROR XML PARSE"
 
 #------------------------------------------------------------------------------------------
 
@@ -313,13 +252,15 @@ def autostart(reason, **kwargs):
                        if config.plugins.remoteTimer.httpip.value:
                                timerInit()
                except:
-                       print "####### NO remoteTimer.httpip.value"
+                       #print "####### NO remoteTimer.httpip.value"
 
 def main(session, **kwargs):
-               session.open(RemoteTimerSetup)
+       session.open(RemoteTimerSetup)
 
 def Plugins(**kwargs):
-       return [PluginDescriptor(name="Remote Timer",description="Remote Timer Setup", where = [ PluginDescriptor.WHERE_PLUGINMENU ],fnc = main),
-  PluginDescriptor(name="Remote Timer", where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=main), PluginDescriptor(where = PluginDescriptor.WHERE_SESSIONSTART, fnc = autostart)]
-
+       return [
+               PluginDescriptor(name="Remote Timer",description="Remote Timer Setup", where = [ PluginDescriptor.WHERE_PLUGINMENU ], fnc = main),
+               PluginDescriptor(name="Remote Timer", where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=main),
+               PluginDescriptor(where = PluginDescriptor.WHERE_SESSIONSTART, fnc = autostart)
+       ]