From 10375235dab481dcfae9208248a1d8cdc5c4bea6 Mon Sep 17 00:00:00 2001 From: Thomas Vander Stichele Date: Tue, 16 Jun 2009 19:27:18 +0000 Subject: [PATCH] * morituri/common/drive.py: Really make pycdio and cdio optional. * morituri/rip/drive.py: * morituri/rip/offset.py: Use drive.getAllDevicePaths() --- ChangeLog | 8 ++++++++ morituri/common/drive.py | 29 ++++++++++++++++++++++++++--- morituri/rip/drive.py | 22 +++++----------------- morituri/rip/offset.py | 19 +++++++++++++++++-- 4 files changed, 56 insertions(+), 22 deletions(-) diff --git a/ChangeLog b/ChangeLog index f2d08a1..47a2421 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-06-16 Thomas Vander Stichele + + * morituri/common/drive.py: + Really make pycdio and cdio optional. + * morituri/rip/drive.py: + * morituri/rip/offset.py: + Use drive.getAllDevicePaths() + 2009-06-15 Thomas Vander Stichele * morituri/result/result.py: diff --git a/morituri/common/drive.py b/morituri/common/drive.py index 26f1988..55ec837 100644 --- a/morituri/common/drive.py +++ b/morituri/common/drive.py @@ -20,8 +20,31 @@ # You should have received a copy of the GNU General Public License # along with morituri. If not, see . -import pycdio -import cdio +import os + +from morituri.common import log def getAllDevicePaths(): - return cdio.get_devices_with_cap(pycdio.FS_AUDIO, False) + try: + return _getAllDevicePathsPyCdio() + except ImportError: + log.info('drive', 'Cannot import pycdio') + return _getAllDevicePathsStatic() + +def _getAllDevicePathsPyCdio(): + import pycdio + import cdio + + # using FS_AUDIO here only makes it list the drive when an audio cd + # is inserted + return cdio.get_devices_with_cap(pycdio.FS_MATCH_ALL, False) + +def _getAllDevicePathsStatic(): + ret = [] + + for c in ['/dev/cdrom', '/dev/cdrecorder']: + if os.path.exists(c): + ret.append(c) + + return ret + diff --git a/morituri/rip/drive.py b/morituri/rip/drive.py index 6f45626..f36adc3 100644 --- a/morituri/rip/drive.py +++ b/morituri/rip/drive.py @@ -28,27 +28,15 @@ class List(logcommand.LogCommand): summary = "list drives" def do(self, args): - try: - import pycdio - import cdio - except ImportError: - self.info('pycdio not installed, cannot list drives') - found = False - for c in ['/dev/cdrom', '/dev/cdrecorder']: - if os.path.exists(c): - print "drive: %s", c - found = True + paths = drive.getAllDevicePaths() - if not found: - print 'No drives found.' - print 'Create /dev/cdrom if you have a CD drive, ' - print 'or install pycdio for better detection.' + if not paths: + print 'No drives found.' + print 'Create /dev/cdrom if you have a CD drive, ' + print 'or install pycdio for better detection.' return - # using FS_AUDIO here only makes it list the drive when an audio cd - # is inserted - paths = cdio.get_devices_with_cap(pycdio.FS_MATCH_ALL, False) for path in paths: device = cdio.Device(path) ok, vendor, model, release = device.get_hwinfo() diff --git a/morituri/rip/offset.py b/morituri/rip/offset.py index ce135d0..2139eca 100644 --- a/morituri/rip/offset.py +++ b/morituri/rip/offset.py @@ -26,7 +26,7 @@ import tempfile import gobject gobject.threads_init() -from morituri.common import logcommand, task, checksum, accurip +from morituri.common import logcommand, task, checksum, accurip, drive from morituri.image import image from morituri.program import cdrdao, cdparanoia @@ -45,6 +45,9 @@ CD in the AccurateRip database.""" help="list of offsets, comma-separated, " "colon-separated for ranges (defaults to %s)" % default, default=default) + self.parser.add_option('-d', '--device', + action="store", dest="device", + help="CD-DA device") def handleOptions(self, options): self.options = options @@ -59,11 +62,23 @@ CD in the AccurateRip database.""" self.debug('Trying with offsets %r', self._offsets) + if not options.device: + drives = drive.getAllDevicePaths() + if not drives: + self.error('No CD-DA drives found!') + return 3 + + # pick the first + self.options.device = drives[0] + + # this can be a symlink to another device + + def do(self, args): runner = task.SyncRunner() # first get the Table Of Contents of the CD - t = cdrdao.ReadTOCTask() + t = cdrdao.ReadTOCTask(device=self.options.device) runner.run(t) table = t.table