* morituri/program/cdparanoia.py:

* morituri/program/cdrdao.py:
	* morituri/rip/cd.py:
	* morituri/rip/offset.py:
	  Add device argument to ripping/scanning tasks.
This commit is contained in:
Thomas Vander Stichele
2009-05-23 18:14:31 +00:00
parent 7dfc1fbc6c
commit 3f1ace2ce2
5 changed files with 67 additions and 25 deletions

View File

@@ -83,7 +83,7 @@ class ReadTrackTask(task.Task):
description = "Reading Track"
def __init__(self, path, table, start, stop, offset=0):
def __init__(self, path, table, start, stop, offset=0, device=None):
"""
Read the given track.
@@ -97,6 +97,8 @@ class ReadTrackTask(task.Task):
@type stop: int
@param offset: read offset, in samples
@type offset: int
@param device: the device to rip from
@type device: str
"""
self.path = path
self._table = table
@@ -104,6 +106,7 @@ class ReadTrackTask(task.Task):
self._stop = stop
self._offset = offset
self._parser = ProgressParser()
self._device = device
self._buffer = "" # accumulate characters
self._errors = []
@@ -130,13 +133,14 @@ class ReadTrackTask(task.Task):
self.debug('Stopping at track %d, offset %d', stopTrack, stopOffset)
bufsize = 1024
argv = ["cdparanoia",
"--sample-offset=%d" % self._offset,
"--stderr-progress",
"%d[%s]-%d[%s]" % (
argv = ["cdparanoia", "--stderr-progress",
"--sample-offset=%d" % self._offset, ]
if self._device:
argv.extend(["--force-cdrom-device", self._device, ])
argv.extend(["%d[%s]-%d[%s]" % (
startTrack, common.framesToHMSF(startOffset),
stopTrack, common.framesToHMSF(stopOffset)),
self.path]
self.path])
self.debug('Running %s' % (" ".join(argv), ))
self._popen = asyncsub.Popen(argv,
bufsize=bufsize,
@@ -224,7 +228,7 @@ class ReadVerifyTrackTask(task.MultiSeparateTask):
@ivar checksum: the checksum of the track.
"""
def __init__(self, path, table, start, stop, offset=0):
def __init__(self, path, table, start, stop, offset=0, device=None):
"""
@param path: where to store the ripped track
@type path: str
@@ -236,6 +240,8 @@ class ReadVerifyTrackTask(task.MultiSeparateTask):
@type stop: int
@param offset: read offset, in samples
@type offset: int
@param device: the device to rip from
@type device: str
"""
self.path = path
@@ -247,9 +253,9 @@ class ReadVerifyTrackTask(task.MultiSeparateTask):
self.tasks = []
self.tasks.append(
ReadTrackTask(tmppath, table, start, stop, offset))
ReadTrackTask(tmppath, table, start, stop, offset, device))
self.tasks.append(checksum.CRC32Task(tmppath))
t = ReadTrackTask(tmppath, table, start, stop, offset)
t = ReadTrackTask(tmppath, table, start, stop, offset, device)
t.description = 'Verifying track...'
self.tasks.append(t)
self.tasks.append(checksum.CRC32Task(tmppath))

View File

@@ -198,10 +198,10 @@ class CDRDAOTask(task.Task):
task.Task.start(self, runner)
bufsize = 1024
self._popen = asyncsub.Popen(["cdrdao"] + self.options,
bufsize=bufsize,
stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, close_fds=True)
self._popen = asyncsub.Popen(["cdrdao", ] + self.options,
bufsize=bufsize,
stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, close_fds=True)
self.debug('Started cdrdao with pid %d and options %r',
self._popen.pid, self.options)
@@ -263,15 +263,21 @@ class ReadTableTask(CDRDAOTask):
description = "Scanning indexes..."
table = None
def __init__(self):
def __init__(self, device=None):
"""
@param device: the device to rip from
@type device: str
"""
CDRDAOTask.__init__(self)
self.parser = OutputParser(self)
(fd, self._tocfilepath) = tempfile.mkstemp(suffix='.morituri')
os.close(fd)
os.unlink(self._tocfilepath)
self.options = ['read-toc', '--session', '9',
self._tocfilepath, ]
self.options = ['read-toc', ]
if device:
self.options.extend(['--device', device, ])
self.options.extend(['--session', '9', self._tocfilepath, ])
def readbytes(self, bytes):
self.parser.read(bytes)
@@ -312,7 +318,11 @@ class ReadTOCTask(CDRDAOTask):
description = "Reading TOC..."
table = None
def __init__(self):
def __init__(self, device=None):
"""
@param device: the device to rip from
@type device: str
"""
CDRDAOTask.__init__(self)
self.parser = OutputParser(self)
@@ -322,8 +332,10 @@ class ReadTOCTask(CDRDAOTask):
# Reading a non-existent session gives you output for all sessions
# 9 should be a safe number
self.options = ['read-toc', '--fast-toc', '--session', '9',
self._toc, ]
self.options = ['read-toc', '--fast-toc', ]
if device:
self.options.extend(['--device', device, ])
self.options.extend(['--session', '9', self._toc, ])
def readbytes(self, bytes):
self.parser.read(bytes)