mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-08-05 08:40:13 -04:00
Kindle driver for OSX and Windows. Better Cybook detection in windows. The prs500 command now supports the Cybook and Kindle drivers.
This commit is contained in:
commit
7057fb8662
@ -10,7 +10,7 @@ def devices():
|
||||
from calibre.devices.prs505.driver import PRS505
|
||||
from calibre.devices.prs700.driver import PRS700
|
||||
from calibre.devices.cybookg3.driver import CYBOOKG3
|
||||
#from calibre.devices.kindle.driver import KINDLE
|
||||
from calibre.devices.kindle.driver import KINDLE
|
||||
return (PRS500, PRS505, PRS700, CYBOOKG3)
|
||||
|
||||
import time
|
||||
|
@ -36,16 +36,14 @@ class CYBOOKG3(USBMS):
|
||||
os.unlink(path)
|
||||
|
||||
filepath, ext = os.path.splitext(path)
|
||||
basepath, filename = os.path.split(filepath)
|
||||
|
||||
# Delete the ebook auxiliary file
|
||||
if os.path.exists(filepath + '.mbp'):
|
||||
os.unlink(filepath + '.mbp')
|
||||
|
||||
# Delete the thumbnails file auto generated for the ebook
|
||||
for p, d, files in os.walk(basepath):
|
||||
for filen in fnmatch.filter(files, filename + "*.t2b"):
|
||||
os.unlink(os.path.join(p, filen))
|
||||
if os.path.exists(filepath + '_6090.t2b'):
|
||||
os.unlink(filepath + '_6090.t2b')
|
||||
|
||||
try:
|
||||
os.removedirs(os.path.dirname(path))
|
||||
|
@ -16,13 +16,18 @@ class KINDLE(USBMS):
|
||||
PRODUCT_ID = 0x0001
|
||||
BCD = [0x399]
|
||||
|
||||
VENDOR_NAME = 'AMAZON'
|
||||
WINDOWS_MAIN_MEM = 'KINDLE'
|
||||
VENDOR_NAME = 'KINDLE'
|
||||
WINDOWS_MAIN_MEM = 'INTERNAL_STORAGE'
|
||||
WINDOWS_CARD_MEM = 'CARD_STORAGE'
|
||||
|
||||
OSX_MAIN_MEM = 'Kindle Internal Storage Media'
|
||||
OSX_CARD_MEM = 'Kindle Card Storage Media'
|
||||
|
||||
MAIN_MEMORY_VOLUME_LABEL = 'Kindle Main Memory'
|
||||
STORAGE_CARD_VOLUME_LABEL = 'Kindle Storage Card'
|
||||
|
||||
EBOOK_DIR_MAIN = "documents"
|
||||
SUPPORTS_SUB_DIRS = True
|
||||
|
||||
def delete_books(self, paths, end_session=True):
|
||||
for path in paths:
|
||||
|
@ -125,6 +125,7 @@ class USBMS(Device):
|
||||
if os.path.exists(path):
|
||||
# Delete the ebook
|
||||
os.unlink(path)
|
||||
if self.SUPPORTS_SUB_DIRS:
|
||||
try:
|
||||
os.removedirs(os.path.dirname(path))
|
||||
except:
|
||||
@ -149,6 +150,17 @@ class USBMS(Device):
|
||||
src = open(path, 'rb')
|
||||
shutil.copyfileobj(src, outfile, 10*1024*1024)
|
||||
|
||||
def put_file(self, infile, path, replace_file=False, end_session=True):
|
||||
path = self.munge_path(path)
|
||||
if os.path.isdir(path):
|
||||
path = os.path.join(path, infile.name)
|
||||
if not replace_file and os.path.exists(path):
|
||||
raise PathError('File already exists: ' + path)
|
||||
dest = open(path, 'wb')
|
||||
shutil.copyfileobj(infile, dest, 10*1024*1024)
|
||||
dest.flush()
|
||||
dest.close()
|
||||
|
||||
def munge_path(self, path):
|
||||
if path.startswith('/') and not (path.startswith(self._main_prefix) or \
|
||||
(self._card_prefix and path.startswith(self._card_prefix))):
|
||||
@ -157,6 +169,34 @@ class USBMS(Device):
|
||||
path = path.replace('card:', self._card_prefix[:-1])
|
||||
return path
|
||||
|
||||
def list(self, path, recurse=False, end_session=True, munge=True):
|
||||
if munge:
|
||||
path = self.munge_path(path)
|
||||
if os.path.isfile(path):
|
||||
return [(os.path.dirname(path), [File(path)])]
|
||||
entries = [File(os.path.join(path, f)) for f in os.listdir(path)]
|
||||
dirs = [(path, entries)]
|
||||
for _file in entries:
|
||||
if recurse and _file.is_dir:
|
||||
dirs[len(dirs):] = self.list(_file.path, recurse=True, munge=False)
|
||||
return dirs
|
||||
|
||||
def mkdir(self, path, end_session=True):
|
||||
if self.SUPPORTS_SUB_DIRS:
|
||||
path = self.munge_path(path)
|
||||
os.mkdir(path)
|
||||
|
||||
def rm(self, path, end_session=True):
|
||||
path = self.munge_path(path)
|
||||
self.delete_books([path])
|
||||
|
||||
def touch(self, path, end_session=True):
|
||||
path = self.munge_path(path)
|
||||
if not os.path.exists(path):
|
||||
open(path, 'w').close()
|
||||
if not os.path.isdir(path):
|
||||
os.utime(path, None)
|
||||
|
||||
@classmethod
|
||||
def extract_book_metadata_by_filename(cls, filename):
|
||||
book_title = ''
|
||||
@ -183,5 +223,3 @@ class USBMS(Device):
|
||||
|
||||
return book_title, book_author, book_mime
|
||||
|
||||
# ls, rm, cp, mkdir, touch, cat
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user