mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
newdb: Fix sorting of view not stable
This commit is contained in:
parent
99d9db82f7
commit
f731f2803b
@ -792,6 +792,7 @@ class Cache(object):
|
|||||||
'''
|
'''
|
||||||
all_book_ids = frozenset(self._all_book_ids() if ids_to_sort is None
|
all_book_ids = frozenset(self._all_book_ids() if ids_to_sort is None
|
||||||
else ids_to_sort)
|
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
|
get_metadata = self._get_proxy_metadata
|
||||||
lang_map = self.fields['languages'].book_value_map
|
lang_map = self.fields['languages'].book_value_map
|
||||||
virtual_fields = virtual_fields or {}
|
virtual_fields = virtual_fields or {}
|
||||||
@ -818,10 +819,10 @@ class Cache(object):
|
|||||||
|
|
||||||
if len(sort_keys) == 1:
|
if len(sort_keys) == 1:
|
||||||
sk = sort_keys[0]
|
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])
|
fields[0][1])
|
||||||
else:
|
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
|
@read_api
|
||||||
def search(self, query, restriction='', virtual_fields=None, book_ids=None):
|
def search(self, query, restriction='', virtual_fields=None, book_ids=None):
|
||||||
|
@ -222,7 +222,9 @@ class View(object):
|
|||||||
if not fields:
|
if not fields:
|
||||||
fields = [('timestamp', False)]
|
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:
|
if only_ids is None:
|
||||||
self._map = tuple(sorted_book_ids)
|
self._map = tuple(sorted_book_ids)
|
||||||
if len(self._map_filtered) == len(self._map):
|
if len(self._map_filtered) == len(self._map):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user