From 3f50c415c403383f088ecb49385e5f9586955ebd Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 3 Sep 2011 08:52:30 -0600 Subject: [PATCH] ... --- src/calibre/db/cache.py | 5 +++-- src/calibre/db/fields.py | 14 ++++++-------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/calibre/db/cache.py b/src/calibre/db/cache.py index 7158fc0267..01e97bb4c3 100644 --- a/src/calibre/db/cache.py +++ b/src/calibre/db/cache.py @@ -347,8 +347,9 @@ class Cache(object): as_path=as_path) @read_api - def multisort(self, fields): - all_book_ids = frozenset(self._all_book_ids()) + def multisort(self, fields, ids_to_sort=None): + all_book_ids = frozenset(self._all_book_ids() if ids_to_sort is None + else ids_to_sort) get_metadata = partial(self._get_metadata, get_user_categories=False) sort_keys = tuple(self.fields[field[0]].sort_keys_for_books(get_metadata, diff --git a/src/calibre/db/fields.py b/src/calibre/db/fields.py index 7fd19501ce..0a497555c4 100644 --- a/src/calibre/db/fields.py +++ b/src/calibre/db/fields.py @@ -51,9 +51,13 @@ class Field(object): def __iter__(self): ''' - Iterate over the ids for all values in this field + Iterate over the ids for all values in this field. + + WARNING: Some fields such as composite fields and virtual + fields like ondevice do not have ids for their values, in such + cases this is an empty iterator. ''' - raise NotImplementedError() + return iter(()) def sort_keys_for_books(self, get_metadata, all_book_ids): ''' @@ -78,9 +82,6 @@ class OneToOneField(Field): def __iter__(self): return self.table.book_col_map.iterkeys() - def iter_book_ids(self): - return self.table.book_col_map.iterkeys() - def sort_keys_for_books(self, get_metadata, all_book_ids): return {id_ : self._sort_key(self.book_col_map.get(id_, '')) for id_ in all_book_ids} @@ -154,9 +155,6 @@ class OnDeviceField(OneToOneField): def __iter__(self): return iter(()) - def iter_book_ids(self): - return iter(()) - def sort_keys_for_books(self, get_metadata, all_book_ids): return {id_ : self.for_book(id_) for id_ in all_book_ids}