mytest.py: load bouquets before parental control init and remove strange hack in...
[vuplus_dvbapp] / mytest.py
index c335bf2..a3cfb5a 100755 (executable)
--- a/mytest.py
+++ b/mytest.py
@@ -30,6 +30,9 @@ from Screens.SimpleSummary import SimpleSummary
 
 from sys import stdout, exc_info
 
+profile("Bouquets")
+eDVBDB.getInstance().reloadBouquets()
+
 profile("ParentalControl")
 from Components.ParentalControl import InitParentalControl
 InitParentalControl()
@@ -41,15 +44,33 @@ profile("LOAD:skin")
 from skin import readSkin
 
 profile("LOAD:Tools")
-from Tools.Directories import InitFallbackFiles, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
-from Components.config import config, configfile, ConfigText, ConfigYesNo
+from Tools.Directories import InitFallbackFiles, resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_SKIN
+from Components.config import config, configfile, ConfigText, ConfigYesNo, ConfigInteger, NoSave
 InitFallbackFiles()
 
-profile("ReloadProfiles")
-eDVBDB.getInstance().reloadBouquets()
+profile("config.misc")
 
-config.misc.radiopic = ConfigText(default = resolveFilename(SCOPE_SKIN_IMAGE)+"radio.mvi")
+config.misc.radiopic = ConfigText(default = resolveFilename(SCOPE_CURRENT_SKIN, "radio.mvi"))
 config.misc.isNextRecordTimerAfterEventActionAuto = ConfigYesNo(default=False)
+config.misc.useTransponderTime = ConfigYesNo(default=True)
+config.misc.startCounter = ConfigInteger(default=0) # number of e2 starts...
+config.misc.standbyCounter = NoSave(ConfigInteger(default=0)) # number of standby
+
+#demo code for use of standby enter leave callbacks
+#def leaveStandby():
+#      print "!!!!!!!!!!!!!!!!!leave standby"
+
+#def standbyCountChanged(configElement):
+#      print "!!!!!!!!!!!!!!!!!enter standby num", configElement.value
+#      from Screens.Standby import inStandby
+#      inStandby.onClose.append(leaveStandby)
+
+#config.misc.standbyCounter.addNotifier(standbyCountChanged, initial_call = False)
+####################################################
+
+def useTransponderTimeChanged(configElement):
+       enigma.eDVBLocalTimeHandler.getInstance().setUseDVBTime(configElement.value)
+config.misc.useTransponderTime.addNotifier(useTransponderTimeChanged)
 
 profile("Twisted")
 try:
@@ -256,7 +277,7 @@ class Session:
                        self.execEnd(last=False)
 
        def popCurrent(self):
-               if len(self.dialog_stack):
+               if self.dialog_stack:
                        (self.current_dialog, do_show) = self.dialog_stack.pop()
                        self.execBegin(first=False, do_show=do_show)
                else:
@@ -275,7 +296,7 @@ class Session:
                return dlg
 
        def open(self, screen, *arguments, **kwargs):
-               if len(self.dialog_stack) and not self.in_exec:
+               if self.dialog_stack and not self.in_exec:
                        raise RuntimeError("modal open are allowed only from a screen which is modal!")
                        # ...unless it's the very first screen.
 
@@ -344,9 +365,10 @@ class PowerKey:
        def powerlong(self):
                if Screens.Standby.inTryQuitMainloop or (self.session.current_dialog and not self.session.current_dialog.ALLOW_SUSPEND):
                        return
+               self.doAction(action = config.usage.on_long_powerpress.value)
 
+       def doAction(self, action):
                self.standbyblocked = 1
-               action = config.usage.on_long_powerpress.value
                if action == "shutdown":
                        self.shutdown()
                elif action == "show_menu":
@@ -361,17 +383,18 @@ class PowerKey:
                                                menu_screen = self.session.openWithCallback(self.MenuClosed, MainMenu, x)
                                                menu_screen.setTitle(_("Standby / Restart"))
                                                return
+               elif action == "standby":
+                       self.standby()
 
        def powerdown(self):
                self.standbyblocked = 0
 
        def powerup(self):
                if self.standbyblocked == 0:
-                       self.standbyblocked = 1
-                       self.standby()
+                       self.doAction(action = config.usage.on_short_powerpress.value)
 
        def standby(self):
-               if not Screens.Standby.inStandby and self.session.current_dialog and self.session.current_dialog.ALLOW_SUSPEND:
+               if not Screens.Standby.inStandby and self.session.current_dialog and self.session.current_dialog.ALLOW_SUSPEND and self.session.in_exec:
                        self.session.open(Screens.Standby.Standby)
 
 profile("Scart")
@@ -408,6 +431,8 @@ profile("Load:VolumeControl")
 from Components.VolumeControl import VolumeControl
 
 def runScreenTest():
+       config.misc.startCounter.value += 1
+
        profile("readPluginList")
        plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
 
@@ -417,10 +442,7 @@ def runScreenTest():
 
        CiHandler.setSession(session)
 
-       screensToRun = [ ]
-
-       for p in plugins.getPlugins(PluginDescriptor.WHERE_WIZARD):
-               screensToRun.append(p.__call__)
+       screensToRun = [ p.__call__ for p in plugins.getPlugins(PluginDescriptor.WHERE_WIZARD) ]
 
        profile("wizards")
        screensToRun += wizardManager.getWizards()
@@ -443,11 +465,12 @@ def runScreenTest():
                        return
 
                screen = screensToRun[0][1]
+               args = screensToRun[0][2:]
 
-               if len(screensToRun):
-                       session.openWithCallback(boundFunction(runNextScreen, session, screensToRun[1:]), screen)
+               if screensToRun:
+                       session.openWithCallback(boundFunction(runNextScreen, session, screensToRun[1:]), screen, *args)
                else:
-                       session.open(screen)
+                       session.open(screen, *args)
 
        runNextScreen(session, screensToRun)
 
@@ -463,9 +486,11 @@ def runScreenTest():
        profile_final()
        runReactor()
 
+       config.misc.startCounter.save()
+
        profile("wakeup")
-       from time import time
-       from Tools.DreamboxHardware import setFPWakeuptime, getFPWakeuptime
+       from time import time, strftime, localtime
+       from Tools.DreamboxHardware import setFPWakeuptime, getFPWakeuptime, setRTCtime
        #get currentTime
        nowTime = time()
        wakeupList = [
@@ -476,12 +501,17 @@ def runScreenTest():
        ]
        wakeupList.sort()
        recordTimerWakeupAuto = False
-       if len(wakeupList):
-               startTime = wakeupList.pop(0)
-               if (startTime[0] - nowTime) < 330: # no time to switch box back on
+       if wakeupList:
+               from time import strftime
+               startTime = wakeupList[0]
+               if (startTime[0] - nowTime) < 270: # no time to switch box back on
                        wptime = nowTime + 30  # so switch back on in 30 seconds
                else:
-                       wptime = startTime[0] - 300
+                       wptime = startTime[0] - 240
+               if not config.misc.useTransponderTime.value:
+                       print "dvb time sync disabled... so set RTC now to current linux time!", strftime("%Y/%m/%d %H:%M", localtime(nowTime))
+                       setRTCtime(nowTime)
+               print "set wakeup time to", strftime("%Y/%m/%d %H:%M", localtime(wptime))
                setFPWakeuptime(wptime)
                recordTimerWakeupAuto = startTime[1] == 0 and startTime[2]
        config.misc.isNextRecordTimerAfterEventActionAuto.value = recordTimerWakeupAuto