From b656e8968c7896274066acbae5f57f3cb26cfc90 Mon Sep 17 00:00:00 2001 From: John Schember Date: Wed, 14 Jan 2009 07:36:07 -0500 Subject: [PATCH 1/2] --- src/calibre/devices/usbms/driver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/devices/usbms/driver.py b/src/calibre/devices/usbms/driver.py index 7e5706f4ea..31dc1b37c5 100644 --- a/src/calibre/devices/usbms/driver.py +++ b/src/calibre/devices/usbms/driver.py @@ -77,7 +77,7 @@ class USBMS(Device): return zip(paths, cycle([on_card])) @classmethod - def add_books_to_metadata(cls, locations, metadata, booklists): + def add_books_to_metadata(cls, locations, metadata, booklists): for location in locations: path = location[0] on_card = 1 if location[1] else 0 From 2afb87843ab29c56f2cd5f53bdaefd33c6abd50e Mon Sep 17 00:00:00 2001 From: John Schember Date: Wed, 14 Jan 2009 08:26:46 -0500 Subject: [PATCH 2/2] Cybook: upload file objects (news) to device --- src/calibre/devices/usbms/driver.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/calibre/devices/usbms/driver.py b/src/calibre/devices/usbms/driver.py index 31dc1b37c5..df01fb78d3 100644 --- a/src/calibre/devices/usbms/driver.py +++ b/src/calibre/devices/usbms/driver.py @@ -56,10 +56,18 @@ class USBMS(Device): path = os.path.join(self._main_prefix, self.EBOOK_DIR_MAIN) else: path = os.path.join(self._card_prefix, self.EBOOK_DIR_CARD) - - sizes = map(os.path.getsize, files) + + def get_size(obj): + if hasattr(obj, 'seek'): + obj.seek(0, os.SEEK_END) + size = obj.tell() + obj.seek(0) + return size + return os.path.getsize(obj) + + sizes = map(get_size, files) size = sum(sizes) - + if on_card and size > self.free_space()[2] - 1024*1024: raise FreeSpaceError(_("There is insufficient free space on the storage card")) if not on_card and size > self.free_space()[0] - 2*1024*1024: @@ -72,7 +80,16 @@ class USBMS(Device): filepath = os.path.join(path, names.next()) paths.append(filepath) - shutil.copy2(infile, filepath) + if hasattr(infile, 'read'): + infile.seek(0) + + dest = open(filepath, 'wb') + shutil.copyfileobj(infile, dest, 10*1024*1024) + + dest.flush() + dest.close() + else: + shutil.copy2(infile, filepath) return zip(paths, cycle([on_card]))