From efe64efe2559897aea789fa0b1974472b0a54b3d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 10 Jun 2010 22:44:08 -0600 Subject: [PATCH] Fix #5779 (Check database integrity is broken in 0.7 w/custom fields) --- src/calibre/gui2/tag_view.py | 3 ++- src/calibre/library/database2.py | 2 ++ src/calibre/library/field_metadata.py | 11 +++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/tag_view.py b/src/calibre/gui2/tag_view.py index fe7f4348f8..bc698a3502 100644 --- a/src/calibre/gui2/tag_view.py +++ b/src/calibre/gui2/tag_view.py @@ -609,7 +609,8 @@ class TagBrowserMixin(object): # {{{ self.tags_view.saved_search_edit.connect(self.do_saved_search_edit) self.tags_view.tag_item_renamed.connect(self.do_tag_item_renamed) self.tags_view.search_item_renamed.connect(self.saved_search.clear_to_help) - self.edit_categories.clicked.connect(self.do_user_categories_edit) + self.edit_categories.clicked.connect(lambda x: + self.do_user_categories_edit()) def do_user_categories_edit(self, on_category=None): d = TagCategories(self, self.library_view.model().db, on_category) diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index 0168737fca..7b98dc4537 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -1842,6 +1842,8 @@ books_series_link feeds os.remove(self.dbpath) shutil.copyfile(dest, self.dbpath) self.connect() + self.field_metadata.remove_dynamic_categories() + self.field_metadata.remove_custom_fields() self.initialize_dynamic() self.refresh() if os.path.exists(dest): diff --git a/src/calibre/library/field_metadata.py b/src/calibre/library/field_metadata.py index 243e3646da..82e4edfdf2 100644 --- a/src/calibre/library/field_metadata.py +++ b/src/calibre/library/field_metadata.py @@ -379,6 +379,17 @@ class FieldMetadata(dict): self._add_search_terms_to_map(key, [key]) self.custom_label_to_key_map[label] = key + def remove_custom_fields(self): + for key in self.get_custom_fields(): + del self._tb_cats[key] + + def remove_dynamic_categories(self): + for key in list(self._tb_cats.keys()): + val = self._tb_cats[key] + if val['is_category'] and val['kind'] in ('user', 'search'): + del self._tb_cats[key] + + def add_user_category(self, label, name): if label in self._tb_cats: raise ValueError('Duplicate user field [%s]'%(label))