From ded402c0811725ee84b3a937ce5d8848e1b02fbe Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Thu, 17 Feb 2011 12:15:13 +0000 Subject: [PATCH] Add custom cols to the content server active link code. In the process, fix a problem where grouped search term user categories were not in the content server's field_metadata. --- src/calibre/gui2/tag_view.py | 10 +++++++--- src/calibre/library/database2.py | 17 ++++++++++++++--- src/calibre/library/server/browse.py | 4 +++- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/calibre/gui2/tag_view.py b/src/calibre/gui2/tag_view.py index 6b5de37bbe..c2b0e4638b 100644 --- a/src/calibre/gui2/tag_view.py +++ b/src/calibre/gui2/tag_view.py @@ -7,6 +7,8 @@ __docformat__ = 'restructuredtext en' Browsing book collection by tags. ''' +import traceback + from itertools import izip from functools import partial @@ -755,13 +757,15 @@ class TagsModel(QAbstractItemModel): # {{{ try: tb_cats.add_user_category(label=cat_name, name=user_cat) except ValueError: - import traceback traceback.print_exc() - for cat in sorted(self.db.prefs.get('grouped_search_terms', {}), + for cat in sorted(self.db.prefs.get('grouped_search_terms', {}).keys(), key=sort_key): if (u'@' + cat) in data: - tb_cats.add_user_category(label=u'@' + cat, name=cat) + try: + tb_cats.add_user_category(label=u'@' + cat, name=cat) + except ValueError: + traceback.print_exc() self.db.data.change_search_locations(self.db.field_metadata.get_search_terms()) if len(saved_searches().names()): diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index 33826419e4..305d1581d7 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -353,12 +353,23 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): # Reconstruct the user categories, putting them into field_metadata # Assumption is that someone else will fix them if they change. self.field_metadata.remove_dynamic_categories() - tb_cats = self.field_metadata for user_cat in sorted(self.prefs.get('user_categories', {}).keys(), key=sort_key): cat_name = '@' + user_cat # add the '@' to avoid name collision - tb_cats.add_user_category(label=cat_name, name=user_cat) + self.field_metadata.add_user_category(label=cat_name, name=user_cat) + + # add grouped search term user categories + muc = self.prefs.get('grouped_search_make_user_categories', []) + for cat in sorted(self.prefs.get('grouped_search_terms', {}).keys(), key=sort_key): + if cat in muc: + # There is a chance that these can be duplicates of an existing + # user category. Print the exception and continue. + try: + self.field_metadata.add_user_category(label=u'@' + cat, name=cat) + except: + traceback.print_exc() + if len(saved_searches().names()): - tb_cats.add_search_category(label='search', name=_('Searches')) + self.field_metadata.add_search_category(label='search', name=_('Searches')) self.field_metadata.add_grouped_search_terms( self.prefs.get('grouped_search_terms', {})) diff --git a/src/calibre/library/server/browse.py b/src/calibre/library/server/browse.py index 2749f0651f..5415cfe8bb 100644 --- a/src/calibre/library/server/browse.py +++ b/src/calibre/library/server/browse.py @@ -603,7 +603,9 @@ class BrowseServer(object): val = '' if add_category_links: added_key = False - if val and key in ('authors', 'publisher', 'series', 'tags'): + fm = mi.metadata_for_field(key) + if val and fm and fm['is_category'] and \ + key != 'formats' and fm['datatype'] not in ['rating']: categories = mi.get(key) if isinstance(categories, basestring): categories = [categories]