get rid of unneede global keywords
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Fri, 12 Jan 2007 01:56:51 +0000 (01:56 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Fri, 12 Jan 2007 01:56:51 +0000 (01:56 +0000)
fix non working shutdown after timerevent when the box is in standby

RecordTimer.py
SleepTimer.py
lib/python/Screens/InfoBarGenerics.py
mytest.py

index 8689c05..2796762 100644 (file)
@@ -7,12 +7,15 @@ from Components.config import config, ConfigYesNo
 import timer
 import xml.dom.minidom
 
-from enigma import eEPGCache, getBestPlayableServiceReference, eServiceReference
+from enigma import eEPGCache, getBestPlayableServiceReference, \
+       eServiceReference, iRecordableService, quitMainloop
 
 from Screens.MessageBox import MessageBox
-from Screens.Standby import Standby, TryQuitMainloop, inStandby, inTryQuitMainloop
 
 import NavigationInstance
+
+import Screens.Standby
+
 from time import localtime
 
 from Tools.XMLTools import elementsWithTag, mergeText, stringToXML
@@ -48,6 +51,47 @@ class AFTEREVENT:
 
 # please do not translate log messages
 class RecordTimerEntry(timer.TimerEntry):
+######### the following static methods and members are only in use when the box is in (soft) standby
+       receiveRecordEvents = False
+
+       @staticmethod
+       def shutdown():
+               quitMainloop(1)
+
+       @staticmethod
+       def gotRecordEvent(recservice, event):
+               if event == iRecordableService.evEnd:
+                       print "RecordTimer.gotRecordEvent(iRecordableService.evEnd)"
+                       recordings = NavigationInstance.instance.getRecordings()
+                       if not len(recordings): # no more recordings exist
+                               rec_time = NavigationInstance.instance.RecordTimer.getNextRecordingTime()
+                               if rec_time > 0 and (rec_time - time.time()) < 360:
+                                       print "another recording starts in", rec_time - time.time(), "seconds... do not shutdown yet"
+                               else:
+                                       print "no starting records in the next 360 seconds... immediate shutdown"
+                                       RecordTimerEntry.shutdown() # immediate shutdown
+               elif event == iRecordableService.evStart:
+                       print "RecordTimer.gotRecordEvent(iRecordableService.evStart)"
+
+       @staticmethod
+       def stopTryQuitMainloop():
+               print "RecordTimer.stopTryQuitMainloop"
+               NavigationInstance.instance.record_event.remove(RecordTimerEntry.gotRecordEvent)
+               RecordTimerEntry.receiveRecordEvents = False
+
+       @staticmethod
+       def TryQuitMainloop():
+               if not RecordTimerEntry.receiveRecordEvents:
+                       print "RecordTimer.TryQuitMainloop"
+                       NavigationInstance.instance.record_event.append(RecordTimerEntry.gotRecordEvent)
+                       RecordTimerEntry.receiveRecordEvents = True
+                       # send fake event.. to check if another recordings are running or
+                       # other timers start in a few seconds
+                       RecordTimerEntry.gotRecordEvent(None, iRecordableService.evEnd)
+                       # send normal notification for the case the user leave the standby now..
+                       Notifications.AddNotification(Screens.Standby.TryQuitMainloop, 1, onSessionOpenCallback=RecordTimerEntry.stopTryQuitMainloop)
+#################################################################
+
        def __init__(self, serviceref, begin, end, name, description, eit, disabled = False, justplay = False, afterEvent = AFTEREVENT.NONE, checkOldTimers = False):
                timer.TimerEntry.__init__(self, int(begin), int(end))
                
@@ -213,22 +257,23 @@ class RecordTimerEntry(timer.TimerEntry):
                                NavigationInstance.instance.stopRecordService(self.record_service)
                                self.record_service = None
                        if self.afterEvent == AFTEREVENT.STANDBY:
-                               global inStandby
-                               if not inStandby:
+                               if not Screen.Standby.inStandby: # not already in standby
                                        Notifications.AddNotificationWithCallback(self.sendStandbyNotification, MessageBox, _("A finished record timer wants to set your\nDreambox to standby. Do that now?"), timeout = 20)
                        if self.afterEvent == AFTEREVENT.DEEPSTANDBY:
-                               global inTryQuitMainloop
-                               if not inTryQuitMainloop:
-                                       Notifications.AddNotificationWithCallback(self.sendTryQuitMainloopNotification, MessageBox, _("A finished record timer wants to shut down\nyour Dreambox. Shutdown now?"), timeout = 20)
+                               if not Screens.Standby.inTryQuitMainloop: # not a shutdown messagebox is open
+                                       if Screens.Standby.inStandby: # not in standby
+                                               RecordTimerEntry.TryQuitMainloop() # start shutdown handling without screen
+                                       else:
+                                               Notifications.AddNotificationWithCallback(self.sendTryQuitMainloopNotification, MessageBox, _("A finished record timer wants to shut down\nyour Dreambox. Shutdown now?"), timeout = 20)
                        return True
 
        def sendStandbyNotification(self, answer):
                if answer:
-                       Notifications.AddNotification(Standby)
+                       Notifications.AddNotification(Screens.Standby.Standby)
 
        def sendTryQuitMainloopNotification(self, answer):
                if answer:
-                       Notifications.AddNotification(TryQuitMainloop, 1)
+                       Notifications.AddNotification(Screens.Standby.TryQuitMainloop, 1)
 
        def getNextActivation(self):
                if self.state == self.StateEnded:
index e53122d..891cd25 100644 (file)
@@ -7,7 +7,7 @@ from Tools import Notifications
 from Components.config import config, ConfigYesNo, ConfigSelection, ConfigSubsection
 
 from Screens.MessageBox import MessageBox
-from Screens.Standby import Standby, TryQuitMainloop, inStandby, inTryQuitMainloop
+import Screens.Standby
 
 class SleepTimerEntry(timer.TimerEntry):
        def __init__(self, begin):
@@ -21,14 +21,12 @@ class SleepTimerEntry(timer.TimerEntry):
        def activate(self):
                if self.state == self.StateRunning:
                        if config.SleepTimer.action.value == "shutdown":
-                               global inTryQuitMainloop
-                               if config.SleepTimer.ask.value and not inTryQuitMainloop:
+                               if config.SleepTimer.ask.value and not Screens.Standby.inTryQuitMainloop:
                                        Notifications.AddNotificationWithCallback(self.shutdown, MessageBox, _("A sleep timer wants to shut down\nyour Dreambox. Shutdown now?"), timeout = 20)
                                else:
                                        self.shutdown(True)
                        elif config.SleepTimer.action.value == "standby":
-                               global inStandby
-                               if config.SleepTimer.ask.value and not inStandby:
+                               if config.SleepTimer.ask.value and not Screens.Standby.inStandby:
                                        Notifications.AddNotificationWithCallback(self.standby, MessageBox, _("A sleep timer wants to set your\nDreambox to standby. Do that now?"), timeout = 20)
                                else:
                                        self.standby(True)
@@ -39,16 +37,14 @@ class SleepTimerEntry(timer.TimerEntry):
                return False
        
        def shutdown(self, answer):
-               global inTryQuitMainloop
                if answer is not None:
-                       if answer and not inTryQuitMainloop:
-                               Notifications.AddNotification(TryQuitMainloop, 1)
+                       if answer and not Screens.Standby.inTryQuitMainloop:
+                               Notifications.AddNotification(Screens.Standby.TryQuitMainloop, 1)
 
        def standby(self, answer):
                if answer is not None:
-                       global inStandby
-                       if answer and not inStandby:
-                               Notifications.AddNotification(Standby)
+                       if answer and not Screens.Standby.inStandby:
+                               Notifications.AddNotification(Screens.Standby.Standby)
                
 class SleepTimer(timer.Timer):
        def __init__(self):
index 08ccade..31108c8 100644 (file)
@@ -1609,6 +1609,11 @@ class InfoBarNotifications:
                        
                        Notifications.notifications = Notifications.notifications[1:]
                        cb = n[0]
+
+                       if n[3].has_key("onSessionOpenCallback"):
+                               n[3]["onSessionOpenCallback"]()
+                               del n[3]["onSessionOpenCallback"]
+
                        if cb is not None:
                                dlg = self.session.openWithCallback(cb, n[1], *n[2], **n[3])
                        else:
index 2169857..7d87a9c 100644 (file)
--- a/mytest.py
+++ b/mytest.py
@@ -387,7 +387,7 @@ class VolumeControl:
                                self.muteDialog.hide()
                                self.volumeDialog.setValue(vol)
 
-from Screens.Standby import Standby, inStandby, TryQuitMainloop, inTryQuitMainloop
+import Screens.Standby
 
 class PowerKey:
        """ PowerKey stuff - handles the powerkey press and powerkey release actions"""
@@ -409,9 +409,8 @@ class PowerKey:
 
        def powertimer(self):   
                print "PowerOff - Now!"
-               global inTryQuitMainloop
-               if not inTryQuitMainloop:
-                       self.session.open(TryQuitMainloop, 1)
+               if not Screens.Standby.inTryQuitMainloop:
+                       self.session.open(Screens.Standby.TryQuitMainloop, 1)
        
        def powerdown(self):
                self.standbyblocked = 0
@@ -424,9 +423,8 @@ class PowerKey:
                        self.standby()
 
        def standby(self):
-               global inStandby
-               if not inStandby and self.session.current_dialog and self.session.current_dialog.ALLOW_SUSPEND:
-                       self.session.open(Standby)
+               if not Screens.Standby.inStandby and self.session.current_dialog and self.session.current_dialog.ALLOW_SUSPEND:
+                       self.session.open(Screens.Standby.Standby)
 
 from Screens.Scart import Scart