Update Cybook Orizon driver: create a thumbnail with the correct format, remove mobi/prc formats from the default supported list, add option for card folder

This commit is contained in:
Jellby 2013-12-31 18:50:42 +01:00 committed by Kovid Goyal
parent a79225f8ce
commit 90e3568d14
2 changed files with 71 additions and 0 deletions

View File

@ -15,6 +15,7 @@ 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):
@ -67,12 +68,40 @@ class ORIZON(CYBOOK):
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'
EBOOK_DIR_CARD_A = [EBOOK_DIR_CARD_A]
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 open('%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
if not folder:
folder = ''
self.EBOOK_DIR_CARD_A = folder
print(folder)
@classmethod
def can_handle(cls, device_info, debug=False):
if isunix:

View File

@ -0,0 +1,42 @@
__license__ = 'GPL v3'
__copyright__ = '2013, Jellby <jellby at yahoo.com>'
'''
Write a t4b file to disk.
'''
import StringIO
DEFAULT_T4B_DATA = ''
def reduce_color(c):
if (c < 0):
return 0
elif (c > 255):
return 15
else:
return c//16
def write_t4b(t4bfile, coverdata=None):
'''
t4bfile is a file handle ready to write binary data to disk.
coverdata is a string representation of a JPEG file.
'''
from PIL import Image
if coverdata != None:
coverdata = StringIO.StringIO(coverdata)
cover = Image.open(coverdata).convert("L")
cover.thumbnail((96, 144), Image.ANTIALIAS)
t4bcover = Image.new('L', (96, 144), 'white')
x, y = cover.size
t4bcover.paste(cover, ((96-x)/2, (144-y)/2))
pxs = t4bcover.getdata()
t4bfile.write('t4bp')
for i in range(0,len(pxs),2):
byte = reduce_color(pxs[i])
byte = 16*byte + reduce_color(pxs[i+1])
t4bfile.write(chr(byte))
else:
t4bfile.write(DEFAULT_T4B_DATA)