* morituri/common/task.py:

add task argument to TaskRunner.schedule so we can get exceptions.
	  Add .schedule method to Task to pass self.
	* morituri/common/checksum.py:
	* morituri/common/encode.py:
	* morituri/common/gstreamer.py:
	* morituri/program/cdparanoia.py:
	* morituri/program/cdrdao.py:
	  Adapt.
This commit is contained in:
Thomas Vander Stichele
2011-05-24 12:51:40 +00:00
parent 4454abcc85
commit 8bc5eff73c
7 changed files with 44 additions and 22 deletions

View File

@@ -1,3 +1,15 @@
2011-05-24 Thomas Vander Stichele <thomas at apestaart dot org>
* morituri/common/task.py:
add task argument to TaskRunner.schedule so we can get exceptions.
Add .schedule method to Task to pass self.
* morituri/common/checksum.py:
* morituri/common/encode.py:
* morituri/common/gstreamer.py:
* morituri/program/cdparanoia.py:
* morituri/program/cdrdao.py:
Adapt.
2011-05-24 Thomas Vander Stichele <thomas at apestaart dot org>
* morituri/test/test_common_encode.py:

View File

@@ -133,7 +133,7 @@ class ChecksumTask(gstreamer.GstPipelineTask):
def play():
self.pipeline.set_state(gst.STATE_PLAYING)
return False
self.runner.schedule(0, play)
self.schedule(0, play)
#self.pipeline.set_state(gst.STATE_PLAYING)
self.debug('scheduled setting to play')
@@ -193,13 +193,13 @@ class ChecksumTask(gstreamer.GstPipelineTask):
framesDone = frame - self._frameStart
progress = float(framesDone) / float((self._frameLength))
# marshall to the main thread
self.runner.schedule(0, self.setProgress, progress)
self.schedule(0, self.setProgress, progress)
def _eos_cb(self, sink):
# get the last one; FIXME: why does this not get to us before ?
#self._new_buffer_cb(sink)
self.debug('eos, scheduling stop')
self.runner.schedule(0, self.stop)
self.schedule(0, self.stop)
class CRC32Task(ChecksumTask):
"""
@@ -311,7 +311,7 @@ class TRMTask(gstreamer.GstPipelineTask):
# in the case of checksum
def bus_eos_cb(self, bus, message):
gst.debug('eos, scheduling stop')
self.runner.schedule(0, self.stop)
self.schedule(0, self.stop)
def bus_tag_cb(self, bus, message):

View File

@@ -217,7 +217,7 @@ class EncodeTask(gstreamer.GstPipelineTask):
# update progress based on buffer offset (expected to be in samples)
# versus length in samples
# marshal to main thread
self.runner.schedule(0, self.setProgress,
self.schedule(0, self.setProgress,
float(buffer.offset) / self._length)
# don't drop the buffer
@@ -225,7 +225,7 @@ class EncodeTask(gstreamer.GstPipelineTask):
def bus_eos_cb(self, bus, message):
self.debug('eos, scheduling stop')
self.runner.schedule(0, self.stop)
self.schedule(0, self.stop)
def _message_element_cb(self, bus, message):
if message.src != self._level:
@@ -281,7 +281,7 @@ class TagReadTask(gstreamer.GstPipelineTask):
def bus_eos_cb(self, bus, message):
self.debug('eos, scheduling stop')
self.runner.schedule(0, self.stop)
self.schedule(0, self.stop)
def bus_tag_cb(self, bus, message):
taglist = message.parse_tag()
@@ -344,14 +344,14 @@ class TagWriteTask(task.Task):
def play():
self._pipeline.set_state(gst.STATE_PLAYING)
return False
self.runner.schedule(0, play)
self.schedule(0, play)
#self._pipeline.set_state(gst.STATE_PLAYING)
self.debug('scheduled setting to play')
def _message_eos_cb(self, bus, message):
self.debug('eos, scheduling stop')
self.runner.schedule(0, self.stop)
self.schedule(0, self.stop)
def stop(self):
# here to avoid import gst eating our options

View File

@@ -106,7 +106,7 @@ class GstPipelineTask(task.Task):
if self.playing:
self.debug('scheduling setting pipeline to PLAYING')
self.runner.schedule(0, playLater)
self.schedule(0, playLater)
def stop(self):
self.debug('stopping')
@@ -169,4 +169,4 @@ class GstPipelineTask(task.Task):
exc = GstException(*message.parse_error())
self.setAndRaiseException(exc)
self.debug('error, scheduling stop')
self.runner.schedule(0, self.stop)
self.schedule(0, self.stop)

View File

@@ -155,6 +155,10 @@ class Task(object, log.Loggable):
self.debug('set exception, %r, %r' % (
exception, self.exceptionMessage))
def schedule(self, delta, callable, *args, **kwargs):
self.runner.schedule(self, delta, callable, *args, **kwargs)
def addListener(self, listener):
"""
Add a listener for task status changes.
@@ -210,7 +214,7 @@ class ITaskListener(object):
class DummyTask(Task):
def start(self, runner):
Task.start(self, runner)
self.runner.schedule(1.0, self._wind)
self.schedule(1.0, self._wind)
def _wind(self):
self.setProgress(min(self.progress + 0.1, 1.0))
@@ -219,7 +223,7 @@ class DummyTask(Task):
self.stop()
return
self.runner.schedule(1.0, self._wind)
self.schedule(1.0, self._wind)
class BaseMultiTask(Task, ITaskListener):
"""
@@ -433,10 +437,16 @@ class SyncRunner(TaskRunner, ITaskListener):
self.stopped(task)
def schedule(self, delta, callable, *args, **kwargs):
def schedule(self, task, delta, callable, *args, **kwargs):
def c():
callable(*args, **kwargs)
return False
try:
callable(*args, **kwargs)
return False
except Exception, e:
self.debug('exception when calling scheduled callable %r',
callable)
task.setException(e)
raise
gobject.timeout_add(int(delta * 1000L), c)
### ITaskListener methods

View File

@@ -274,7 +274,7 @@ class ReadTrackTask(task.Task):
raise
self.runner.schedule(1.0, self._read, runner)
self.schedule(1.0, self._read, runner)
def _read(self, runner):
ret = self._popen.recv_err()
@@ -282,7 +282,7 @@ class ReadTrackTask(task.Task):
if self._popen.poll() is not None:
self._done()
return
self.runner.schedule(0.01, self._read, runner)
self.schedule(0.01, self._read, runner)
return
self._buffer += ret
@@ -315,11 +315,11 @@ class ReadTrackTask(task.Task):
# 0 does not give us output before we complete, 1.0 gives us output
# too late
self.runner.schedule(0.01, self._read, runner)
self.schedule(0.01, self._read, runner)
def _poll(self, runner):
if self._popen.poll() is None:
self.runner.schedule(1.0, self._poll, runner)
self.schedule(1.0, self._poll, runner)
return
self._done()

View File

@@ -270,7 +270,7 @@ class CDRDAOTask(task.Task):
self._popen.pid, self.options)
self.debug('command: cdrdao %s', ' '.join(self.options))
self.runner.schedule(1.0, self._read, runner)
self.schedule(1.0, self._read, runner)
def _read(self, runner):
try:
@@ -288,7 +288,7 @@ class CDRDAOTask(task.Task):
if self._popen.poll() is None and self.runner:
# not finished yet
self.runner.schedule(1.0, self._read, runner)
self.schedule(1.0, self._read, runner)
return
self._done()