%PDF- %PDF-
| Direktori : /usr/lib/calibre/calibre/devices/cybook/ |
| Current File : //usr/lib/calibre/calibre/devices/cybook/driver.py |
__license__ = 'GPL v3'
__copyright__ = '2009, John Schember <john at nachtimwald.com>'
__docformat__ = 'restructuredtext en'
'''
Device driver for Bookeen's Cybook Gen 3 and Opus and Orizon
'''
import os
import re
from calibre import fsync
from calibre.constants import isunix
from calibre.devices.usbms.driver import USBMS
import calibre.devices.cybook.t2b as t2b
import calibre.devices.cybook.t4b as t4b
class CYBOOK(USBMS):
name = 'Cybook Gen 3 / Opus Device Interface'
gui_name = 'Cybook Gen 3/Opus'
description = _('Communicate with the Cybook Gen 3/Opus e-book reader.')
author = 'John Schember'
supported_platforms = ['windows', 'osx', 'linux']
# Ordered list of supported formats
# Be sure these have an entry in calibre.devices.mime
FORMATS = ['epub', 'mobi', 'prc', 'html', 'pdf', 'rtf', 'txt']
VENDOR_ID = [0x0bda, 0x3034]
PRODUCT_ID = [0x0703, 0x1795]
BCD = [0x110, 0x132]
VENDOR_NAME = 'BOOKEEN'
WINDOWS_MAIN_MEM = re.compile(r'CYBOOK_(OPUS|GEN3)__-FD')
WINDOWS_CARD_A_MEM = re.compile('CYBOOK_(OPUS|GEN3)__-SD')
OSX_MAIN_MEM_VOL_PAT = re.compile(r'/Cybook')
EBOOK_DIR_MAIN = 'eBooks'
EBOOK_DIR_CARD_A = 'eBooks'
THUMBNAIL_HEIGHT = 144
DELETE_EXTS = ['.mbp', '.dat', '.bin', '_6090.t2b', '.thn']
SUPPORTS_SUB_DIRS = True
def upload_cover(self, path, filename, metadata, filepath):
coverdata = getattr(metadata, 'thumbnail', None)
if coverdata and coverdata[2]:
coverdata = coverdata[2]
else:
coverdata = None
with lopen('%s_6090.t2b' % os.path.join(path, filename), 'wb') as t2bfile:
t2b.write_t2b(t2bfile, coverdata)
fsync(t2bfile)
@classmethod
def can_handle(cls, device_info, debug=False):
if isunix:
return device_info[3] == 'Bookeen' and (device_info[4] == 'Cybook Gen3' or device_info[4] == 'Cybook Opus')
return True
class ORIZON(CYBOOK):
name = 'Cybook Orizon Device Interface'
gui_name = 'Orizon'
description = _('Communicate with the Cybook Orizon e-book reader.')
BCD = [0x319]
FORMATS = ['epub', 'html', 'pdf', 'rtf', 'txt']
VENDOR_NAME = ['BOOKEEN', 'LINUX']
WINDOWS_MAIN_MEM = re.compile(r'(CYBOOK_ORIZON__-FD)|(FILE-STOR_GADGET)')
WINDOWS_CARD_A_MEM = re.compile('(CYBOOK_ORIZON__-SD)|(FILE-STOR_GADGET)')
EBOOK_DIR_MAIN = EBOOK_DIR_CARD_A = 'Digital Editions'
EXTRA_CUSTOMIZATION_MESSAGE = [
_('Card A folder') + ':::<p>' + _(
'Enter the folder where the books are to be stored when sent to the '
'memory card. This folder is prepended to any send to device template') + '</p>',
]
EXTRA_CUSTOMIZATION_DEFAULT = [EBOOK_DIR_CARD_A]
def upload_cover(self, path, filename, metadata, filepath):
coverdata = getattr(metadata, 'thumbnail', None)
if coverdata and coverdata[2]:
coverdata = coverdata[2]
else:
coverdata = None
with lopen('%s.thn' % filepath, 'wb') as thnfile:
t4b.write_t4b(thnfile, coverdata)
fsync(thnfile)
def post_open_callback(self):
opts = self.settings()
folder = opts.extra_customization[0]
if not folder:
folder = ''
self.EBOOK_DIR_CARD_A = folder
@classmethod
def can_handle(cls, device_info, debug=False):
if isunix:
return device_info[3] == 'Bookeen' and device_info[4] == 'Cybook Orizon'
return True
def get_carda_ebook_dir(self, for_upload=False):
if not for_upload:
return ''
return self.EBOOK_DIR_CARD_A
class MUSE(CYBOOK):
name = 'Cybook Muse Device Interface'
gui_name = 'Muse'
description = _('Communicate with the Cybook Muse e-book reader.')
author = 'Kovid Goyal'
FORMATS = ['epub', 'html', 'fb2', 'txt', 'pdf', 'djvu']
VENDOR_ID = [0x0525]
PRODUCT_ID = [0xa4a5]
BCD = [0x0230]
VENDOR_NAME = 'USB_2.0'
WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = 'USB_FLASH_DRIVER'
EBOOK_DIR_MAIN = 'Books'
SCAN_FROM_ROOT = True
@classmethod
def can_handle(cls, device_info, debug=False):
if isunix:
return device_info[3] == 'Bookeen' and device_info[4] in ('Cybook', 'Lev', 'Nolimbook', 'Letto', 'Nolim', 'Saga', 'NolimbookXL')
return True
class DIVA(CYBOOK):
name = 'Bookeen Diva HD Device Interface'
gui_name = 'Diva HD'
description = _('Communicate with the Bookeen Diva HD e-book reader.')
author = 'Kovid Goyal'
VENDOR_ID = [0x1d6b]
PRODUCT_ID = [0x0104]
BCD = [0x100]
FORMATS = ['epub', 'html', 'fb2', 'txt', 'pdf']
EBOOK_DIR_MAIN = 'Books'
SCAN_FROM_ROOT = True
@classmethod
def can_handle(cls, device_info, debug=False):
return True