mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 18:54:09 -04:00
Nocer handling od db read locking while rendering tag browser
This commit is contained in:
parent
4f601b23df
commit
d92200eaba
@ -137,8 +137,7 @@ class Context(object):
|
||||
old = cache.pop(key, None)
|
||||
if old is None or old[0] <= db.last_modified():
|
||||
categories = db.get_categories(book_ids=restrict_to_ids, sort=opts.sort_by, first_letter_sort=opts.collapse_model == 'first letter')
|
||||
with db.safe_read_lock:
|
||||
cache[key] = old = (utcnow(), render(categories))
|
||||
cache[key] = old = (utcnow(), render(db, categories))
|
||||
if len(cache) > self.CATEGORY_CACHE_SIZE:
|
||||
cache.popitem(last=False)
|
||||
else:
|
||||
|
@ -461,10 +461,11 @@ def fillout_tree(root, items, node_id_map, category_nodes, category_data, field_
|
||||
item = items[node['id']]
|
||||
item['count'] = sum(1 for _ in iternode_descendants(node))
|
||||
|
||||
def render_categories(field_metadata, opts, book_rating_map, category_data):
|
||||
def render_categories(opts, db, category_data):
|
||||
items = {}
|
||||
root, node_id_map, category_nodes, recount_nodes = create_toplevel_tree(category_data, items, field_metadata, opts)
|
||||
fillout_tree(root, items, node_id_map, category_nodes, category_data, field_metadata, opts, book_rating_map)
|
||||
with db.safe_read_lock:
|
||||
root, node_id_map, category_nodes, recount_nodes = create_toplevel_tree(category_data, items, db.field_metadata, opts)
|
||||
fillout_tree(root, items, node_id_map, category_nodes, category_data, db.field_metadata, opts, db.fields['rating'].book_value_map)
|
||||
for node in recount_nodes:
|
||||
item = items[node['id']]
|
||||
item['count'] = sum(1 for x in iternode_descendants(node) if not items[x['id']].get('is_category', False))
|
||||
@ -476,7 +477,7 @@ def render_categories(field_metadata, opts, book_rating_map, category_data):
|
||||
|
||||
def categories_as_json(ctx, rd, db):
|
||||
opts = categories_settings(rd.query, db)
|
||||
return ctx.get_tag_browser(rd, db, opts, partial(render_categories, db.field_metadata, opts, db.fields['rating'].book_value_map))
|
||||
return ctx.get_tag_browser(rd, db, opts, partial(render_categories, opts))
|
||||
|
||||
# Test tag browser {{{
|
||||
|
||||
@ -521,7 +522,7 @@ def test_tag_browser(library_path=None):
|
||||
opts = categories_settings({}, db)
|
||||
# opts = opts._replace(hidden_categories={'publisher'})
|
||||
category_data = db.get_categories(sort=opts.sort_by, first_letter_sort=opts.collapse_model == 'first letter')
|
||||
data = render_categories(db.field_metadata, opts, db.fields['rating'].book_value_map, category_data)
|
||||
data = render_categories(opts, db, category_data)
|
||||
srv_data = dump_categories_tree(data)
|
||||
from calibre.gui2 import Application, gprefs
|
||||
from calibre.gui2.tag_browser.model import TagsModel
|
||||
|
Loading…
x
Reference in New Issue
Block a user