Merge branch 'bug_271_ac3pcm_delay_servicemp3'
[vuplus_dvbapp] / lib / python / Screens / TaskView.py
index 790e9bc..eb926ca 100644 (file)
@@ -1,36 +1,71 @@
 from Screen import Screen
 from Screen import Screen
+from Components.ConfigList import ConfigListScreen
+from Components.config import config, ConfigSubsection, ConfigSelection, getConfigListEntry
+from Components.SystemInfo import SystemInfo
 from InfoBarGenerics import InfoBarNotifications
 from InfoBarGenerics import InfoBarNotifications
+import Screens.Standby
+from Tools import Notifications
 
 
-class JobView(InfoBarNotifications, Screen):
-       def __init__(self, session, job, cancelable = True, close_on_finish = False):
+class JobView(InfoBarNotifications, Screen, ConfigListScreen):
+       def __init__(self, session, job, parent=None, cancelable = True, backgroundable = True, afterEvent = 0):
                from Components.Sources.StaticText import StaticText
                from Components.Sources.Progress import Progress
                from Components.Sources.Boolean import Boolean
                from Components.ActionMap import ActionMap
                from Components.Sources.StaticText import StaticText
                from Components.Sources.Progress import Progress
                from Components.Sources.Boolean import Boolean
                from Components.ActionMap import ActionMap
-               Screen.__init__(self, session)
+               Screen.__init__(self, session, parent)
                InfoBarNotifications.__init__(self)
                InfoBarNotifications.__init__(self)
+               ConfigListScreen.__init__(self, [])
+               self.parent = parent
                self.job = job
                self.job = job
-               self.close_on_finish = close_on_finish
-               self.cancelable = cancelable
 
                self["job_name"] = StaticText(job.name)
                self["job_progress"] = Progress()
 
                self["job_name"] = StaticText(job.name)
                self["job_progress"] = Progress()
-               self["job_status"] = StaticText()
                self["job_task"] = StaticText()
                self["job_task"] = StaticText()
+               self["summary_job_name"] = StaticText(job.name)
+               self["summary_job_progress"] = Progress()
+               self["summary_job_task"] = StaticText()
+               self["job_status"] = StaticText()
                self["finished"] = Boolean()
                self["finished"] = Boolean()
+               self["cancelable"] = Boolean(cancelable)
+               self["backgroundable"] = Boolean(backgroundable)
+
+               self["key_blue"] = StaticText(_("Background"))
 
                self.onShow.append(self.windowShow)
                self.onHide.append(self.windowHide)
 
 
                self.onShow.append(self.windowShow)
                self.onHide.append(self.windowHide)
 
-               self["actions"] = ActionMap(["OkCancelActions"], 
-                       {
-                               "ok": self.ok,
-                               "cancel": self.abort
-                       })
+               self["setupActions"] = ActionMap(["ColorActions", "SetupActions"],
+               {
+                   "green": self.ok,
+                   "red": self.abort,
+                   "blue": self.background,
+                   "cancel": self.ok,
+                   "ok": self.ok,
+               }, -2)
+
+               self.afterevents = [ "nothing", "standby", "deepstandby", "close" ]
+               self.settings = ConfigSubsection()
+               if SystemInfo["DeepstandbySupport"]:
+                       shutdownString = _("go to deep standby")
+               else:
+                       shutdownString = _("shut down")
+               self.settings.afterEvent = ConfigSelection(choices = [("nothing", _("do nothing")), ("close", _("Close")), ("standby", _("go to standby")), ("deepstandby", shutdownString)], default = self.afterevents[afterEvent])
+               self.setupList()
+               self.state_changed()
+
+       def setupList(self):
+               self["config"].setList( [ getConfigListEntry(_("After event"), self.settings.afterEvent) ])
+               
+       def keyLeft(self):
+               ConfigListScreen.keyLeft(self)
+               self.setupList()
 
 
+       def keyRight(self):
+               ConfigListScreen.keyRight(self)
+               self.setupList()
+       
        def windowShow(self):
                self.job.state_changed.append(self.state_changed)
        def windowShow(self):
                self.job.state_changed.append(self.state_changed)
-               self.state_changed()
 
        def windowHide(self):
                if len(self.job.state_changed) > 0:
 
        def windowHide(self):
                if len(self.job.state_changed) > 0:
@@ -39,25 +74,58 @@ class JobView(InfoBarNotifications, Screen):
        def state_changed(self):
                j = self.job
                self["job_progress"].range = j.end
        def state_changed(self):
                j = self.job
                self["job_progress"].range = j.end
+               self["summary_job_progress"].range = j.end
                self["job_progress"].value = j.progress
                self["job_progress"].value = j.progress
-               print "JobView::state_changed:", j.end, j.progress
-               self["job_status"].text = {j.NOT_STARTED: _("Waiting"), j.IN_PROGRESS: _("In Progress"), j.FINISHED: _("Finished"), j.FAILED: _("Failed")}[j.status]
+               self["summary_job_progress"].value = j.progress
+               #print "JobView::state_changed:", j.end, j.progress
+               self["job_status"].text = j.getStatustext()
                if j.status == j.IN_PROGRESS:
                        self["job_task"].text = j.tasks[j.current_task].name
                if j.status == j.IN_PROGRESS:
                        self["job_task"].text = j.tasks[j.current_task].name
+                       self["summary_job_task"].text = j.tasks[j.current_task].name
                else:
                        self["job_task"].text = ""
                else:
                        self["job_task"].text = ""
-               if j.status in [j.FINISHED, j.FAILED]:
-                       if self.close_on_finish:
-                               self.close()
-                       else:
+                       self["summary_job_task"].text = j.getStatustext()
+               if j.status in (j.FINISHED, j.FAILED):
+                       self.performAfterEvent()
+                       self["backgroundable"].boolean = False
+                       if j.status == j.FINISHED:
                                self["finished"].boolean = True
                                self["finished"].boolean = True
+                               self["cancelable"].boolean = False
+                       elif j.status == j.FAILED:
+                               self["cancelable"].boolean = True
+
+       def background(self):
+               if self["backgroundable"].boolean == True:
+                       self.close(True)
 
        def ok(self):
 
        def ok(self):
-               if self.job.status in [self.job.FINISHED, self.job.FAILED]:
-                       self.close()
+               if self.job.status in (self.job.FINISHED, self.job.FAILED):
+                       self.close(False)
 
        def abort(self):
 
        def abort(self):
-               if self.job.status in [self.job.FINISHED, self.job.FAILED]:
-                       self.close()
-               if self.cancelable:
+               if self.job.status in (self.job.FINISHED, self.job.FAILED):
+                       self.close(False)
+               if self["cancelable"].boolean == True:
                        self.job.cancel()
                        self.job.cancel()
+
+       def performAfterEvent(self):
+               self["config"].hide()
+               if self.settings.afterEvent.getValue() == "nothing":
+                       return
+               elif self.settings.afterEvent.getValue() == "close":
+                       self.abort()
+               from Screens.MessageBox import MessageBox
+               if self.settings.afterEvent.getValue() == "deepstandby":
+                       if not Screens.Standby.inTryQuitMainloop:
+                               Notifications.AddNotificationWithCallback(self.sendTryQuitMainloopNotification, MessageBox, _("A sleep timer wants to shut down\nyour Dreambox. Shutdown now?"), timeout = 20)
+               elif self.settings.afterEvent.getValue() == "standby":
+                       if not Screens.Standby.inStandby:
+                               Notifications.AddNotificationWithCallback(self.sendStandbyNotification, MessageBox, _("A sleep timer wants to set your\nDreambox to standby. Do that now?"), timeout = 20)
+
+       def sendStandbyNotification(self, answer):
+               if answer:
+                       Notifications.AddNotification(Screens.Standby.Standby)
+
+       def sendTryQuitMainloopNotification(self, answer):
+               if answer:
+                       Notifications.AddNotification(Screens.Standby.TryQuitMainloop, 1)