diff --git a/src/calibre/db/cache.py b/src/calibre/db/cache.py index 6bd7c1a3cf..5c0a7fda59 100644 --- a/src/calibre/db/cache.py +++ b/src/calibre/db/cache.py @@ -792,6 +792,7 @@ class Cache(object): ''' all_book_ids = frozenset(self._all_book_ids() if ids_to_sort is None else ids_to_sort) + ids_to_sort = all_book_ids if ids_to_sort is None else ids_to_sort get_metadata = self._get_proxy_metadata lang_map = self.fields['languages'].book_value_map virtual_fields = virtual_fields or {} @@ -818,10 +819,10 @@ class Cache(object): if len(sort_keys) == 1: sk = sort_keys[0] - return sorted(all_book_ids, key=lambda i:sk[i], reverse=not + return sorted(ids_to_sort, key=lambda i:sk[i], reverse=not fields[0][1]) else: - return sorted(all_book_ids, key=partial(SortKey, fields, sort_keys)) + return sorted(ids_to_sort, key=partial(SortKey, fields, sort_keys)) @read_api def search(self, query, restriction='', virtual_fields=None, book_ids=None): diff --git a/src/calibre/db/view.py b/src/calibre/db/view.py index 0e8d4081e5..2a578215ce 100644 --- a/src/calibre/db/view.py +++ b/src/calibre/db/view.py @@ -222,7 +222,9 @@ class View(object): if not fields: fields = [('timestamp', False)] - sorted_book_ids = self.cache.multisort(fields, ids_to_sort=only_ids, virtual_fields={'marked':MarkedVirtualField(self.marked_ids)}) + sorted_book_ids = self.cache.multisort( + fields, ids_to_sort=self._map if only_ids is None else only_ids, + virtual_fields={'marked':MarkedVirtualField(self.marked_ids)}) if only_ids is None: self._map = tuple(sorted_book_ids) if len(self._map_filtered) == len(self._map):