mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Ensure that removing books does not cause errors when updating search
caches
This commit is contained in:
parent
474abe15c2
commit
114e5cf3a7
@ -154,7 +154,7 @@ class Cache(object):
|
|||||||
self._search_api.update_or_clear(self, book_ids)
|
self._search_api.update_or_clear(self, book_ids)
|
||||||
|
|
||||||
@write_api
|
@write_api
|
||||||
def clear_caches(self, book_ids=None, template_cache=True):
|
def clear_caches(self, book_ids=None, template_cache=True, search_cache=True):
|
||||||
if template_cache:
|
if template_cache:
|
||||||
self._initialize_template_cache() # Clear the formatter template cache
|
self._initialize_template_cache() # Clear the formatter template cache
|
||||||
for field in self.fields.itervalues():
|
for field in self.fields.itervalues():
|
||||||
@ -165,6 +165,7 @@ class Cache(object):
|
|||||||
self.format_metadata_cache.pop(book_id, None)
|
self.format_metadata_cache.pop(book_id, None)
|
||||||
else:
|
else:
|
||||||
self.format_metadata_cache.clear()
|
self.format_metadata_cache.clear()
|
||||||
|
if search_cache:
|
||||||
self._clear_search_caches(book_ids)
|
self._clear_search_caches(book_ids)
|
||||||
|
|
||||||
@write_api
|
@write_api
|
||||||
@ -1303,7 +1304,8 @@ class Cache(object):
|
|||||||
continue # Some fields like ondevice do not have tables
|
continue # Some fields like ondevice do not have tables
|
||||||
else:
|
else:
|
||||||
table.remove_books(book_ids, self.backend)
|
table.remove_books(book_ids, self.backend)
|
||||||
self._clear_caches(book_ids=book_ids, template_cache=False)
|
self._search_api.discard_books(book_ids)
|
||||||
|
self._clear_caches(book_ids=book_ids, template_cache=False, search_cache=False)
|
||||||
|
|
||||||
@read_api
|
@read_api
|
||||||
def author_sort_strings_for_books(self, book_ids):
|
def author_sort_strings_for_books(self, book_ids):
|
||||||
|
@ -808,6 +808,11 @@ class Search(object):
|
|||||||
finally:
|
finally:
|
||||||
sqp.dbcache = sqp.lookup_saved_search = None
|
sqp.dbcache = sqp.lookup_saved_search = None
|
||||||
|
|
||||||
|
def discard_books(self, book_ids):
|
||||||
|
book_ids = set(book_ids)
|
||||||
|
for query, result in self.cache:
|
||||||
|
result.difference_update(book_ids)
|
||||||
|
|
||||||
def _update_caches(self, sqp, book_ids):
|
def _update_caches(self, sqp, book_ids):
|
||||||
book_ids = sqp.all_book_ids = set(book_ids)
|
book_ids = sqp.all_book_ids = set(book_ids)
|
||||||
remove = set()
|
remove = set()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user