X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/fcea714ed304234bdb7e05e40c3e3d7109fbd1f1..0cf3bc28d59e7bfb8519839a8e9c36a87ea382c8:/lib/python/Screens/Standby.py diff --git a/lib/python/Screens/Standby.py b/lib/python/Screens/Standby.py index 06c44703..c598b545 100644 --- a/lib/python/Screens/Standby.py +++ b/lib/python/Screens/Standby.py @@ -2,9 +2,10 @@ from Screen import Screen from Components.ActionMap import ActionMap from Components.config import config from Components.AVSwitch import AVSwitch -from enigma import eDVBVolumecontrol, eDBoxLCD, eServiceReference -from Components.Sources.Clock import Clock +from Components.SystemInfo import SystemInfo +from enigma import eDVBVolumecontrol +inStandby = None class Standby(Screen): def Power(self): @@ -12,14 +13,12 @@ class Standby(Screen): #set input to encoder self.avswitch.setInput("ENCODER") #restart last played service - if self.prev_running_service: - self.session.nav.playService(self.prev_running_service) #unmute adc self.leaveMute() #set brightness of lcd - eDBoxLCD.getInstance().setLCDBrightness(config.lcd.bright.value * 20) + config.lcd.bright.apply() #kill me - self.close() + self.close(True) def setMute(self): if (eDVBVolumecontrol.getInstance().isMuted()): @@ -33,9 +32,8 @@ class Standby(Screen): if self.wasMuted == 0: eDVBVolumecontrol.getInstance().volumeToggleMute() - def __init__(self, session, infobar): + def __init__(self, session): Screen.__init__(self, session) - self.infobar = infobar self.avswitch = AVSwitch() print "enter standby" @@ -47,14 +45,43 @@ class Standby(Screen): #mute adc self.setMute() - #get currently playing service reference - self.prev_running_service = self.session.nav.getCurrentlyPlayingServiceReference() - #stop actual played dvb-service - self.session.nav.stopService() + + self.paused_service = None + self.prev_running_service = None + if self.session.current_dialog: + if self.session.current_dialog.ALLOW_SUSPEND == Screen.SUSPEND_STOPS: + #get currently playing service reference + self.prev_running_service = self.session.nav.getCurrentlyPlayingServiceReference() + #stop actual played dvb-service + self.session.nav.stopService() + elif self.session.current_dialog.ALLOW_SUSPEND == Screen.SUSPEND_PAUSES: + self.paused_service = self.session.current_dialog + self.paused_service.pauseService() + #set input to vcr scart - self.avswitch.setInput("SCART") + if SystemInfo["ScartSwitch"]: + self.avswitch.setInput("SCART") + else: + self.avswitch.setInput("AUX") #set lcd brightness to standby value - eDBoxLCD.getInstance().setLCDBrightness(config.lcd.standby.value * 20) + config.lcd.standby.apply() + self.onFirstExecBegin.append(self.__onFirstExecBegin) + self.onClose.append(self.__onClose) + + def __onClose(self): + global inStandby + inStandby = None + if self.prev_running_service: + self.session.nav.playService(self.prev_running_service) + elif self.paused_service: + self.paused_service.unPauseService() + self.session.screen["Standby"].boolean = False + + def __onFirstExecBegin(self): + global inStandby + inStandby = self + self.session.screen["Standby"].boolean = True + config.misc.standbyCounter.value += 1 def createSummary(self): return StandbySummary @@ -62,11 +89,90 @@ class Standby(Screen): class StandbySummary(Screen): skin = """ - + + + config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean + Blink + """ - def __init__(self, session, parent): - Screen.__init__(self, session) - self["CurrentTime"] = Clock() +from enigma import quitMainloop, iRecordableService +from Screens.MessageBox import MessageBox +from time import time +from Components.Task import job_manager + +inTryQuitMainloop = False + +class TryQuitMainloop(MessageBox): + def __init__(self, session, retvalue=1, timeout=-1, default_yes = True): + self.retval=retvalue + recordings = session.nav.getRecordings() + jobs = len(job_manager.getPendingJobs()) + self.connected = False + reason = "" + next_rec_time = -1 + if not recordings: + next_rec_time = session.nav.RecordTimer.getNextRecordingTime() + if recordings or (next_rec_time > 0 and (next_rec_time - time()) < 360): + reason = _("Recording(s) are in progress or coming up in few seconds!") + '\n' + if jobs: + if jobs == 1: + job = job_manager.getPendingJobs()[0] + reason += "%s: %s (%d%%)\n" % (job.getStatustext(), job.name, int(100*job.progress/float(job.end))) + else: + reason += (_("%d jobs are running in the background!") % jobs) + '\n' + if reason: + if retvalue == 1: + MessageBox.__init__(self, session, reason+_("Really shutdown now?"), type = MessageBox.TYPE_YESNO, timeout = timeout, default = default_yes) + elif retvalue == 2: + MessageBox.__init__(self, session, reason+_("Really reboot now?"), type = MessageBox.TYPE_YESNO, timeout = timeout, default = default_yes) + elif retvalue == 4: + pass + else: + MessageBox.__init__(self, session, reason+_("Really restart now?"), type = MessageBox.TYPE_YESNO, timeout = timeout, default = default_yes) + self.skinName = "MessageBox" + session.nav.record_event.append(self.getRecordEvent) + self.connected = True + self.onShow.append(self.__onShow) + self.onHide.append(self.__onHide) + else: + self.skin = """""" + Screen.__init__(self, session) + self.close(True) + + def getRecordEvent(self, recservice, event): + if event == iRecordableService.evEnd: + recordings = self.session.nav.getRecordings() + if not recordings: # no more recordings exist + rec_time = self.session.nav.RecordTimer.getNextRecordingTime() + if rec_time > 0 and (rec_time - time()) < 360: + self.initTimeout(360) # wait for next starting timer + self.startTimer() + else: + self.close(True) # immediate shutdown + elif event == iRecordableService.evStart: + self.stopTimer() + + def close(self, value): + if self.connected: + self.conntected=False + self.session.nav.record_event.remove(self.getRecordEvent) + if value: + # hack .. we dont like to show any other screens when this screen has closed + self.onClose = [self.__closed] + self.session.dialog_stack = [] + self.session.summary_stack = [None] + MessageBox.close(self, True) + + def __closed(self): + quitMainloop(self.retval) + + def __onShow(self): + global inTryQuitMainloop + inTryQuitMainloop = True + + def __onHide(self): + global inTryQuitMainloop + inTryQuitMainloop = False