From c18b9593cb52c4639818630df81b041a9354323e Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 1 Nov 2014 22:35:59 +0530 Subject: [PATCH] Improve performance of get_categoris by using ProxyMetadata objects --- src/calibre/db/categories.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/calibre/db/categories.py b/src/calibre/db/categories.py index c86801f086..505099b78e 100644 --- a/src/calibre/db/categories.py +++ b/src/calibre/db/categories.py @@ -140,7 +140,14 @@ def get_categories(dbcache, sort='name', book_ids=None, icon_map=None): categories = {} book_ids = frozenset(book_ids) if book_ids else book_ids - get_metadata = partial(dbcache._get_metadata, get_user_categories=False) + pm_cache = {} + + def get_metadata(book_id): + ans = pm_cache.get(book_id) + if ans is None: + ans = pm_cache[book_id] = dbcache._get_proxy_metadata(book_id) + return ans + bids = None for category, is_multiple, is_composite in find_categories(fm): @@ -227,7 +234,7 @@ def get_categories(dbcache, sort='name', book_ids=None, icon_map=None): icon_map[cat_name] = icon_map['user:'] categories[cat_name] = sort_categories(items, sort) - #### Finally, the saved searches category #### + # ### Finally, the saved searches category #### items = [] icon = None if icon_map and 'search' in icon_map: