verify cdparanoia's output

This commit is contained in:
Thomas Vander Stichele
2009-05-03 14:54:52 +00:00
parent d8e288d848
commit 81eddd26b8
3 changed files with 43 additions and 18 deletions

View File

@@ -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

View File

@@ -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...'

View File

@@ -20,10 +20,12 @@
# You should have received a copy of the GNU General Public License
# along with morituri. If not, see <http://www.gnu.org/licenses/>.
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