From fc7baaabd9a71f8d1e01fa0998d918d9cda54d03 Mon Sep 17 00:00:00 2001 From: John Schember Date: Mon, 4 Jan 2010 20:35:52 -0500 Subject: [PATCH 1/4] Implement bug #4423: Sony Reader user defined collections from metdata. --- src/calibre/devices/prs505/books.py | 16 +++++++++++----- src/calibre/devices/prs505/driver.py | 7 ++++++- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/calibre/devices/prs505/books.py b/src/calibre/devices/prs505/books.py index 227356bda9..8f054a1144 100644 --- a/src/calibre/devices/prs505/books.py +++ b/src/calibre/devices/prs505/books.py @@ -180,7 +180,7 @@ class BookList(_BookList): return child return None - def add_book(self, mi, name, size, ctime): + def add_book(self, mi, name, collections, size, ctime): """ Add a node into the DOM tree, representing a book """ book = self.book_by_path(name) if book is not None: @@ -221,12 +221,18 @@ class BookList(_BookList): book = Book(node, self.mountpath, [], prefix=self.prefix) book.datetime = ctime self.append(book) + tags = [] - if mi.tags: - tags.extend(mi.tags) - if mi.series: - tags.append(mi.series) + for item in collections: + item = item.strip() + mitem = getattr(mi, item, None) + if mitem: + if isinstance(mitem, list): + tags.extend(mitem) + else: + tags.append(mitem) if tags: + tags = list(set(tags)) if hasattr(mi, 'tag_order'): self.tag_order.update(mi.tag_order) self.set_tags(book, tags) diff --git a/src/calibre/devices/prs505/driver.py b/src/calibre/devices/prs505/driver.py index aaf175503f..e79dac3e51 100644 --- a/src/calibre/devices/prs505/driver.py +++ b/src/calibre/devices/prs505/driver.py @@ -55,6 +55,10 @@ class PRS505(CLI, Device): MUST_READ_METADATA = True EBOOK_DIR_MAIN = 'database/media/books' + EXTRA_CUSTOMIZATION_MESSAGE = _('Comma separated list of metadata fields ' + 'to turn into collections on the device.') + EXTRA_CUSTOMIZATION_DEFAULT = ', '.join(['series', 'tags']) + def windows_filter_pnp_id(self, pnp_id): return '_LAUNCHER' in pnp_id @@ -159,7 +163,8 @@ class PRS505(CLI, Device): if name.startswith('/'): name = name[1:] - booklists[blist].add_book(info, name, *location[1:-1]) + opts = self.settings() + booklists[blist].add_book(info, name, opts.extra_customization.split(','), *location[1:-1]) fix_ids(*booklists) def delete_books(self, paths, end_session=True): From 1cd9cfb6be59b3b27de87c0c293a0f0f01939302 Mon Sep 17 00:00:00 2001 From: John Schember Date: Mon, 4 Jan 2010 20:38:04 -0500 Subject: [PATCH 2/4] ConfigWidget: Display extra_customization set by user not the default. --- src/calibre/gui2/device_drivers/configwidget.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/calibre/gui2/device_drivers/configwidget.py b/src/calibre/gui2/device_drivers/configwidget.py index cb821d89b9..6eb6e1226d 100644 --- a/src/calibre/gui2/device_drivers/configwidget.py +++ b/src/calibre/gui2/device_drivers/configwidget.py @@ -11,8 +11,7 @@ from calibre.gui2.device_drivers.configwidget_ui import Ui_ConfigWidget class ConfigWidget(QWidget, Ui_ConfigWidget): def __init__(self, settings, all_formats, supports_subdirs, - must_read_metadata, extra_customization_message, - extra_customization_value): + must_read_metadata, extra_customization_message): QWidget.__init__(self) Ui_ConfigWidget.__init__(self) @@ -41,8 +40,7 @@ class ConfigWidget(QWidget, Ui_ConfigWidget): self.opt_read_metadata.hide() if extra_customization_message: self.extra_customization_label.setText(extra_customization_message) - if extra_customization_value: - self.opt_extra_customization.setText(extra_customization_value) + self.opt_extra_customization.setText(settings.extra_customization) else: self.extra_customization_label.setVisible(False) self.opt_extra_customization.setVisible(False) From 396fc9b62ae20f904a86a29c2c040a560c0b56fb Mon Sep 17 00:00:00 2001 From: John Schember Date: Mon, 4 Jan 2010 20:41:03 -0500 Subject: [PATCH 3/4] ... --- src/calibre/devices/usbms/deviceconfig.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/calibre/devices/usbms/deviceconfig.py b/src/calibre/devices/usbms/deviceconfig.py index 96477dbece..4e632433b8 100644 --- a/src/calibre/devices/usbms/deviceconfig.py +++ b/src/calibre/devices/usbms/deviceconfig.py @@ -47,8 +47,7 @@ class DeviceConfig(object): def config_widget(cls): from calibre.gui2.device_drivers.configwidget import ConfigWidget cw = ConfigWidget(cls.settings(), cls.FORMATS, cls.SUPPORTS_SUB_DIRS, - cls.MUST_READ_METADATA, cls.EXTRA_CUSTOMIZATION_MESSAGE, - cls.EXTRA_CUSTOMIZATION_DEFAULT) + cls.MUST_READ_METADATA, cls.EXTRA_CUSTOMIZATION_MESSAGE) return cw @classmethod From 7f9b536c8a6a46b92a8cc98203f8cdc7cefcffd4 Mon Sep 17 00:00:00 2001 From: John Schember Date: Mon, 4 Jan 2010 20:44:03 -0500 Subject: [PATCH 4/4] Sony Reader Driver: Add authors to collection generation defaults. --- src/calibre/devices/prs505/driver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/devices/prs505/driver.py b/src/calibre/devices/prs505/driver.py index e79dac3e51..acaf1e6267 100644 --- a/src/calibre/devices/prs505/driver.py +++ b/src/calibre/devices/prs505/driver.py @@ -57,7 +57,7 @@ class PRS505(CLI, Device): EXTRA_CUSTOMIZATION_MESSAGE = _('Comma separated list of metadata fields ' 'to turn into collections on the device.') - EXTRA_CUSTOMIZATION_DEFAULT = ', '.join(['series', 'tags']) + EXTRA_CUSTOMIZATION_DEFAULT = ', '.join(['series', 'tags', 'authors']) def windows_filter_pnp_id(self, pnp_id): return '_LAUNCHER' in pnp_id