Support for the Cybook in OS X

This commit is contained in:
Kovid Goyal 2009-01-07 20:31:01 -08:00
commit ed040cb7fe
5 changed files with 64 additions and 24 deletions

View File

@ -7,9 +7,8 @@ Device driver for Bookeen's Cybook Gen 3
import os, fnmatch
from calibre.devices.usbms.driver import USBMS
from calibre.devices.usbms.cli import CLI
class CYBOOKG3(USBMS, CLI):
class CYBOOKG3(USBMS):
MIME_MAP = {
'mobi' : 'application/mobi',
'prc' : 'application/prc',
@ -28,6 +27,9 @@ class CYBOOKG3(USBMS, CLI):
VENDOR_NAME = 'BOOKEEN'
PRODUCT_NAME = 'CYBOOK_GEN3'
OSX_NAME_MAIN_MEM = 'Bookeen Cybook Gen3 -FD Media'
OSX_NAME_CARD_MEM = 'Bookeen Cybook Gen3 -SD Media'
MAIN_MEMORY_VOLUME_LABEL = 'Cybook Gen 3 Main Memory'
STORAGE_CARD_VOLUME_LABEL = 'Cybook Gen 3 Storage Card'

View File

@ -7,9 +7,8 @@ Device driver for Amazon's Kindle
import os, fnmatch
from calibre.devices.usbms.driver import USBMS
from calibre.devices.usbms.cli import CLI
class KINDLE(USBMS, CLI):
class KINDLE(USBMS):
MIME_MAP = {
'azw' : 'application/azw',
'mobi' : 'application/mobi',

View File

@ -1,16 +0,0 @@
__license__ = 'GPL v3'
__copyright__ = '2009, John Schember <john at nachtimwald.com'
'''
Generic implemenation of the prs500 command line functions. This is not a
complete stand alone driver. It is intended to be subclassed with the relevant
parts implemented for a particular device.
'''
class CLI(object):
# ls, cp, mkdir, touch, cat,
def rm(self, path, end_session=True):
path = self.munge_path(path)
self.delete_books([path])

View File

@ -19,6 +19,19 @@ class Device(_Device):
class.
'''
VENDOR_ID = 0x0
PRODUCT_ID = 0x0
BCD = 0x0
VENDOR_NAME = ''
PRODUCT_NAME = ''
OSX_NAME_MAIN_MEM = ''
OSX_NAME_CARD_MEM = ''
MAIN_MEMORY_VOLUME_LABEL = ''
STORAGE_CARD_VOLUME_LABEL = ''
FDI_TEMPLATE = \
'''
<device>
@ -158,8 +171,47 @@ class Device(_Device):
if len(drives) > 1:
self._card_prefix = drives[1][1]
@classmethod
def get_osx_mountpoints(cls, raw=None):
if raw is None:
ioreg = '/usr/sbin/ioreg'
if not os.access(ioreg, os.X_OK):
ioreg = 'ioreg'
raw = subprocess.Popen((ioreg+' -w 0 -S -c IOMedia').split(), stdout=subprocess.PIPE).stdout.read()
lines = raw.splitlines()
names = {}
def get_dev_node(lines, loc):
for line in lines:
line = line.strip()
if line.endswith('}'):
break
match = re.search(r'"BSD Name"\s+=\s+"(.*?)"', line)
if match is not None:
names[loc] = match.group(1)
break
for i, line in enumerate(lines):
if line.strip().endswith('<class IOMedia>') and OSX_NAME_MAIN_MEM in line:
get_dev_node(lines[i+1:], 'main')
if line.strip().endswith('<class IOMedia>') and OSX_NAME_CARD_MEM in line:
get_dev_node(lines[i+1:], 'card')
if len(names.keys()) == 2:
break
return names
def open_osx(self):
raise NotImplementedError()
mount = subprocess.Popen('mount', shell=True, stdout=subprocess.PIPE).stdout.read()
names = self.get_osx_mountpoints()
dev_pat = r'/dev/%s(\w*)\s+on\s+([^\(]+)\s+'
if 'main' not in names.keys():
raise DeviceError(_('Unable to detect the %s disk drive. Try rebooting.')%self.__class__.__name__)
main_pat = dev_pat%names['main']
self._main_prefix = re.search(main_pat, mount).group(2) + os.sep
card_pat = names['card'] if 'card' in names.keys() else None
if card_pat is not None:
card_pat = dev_pat%card_pat
self._card_prefix = re.search(card_pat, mount).group(2) + os.sep
def open_linux(self):
import dbus

View File

@ -16,6 +16,7 @@ from calibre.devices.errors import FreeSpaceError
class USBMS(Device):
EBOOK_DIR = ''
MIME_MAP = {}
FORMATS = []
def __init__(self, key='-1', log_packets=False, report_progress=None):
pass
@ -141,3 +142,5 @@ class USBMS(Device):
return book_title, book_author, book_mime
# ls, rm, cp, mkdir, touch, cat