From fc7baaabd9a71f8d1e01fa0998d918d9cda54d03 Mon Sep 17 00:00:00 2001 From: John Schember Date: Mon, 4 Jan 2010 20:35:52 -0500 Subject: [PATCH] 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):