mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 10:14:46 -04:00
SONY driver: Add a couple of special extra collections for all books by author and all books by title, to workaround the broken sorting on newer SONY models. To enable these collections, go to Preferences->Plugins->Device Interface plugins and customize the SONY plugin.
This commit is contained in:
commit
016ba99edf
@ -58,9 +58,16 @@ class PRS505(USBMS):
|
||||
SUPPORTS_USE_AUTHOR_SORT = True
|
||||
EBOOK_DIR_MAIN = 'database/media/books'
|
||||
|
||||
ALL_BY_TITLE = _('All by title')
|
||||
ALL_BY_AUTHOR = _('All by author')
|
||||
|
||||
EXTRA_CUSTOMIZATION_MESSAGE = _('Comma separated list of metadata fields '
|
||||
'to turn into collections on the device. Possibilities include: ')+\
|
||||
'series, tags, authors'
|
||||
'series, tags, authors' +\
|
||||
_('. Two special collections are available: %s:%s and %s:%s. Add '
|
||||
'these values to the list to enable them. The collections will be '
|
||||
'given the name provided after the ":" character.')%(
|
||||
'abt', ALL_BY_TITLE, 'aba', ALL_BY_AUTHOR)
|
||||
EXTRA_CUSTOMIZATION_DEFAULT = ', '.join(['series', 'tags'])
|
||||
|
||||
plugboard = None
|
||||
@ -151,7 +158,7 @@ class PRS505(USBMS):
|
||||
blists[i] = booklists[i]
|
||||
opts = self.settings()
|
||||
if opts.extra_customization:
|
||||
collections = [x.lower().strip() for x in
|
||||
collections = [x.strip() for x in
|
||||
opts.extra_customization.split(',')]
|
||||
else:
|
||||
collections = []
|
||||
|
@ -410,6 +410,9 @@ class XMLCache(object):
|
||||
newmi = book.deepcopy_metadata()
|
||||
newmi.template_to_attribute(book, plugboard)
|
||||
newmi.set('_new_book', getattr(book, '_new_book', False))
|
||||
book.set('_pb_title_sort',
|
||||
newmi.get('title_sort', newmi.get('title', None)))
|
||||
book.set('_pb_author_sort', newmi.get('author_sort', ''))
|
||||
else:
|
||||
newmi = book
|
||||
(gtz_count, ltz_count, use_tz_var) = \
|
||||
|
@ -132,9 +132,24 @@ class CollectionsBookList(BookList):
|
||||
use_renaming_rules = prefs['manage_device_metadata'] == 'on_connect'
|
||||
|
||||
collections = {}
|
||||
# This map of sets is used to avoid linear searches when testing for
|
||||
# book equality
|
||||
|
||||
# get the special collection names
|
||||
all_by_author = ''
|
||||
all_by_title = ''
|
||||
ca = []
|
||||
for c in collection_attributes:
|
||||
if c.startswith('aba:') and c[4:]:
|
||||
all_by_author = c[4:]
|
||||
elif c.startswith('abt:') and c[4:]:
|
||||
all_by_title = c[4:]
|
||||
else:
|
||||
ca.append(c.lower())
|
||||
collection_attributes = ca
|
||||
|
||||
for book in self:
|
||||
tsval = book.get('_pb_title_sort',
|
||||
book.get('title_sort', book.get('title', 'zzzz')))
|
||||
asval = book.get('_pb_author_sort', book.get('author_sort', ''))
|
||||
# Make sure we can identify this book via the lpath
|
||||
lpath = getattr(book, 'lpath', None)
|
||||
if lpath is None:
|
||||
@ -211,22 +226,29 @@ class CollectionsBookList(BookList):
|
||||
collections[cat_name] = {}
|
||||
if use_renaming_rules and sort_attr:
|
||||
sort_val = book.get(sort_attr, None)
|
||||
collections[cat_name][lpath] = \
|
||||
(book, sort_val, book.get('title_sort', 'zzzz'))
|
||||
collections[cat_name][lpath] = (book, sort_val, tsval)
|
||||
elif is_series:
|
||||
if doing_dc:
|
||||
collections[cat_name][lpath] = \
|
||||
(book, book.get('series_index', sys.maxint),
|
||||
book.get('title_sort', 'zzzz'))
|
||||
(book, book.get('series_index', sys.maxint), tsval)
|
||||
else:
|
||||
collections[cat_name][lpath] = \
|
||||
(book, book.get(attr+'_index', sys.maxint),
|
||||
book.get('title_sort', 'zzzz'))
|
||||
(book, book.get(attr+'_index', sys.maxint), tsval)
|
||||
else:
|
||||
if lpath not in collections[cat_name]:
|
||||
collections[cat_name][lpath] = \
|
||||
(book, book.get('title_sort', 'zzzz'),
|
||||
book.get('title_sort', 'zzzz'))
|
||||
collections[cat_name][lpath] = (book, tsval, tsval)
|
||||
|
||||
# All books by author
|
||||
if all_by_author:
|
||||
if all_by_author not in collections:
|
||||
collections[all_by_author] = {}
|
||||
collections[all_by_author][lpath] = (book, asval, tsval)
|
||||
# All books by title
|
||||
if all_by_title:
|
||||
if all_by_title not in collections:
|
||||
collections[all_by_title] = {}
|
||||
collections[all_by_title][lpath] = (book, tsval, asval)
|
||||
|
||||
# Sort collections
|
||||
result = {}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user