check for running jobs before shutting down/rebooting
[enigma2.git] / lib / python / Components / Task.py
index d5fffbc..659660e 100644 (file)
@@ -37,6 +37,9 @@ class Job(object):
 
        progress = property(getProgress)
 
 
        progress = property(getProgress)
 
+       def getStatustext(self):
+               return { self.NOT_STARTED: _("Waiting"), self.IN_PROGRESS: _("In Progress"), self.FINISHED: _("Finished"), self.FAILED: _("Failed") }[self.status]
+
        def task_progress_changed_CB(self):
                self.state_changed()
 
        def task_progress_changed_CB(self):
                self.state_changed()
 
@@ -53,7 +56,7 @@ class Job(object):
                self.status = self.IN_PROGRESS
                self.state_changed()
                self.runNext()
                self.status = self.IN_PROGRESS
                self.state_changed()
                self.runNext()
-               sumTaskWeightings = sum([t.weighting for t in self.tasks])
+               sumTaskWeightings = sum([t.weighting for t in self.tasks]) or 1
                self.weightScale = self.end / float(sumTaskWeightings)
 
        def runNext(self):
                self.weightScale = self.end / float(sumTaskWeightings)
 
        def runNext(self):
@@ -244,6 +247,7 @@ class JobManager:
                self.active_jobs = [ ]
                self.failed_jobs = [ ]
                self.job_classes = [ ]
                self.active_jobs = [ ]
                self.failed_jobs = [ ]
                self.job_classes = [ ]
+               self.in_background = False
                self.active_job = None
 
        def AddJob(self, job):
                self.active_job = None
 
        def AddJob(self, job):
@@ -258,10 +262,17 @@ class JobManager:
 
        def jobDone(self, job, task, problems):
                print "job", job, "completed with", problems, "in", task
 
        def jobDone(self, job, task, problems):
                print "job", job, "completed with", problems, "in", task
+               from Tools import Notifications
+               if self.in_background:
+                       from Screens.TaskView import JobView
+                       Notifications.AddNotification(JobView, self.active_job)
                if problems:
                if problems:
-                       from Tools import Notifications
                        from Screens.MessageBox import MessageBox
                        from Screens.MessageBox import MessageBox
-                       Notifications.AddNotificationWithCallback(self.errorCB, MessageBox, _("Error: %s\nRetry?") % (problems[0].getErrorMessage(task)))
+                       if problems[0].RECOVERABLE:
+                               Notifications.AddNotificationWithCallback(self.errorCB, MessageBox, _("Error: %s\nRetry?") % (problems[0].getErrorMessage(task)))
+                       else:
+                               Notifications.AddNotification(MessageBox, _("Error") + (': %s') % (problems[0].getErrorMessage(task)), type = MessageBox.TYPE_ERROR )
+                               self.errorCB(False)
                        return
                        #self.failed_jobs.append(self.active_job)
 
                        return
                        #self.failed_jobs.append(self.active_job)
 
@@ -278,6 +289,12 @@ class JobManager:
                        self.active_job = None
                        self.kick()
 
                        self.active_job = None
                        self.kick()
 
+       def getPendingJobs(self):
+               list = [ ]
+               if self.active_job:
+                       list.append(self.active_job)
+               list += self.active_jobs
+               return list
 # some examples:
 #class PartitionExistsPostcondition:
 #      def __init__(self, device):
 # some examples:
 #class PartitionExistsPostcondition:
 #      def __init__(self, device):
@@ -317,7 +334,7 @@ class Condition:
        RECOVERABLE = False
 
        def getErrorMessage(self, task):
        RECOVERABLE = False
 
        def getErrorMessage(self, task):
-               return _("An error has occured. (%s)") % (self.__class__.__name__)
+               return _("An unknown error occured!") + " (%s @ task %s)" % (self.__class__.__name__, task.__class__.__name__)
 
 class WorkspaceExistsPrecondition(Condition):
        def check(self, task):
 
 class WorkspaceExistsPrecondition(Condition):
        def check(self, task):