diff --git a/examples/ARcalibrate.py b/examples/ARcalibrate.py index 76a597e..2844e6d 100644 --- a/examples/ARcalibrate.py +++ b/examples/ARcalibrate.py @@ -27,10 +27,9 @@ import optparse import gobject gobject.threads_init() -import gtk from morituri.image import image -from morituri.common import task, taskgtk, checksum +from morituri.common import task, checksum from morituri.program import cdrdao, cdparanoia """ @@ -41,6 +40,7 @@ from morituri.common import log log.init() def gtkmain(runner, taskk): + import gtk runner.connect('stop', lambda _: gtk.main_quit()) window = gtk.Window() @@ -112,6 +112,7 @@ def main(argv): runner = task.SyncRunner() function = climain elif options.runner == 'gtk': + from morituri.common import taskgtk runner = taskgtk.GtkProgressRunner() function = gtkmain diff --git a/examples/readtrack.py b/examples/readtrack.py index 0301496..4b41c8e 100644 --- a/examples/readtrack.py +++ b/examples/readtrack.py @@ -3,10 +3,12 @@ import re import os +import stat import subprocess import tempfile from morituri.common import task, checksum, log +from morituri.image import table from morituri.program import cdparanoia import gobject @@ -21,7 +23,12 @@ def main(): fd, path = tempfile.mkstemp(suffix='.morituri') os.close(fd) - t = cdparanoia.ReadTrackTask(path, 1000, 3000, offset=0) + fakeTable = table.Table([ + table.Track( 1, 0, 15536), + ]) + + t = cdparanoia.ReadTrackTask(path, fakeTable, 1000, 3000, offset=0) + if i == 1: t.description = 'Verifying track...' diff --git a/morituri/program/cdparanoia.py b/morituri/program/cdparanoia.py index e84bc0d..01c4a4c 100644 --- a/morituri/program/cdparanoia.py +++ b/morituri/program/cdparanoia.py @@ -20,10 +20,12 @@ # You should have received a copy of the GNU General Public License # along with morituri. If not, see . +import os import re +import stat import subprocess -from morituri.common import task, log, common +from morituri.common import task, log, common, checksum from morituri.extern import asyncsub _PROGRESS_RE = re.compile(r""" @@ -70,8 +72,8 @@ class ReadTrackTask(task.Task): @type path: str @param table: table of contents of CD @type table: L{table.Table} - @param start: first frame to rip, in cdparanoia notation - @type start: str + @param start: first frame to rip + @type start: int @param stop: last frame to rip (inclusive) @type stop: int @param offset: read offset, in samples @@ -91,10 +93,10 @@ class ReadTrackTask(task.Task): task.Task.start(self, runner) # find on which track the range starts and stops - startTrack = 0 + startTrack = 1 startOffset = 0 - stopTrack = 0 - stopOffset = 0 + stopTrack = 1 + stopOffset = self._stop for i, t in enumerate(self._table.tracks): if t.start <= self._start: @@ -168,12 +170,27 @@ class ReadTrackTask(task.Task): self._done() def _done(self): - self.setProgress(1.0) - if self._popen.returncode != 0: - if self._errors: - print "\n".join(self._errors) - else: - print 'ERROR: exit code %r' % self._popen.returncode - - self.stop() - return + self.setProgress(1.0) + + # check if the length matches + size = os.stat(self.path)[stat.ST_SIZE] + # wav header is 44 bytes + offsetLength = self._stop - self._start + 1 + expected = offsetLength * checksum.BYTES_PER_FRAME + 44 + if size != expected: + print 'ERROR: file size %d did not match expected size %d' % ( + size, expected) + if (size - expected) % checksum.BYTES_PER_FRAME == 0: + print 'ERROR: %d frames difference' % ( + (size - expected) / checksum.BYTES_PER_FRAME) + else: + print 'SIZE %d matches offset delta %d' % (size, self._stop - self._start) + + if self._popen.returncode != 0: + if self._errors: + print "\n".join(self._errors) + else: + print 'ERROR: exit code %r' % self._popen.returncode + + self.stop() + return