From 0dbb36049c5f14bbabc4596448dc148f108a2137 Mon Sep 17 00:00:00 2001 From: Andreas Monzner Date: Fri, 12 Jan 2007 01:56:51 +0000 Subject: [PATCH] get rid of unneede global keywords fix non working shutdown after timerevent when the box is in standby --- RecordTimer.py | 63 ++++++++++++++++++++++++++++++----- SleepTimer.py | 18 ++++------ lib/python/Screens/InfoBarGenerics.py | 5 +++ mytest.py | 12 +++---- 4 files changed, 71 insertions(+), 27 deletions(-) diff --git a/RecordTimer.py b/RecordTimer.py index 8689c05..2796762 100644 --- a/RecordTimer.py +++ b/RecordTimer.py @@ -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: diff --git a/SleepTimer.py b/SleepTimer.py index e53122d..891cd25 100644 --- a/SleepTimer.py +++ b/SleepTimer.py @@ -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): diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index 08ccade..31108c8 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -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: diff --git a/mytest.py b/mytest.py index 2169857..7d87a9c 100644 --- 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 -- 2.7.4