if problems:
from Tools import Notifications
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)
RECOVERABLE = False
def getErrorMessage(self, task):
- return _("An error has occured. (%s)") % (self.__class__.__name__)
+ return _("An error has occured. (%s in %s)") % (self.__class__.__name__, task.__class__.__name__)
class WorkspaceExistsPrecondition(Condition):
def check(self, task):
self.container.readFromFile(self.inputFile)
def processOutputLine(self, line):
- print "[mpeg2encTask]", line
+ print "[mpeg2encTask]", line[:-1]
class spumuxTask(Task):
def __init__(self, job, xmlfile, inputfile, outputfile):
self.container.readFromFile(self.inputFile)
def processStderr(self, data):
- print "[spumuxTask]", data
+ print "[spumuxTask]", data[:-1]
def processStdout(self, data):
pass
self.generated_files.append(file)
def haveProgress(self, progress):
- print "PROGRESS [%s]" % progress
+ #print "PROGRESS [%s]" % progress
MSG_CHECK = "check & synchronize audio file"
MSG_DONE = "done..."
if progress == "preparing collection(s)...":
for f in self.generated_files:
os.remove(f)
+class MplexTaskPostcondition(Condition):
+ def check(self, task):
+ return task.error is None
+
+ def getErrorMessage(self, task):
+ print "[MplexTaskPostcondition] getErrorMessage", task
+ return {
+ task.ERROR_UNDERRUN: ("Can't multiplex source video!"),
+ task.ERROR_UNKNOWN: ("An unknown error occured!")
+ }[task.error]
+
class MplexTask(Task):
+ ERROR_UNDERRUN, ERROR_UNKNOWN = range(2)
def __init__(self, job, outputfile, inputfiles=None, demux_task=None):
Task.__init__(self, job, "Mux ES into PS")
self.weighting = 500
self.demux_task = demux_task
+ self.postconditions.append(MplexTaskPostcondition())
self.setTool("/usr/bin/mplex")
self.args += ["-f8", "-o", outputfile, "-v1"]
if inputfiles:
self.args += inputfiles
def prepare(self):
+ self.error = None
if self.demux_task:
self.args += self.demux_task.generated_files
def processOutputLine(self, line):
- print "[MplexTask] processOutputLine=", line
+ print "[MplexTask] processOutputLine=", line[:-1]
+ if line.startswith("**ERROR:"):
+ if line.find("Frame data under-runs detected") != -1:
+ self.error = self.ERROR_UNDERRUN
+ print "BUFFER UNDERRUN ERROR !!!"
+ else:
+ self.error = self.ERROR_UNKNOWN
class RemoveESFiles(Task):
def __init__(self, job, demux_task):
self.menupreview = job.menupreview
def processOutputLine(self, line):
- print "[DVDAuthorTask] processOutputLine=", line
+ print "[DVDAuthorTask] processOutputLine=", line[:-1]
if not self.menupreview and line.startswith("STAT: Processing"):
self.callback(self, [], stay_resident=True)
callback(self, [])
class BurnTaskPostcondition(Condition):
+ RECOVERABLE = True
def check(self, task):
return task.error is None