From 8a0b3c1ffc69bc710eedcf4d7b6e1be996e33963 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Fri, 18 Mar 2011 09:39:44 +0000 Subject: [PATCH 1/3] Add option to show composite columns in the tag browser --- .../gui2/preferences/create_custom_column.py | 8 +++-- .../gui2/preferences/create_custom_column.ui | 32 +++++++++++------ src/calibre/library/database2.py | 35 ++++++++++++++++--- src/calibre/library/server/browse.py | 2 ++ 4 files changed, 59 insertions(+), 18 deletions(-) diff --git a/src/calibre/gui2/preferences/create_custom_column.py b/src/calibre/gui2/preferences/create_custom_column.py index 8909bc7b3d..cee34f150e 100644 --- a/src/calibre/gui2/preferences/create_custom_column.py +++ b/src/calibre/gui2/preferences/create_custom_column.py @@ -118,6 +118,8 @@ class CreateCustomColumn(QDialog, Ui_QCreateCustomColumn): else: sb = 0 self.composite_sort_by.setCurrentIndex(sb) + self.composite_make_category.setChecked( + c['display'].get('make_category', False)) elif ct == 'enumeration': self.enum_box.setText(','.join(c['display'].get('enum_values', []))) self.datatype_changed() @@ -159,7 +161,8 @@ class CreateCustomColumn(QDialog, Ui_QCreateCustomColumn): col_type = None for x in ('box', 'default_label', 'label'): getattr(self, 'date_format_'+x).setVisible(col_type == 'datetime') - for x in ('box', 'default_label', 'label', 'sort_by', 'sort_by_label'): + for x in ('box', 'default_label', 'label', 'sort_by', 'sort_by_label', + 'make_category'): getattr(self, 'composite_'+x).setVisible(col_type == 'composite') for x in ('box', 'default_label', 'label'): getattr(self, 'enum_'+x).setVisible(col_type == 'enumeration') @@ -222,7 +225,8 @@ class CreateCustomColumn(QDialog, Ui_QCreateCustomColumn): ' composite columns')) display_dict = {'composite_template':unicode(self.composite_box.text()).strip(), 'composite_sort': ['text', 'number', 'date', 'bool'] - [self.composite_sort_by.currentIndex()] + [self.composite_sort_by.currentIndex()], + 'make_category': self.composite_make_category.isChecked(), } elif col_type == 'enumeration': if not unicode(self.enum_box.text()).strip(): diff --git a/src/calibre/gui2/preferences/create_custom_column.ui b/src/calibre/gui2/preferences/create_custom_column.ui index aaa69f5e4b..3290d3c846 100644 --- a/src/calibre/gui2/preferences/create_custom_column.ui +++ b/src/calibre/gui2/preferences/create_custom_column.ui @@ -220,18 +220,18 @@ Everything else will show nothing. - - - - &Sort/search column by - - - composite_sort_by - - - - + + + + + &Sort/search column by + + + composite_sort_by + + + @@ -239,6 +239,16 @@ Everything else will show nothing. + + + + Show in tags browser + + + If checked, this column will appear in the tags browser as a category + + + diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index ec766c72f3..50a0ba98dd 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -1210,6 +1210,13 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): return ans field = self.field_metadata[category] + if field['datatype'] == 'composite': + dex = field['rec_index'] + for book in self.data.iterall(): + if book[dex] == id_: + ans.add(book[0]) + return ans + ans = self.conn.get( 'SELECT book FROM books_{tn}_link WHERE {col}=?'.format( tn=field['table'], col=field['link_column']), (id_,)) @@ -1281,7 +1288,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): # First, build the maps. We need a category->items map and an # item -> (item_id, sort_val) map to use in the books loop - for category in tb_cats.keys(): + for category in tb_cats.iterkeys(): cat = tb_cats[category] if not cat['is_category'] or cat['kind'] in ['user', 'search'] \ or category in ['news', 'formats'] or cat.get('is_csp', @@ -1324,8 +1331,15 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): tcategories[category] = {} # create a list of category/field_index for the books scan to use. # This saves iterating through field_metadata for each book - md.append((category, cat['rec_index'], cat['is_multiple'])) + md.append((category, cat['rec_index'], cat['is_multiple'], False)) + for category in tb_cats.iterkeys(): + cat = tb_cats[category] + if cat['datatype'] == 'composite' and \ + cat['display'].get('make_category', False): + tcategories[category] = {} + md.append((category, cat['rec_index'], cat['is_multiple'], + cat['datatype'] == 'composite')) #print 'end phase "collection":', time.clock() - last, 'seconds' #last = time.clock() @@ -1339,11 +1353,22 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): continue rating = book[rating_dex] # We kept track of all possible category field_map positions above - for (cat, dex, mult) in md: - if book[dex] is None: + for (cat, dex, mult, is_comp) in md: + if not book[dex]: continue if not mult: val = book[dex] + if is_comp: + item = tcategories[cat].get(val, None) + if not item: + item = tag_class(val, val) + tcategories[cat][val] = item + item.c += 1 + item.id = val + if rating > 0: + item.rt += rating + item.rc += 1 + continue try: (item_id, sort_val) = tids[cat][val] # let exceptions fly item = tcategories[cat].get(val, None) @@ -1405,7 +1430,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): # and building the Tag instances. categories = {} tag_class = Tag - for category in tb_cats.keys(): + for category in tb_cats.iterkeys(): if category not in tcategories: continue cat = tb_cats[category] diff --git a/src/calibre/library/server/browse.py b/src/calibre/library/server/browse.py index fd015f5848..c3843840b8 100644 --- a/src/calibre/library/server/browse.py +++ b/src/calibre/library/server/browse.py @@ -623,6 +623,8 @@ class BrowseServer(object): except: raise cherrypy.HTTPError(404, 'Search: %r not understood'%which) else: + if fm[category]['datatype'] == 'composite': + cid = cid.decode('utf-8') all_ids = self.search_cache('') if category == 'newest': ids = all_ids From 584137aa82579341f7f1f74af37c427042e9fd6c Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Fri, 18 Mar 2011 10:44:30 +0000 Subject: [PATCH 2/3] Fix typo in subgroups manual. --- src/calibre/manual/images/sg_genre.jpg | Bin 25152 -> 23267 bytes src/calibre/manual/images/sg_tb.jpg | Bin 14797 -> 14509 bytes src/calibre/manual/sub_groups.rst | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/manual/images/sg_genre.jpg b/src/calibre/manual/images/sg_genre.jpg index b9a45377724f95f720b976b45d435738cd5f9012..5d9658b14d32255f4624d2b7539076dc5919a733 100644 GIT binary patch literal 23267 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 N7LnDMGTig$*5} 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 h%nH diff --git a/src/calibre/manual/sub_groups.rst b/src/calibre/manual/sub_groups.rst index edfc81d3d4..c27b3581f8 100644 --- a/src/calibre/manual/sub_groups.rst +++ b/src/calibre/manual/sub_groups.rst @@ -70,7 +70,7 @@ Then after restarting |app|, you must tell |app| that the column is to be treate At the point there are no genres in the column. We are left with the last step: how to apply a genre to a book. A genre does not exist in |app| until it appears on at least one book. To learn how to apply a genre for the first time, we must go into some detail about what a genre looks like in the metadata for a book. -A hierarchy of 'things' is built by creating an item consisting of phrases separated by periods. Continuing the genre example, these items would "History.Military", "Mysteries.Vampire", "Science Fiction.Space Opera", etc. Thus to create a new genre, you pick a book that should have that genre, edit its metadata, and enter the new genre into the column you created. Continuing our example, if you want to assign a new genre "Comics" with a sub-genre "Superheros" to a book, you would 'edit metadata' for that (comic) book, choose the Custom metadata tab, and then enter "Comics.Superheros" as shown in the following (ignore the other custom columns): +A hierarchy of 'things' is built by creating an item consisting of phrases separated by periods. Continuing the genre example, these items would "History.Military", "Mysteries.Vampire", "Science Fiction.Space Opera", etc. Thus to create a new genre, you pick a book that should have that genre, edit its metadata, and enter the new genre into the column you created. Continuing our example, if you want to assign a new genre "Comics" with a sub-genre "Superheroes" to a book, you would 'edit metadata' for that (comic) book, choose the Custom metadata tab, and then enter "Comics.Superheroes" as shown in the following (ignore the other custom columns): .. image:: images/sg_genre.jpg :align: center From 56cf0d65597cdf63d988e1e1c9c58ae077f2f013 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Fri, 18 Mar 2011 11:44:00 +0000 Subject: [PATCH 3/3] 1) Make drag & drop of composite columns work. 2) Various fixes to manage user categories to accommodate the above, and to show the existing custom categories. --- src/calibre/gui2/dialogs/tag_categories.py | 37 +++++++++++++++------- src/calibre/gui2/tag_view.py | 33 ++++++++++++------- 2 files changed, 47 insertions(+), 23 deletions(-) diff --git a/src/calibre/gui2/dialogs/tag_categories.py b/src/calibre/gui2/dialogs/tag_categories.py index 899d3d1920..49f8fc6457 100644 --- a/src/calibre/gui2/dialogs/tag_categories.py +++ b/src/calibre/gui2/dialogs/tag_categories.py @@ -59,14 +59,24 @@ class TagCategories(QDialog, Ui_TagCategories): ] category_names = ['', _('Authors'), _('Series'), _('Publishers'), _('Tags')] - cc_map = self.db.custom_column_label_map - for cc in cc_map: - if cc_map[cc]['datatype'] in ['text', 'series']: - self.category_labels.append(db.field_metadata.label_to_key(cc)) + cvals = {} + for key,cc in self.db.custom_field_metadata().iteritems(): + if cc['datatype'] in ['text', 'series', 'enumeration']: + self.category_labels.append(key) category_icons.append(cc_icon) - category_values.append(lambda col=cc: self.db.all_custom(label=col)) - category_names.append(cc_map[cc]['name']) - + category_values.append(lambda col=cc['label']: self.db.all_custom(label=col)) + category_names.append(cc['name']) + elif cc['datatype'] == 'composite' and \ + cc['display'].get('make_category', False): + self.category_labels.append(key) + category_icons.append(cc_icon) + category_names.append(cc['name']) + dex = cc['rec_index'] + cvals = set() + for book in db.data.iterall(): + if book[dex]: + cvals.add(book[dex]) + category_values.append(lambda s=list(cvals): s) self.all_items = [] self.all_items_dict = {} for idx,label in enumerate(self.category_labels): @@ -88,7 +98,8 @@ class TagCategories(QDialog, Ui_TagCategories): if l[1] in self.category_labels: if t is None: t = Item(name=l[0], label=l[1], index=len(self.all_items), - icon=category_icons[self.category_labels.index(l[1])], exists=False) + icon=category_icons[self.category_labels.index(l[1])], + exists=False) self.all_items.append(t) self.all_items_dict[key] = t l[2] = t.index @@ -108,13 +119,16 @@ class TagCategories(QDialog, Ui_TagCategories): self.add_category_button.clicked.connect(self.add_category) self.rename_category_button.clicked.connect(self.rename_category) self.category_box.currentIndexChanged[int].connect(self.select_category) - self.category_filter_box.currentIndexChanged[int].connect(self.display_filtered_categories) + self.category_filter_box.currentIndexChanged[int].connect( + self.display_filtered_categories) self.delete_category_button.clicked.connect(self.del_category) if islinux: self.available_items_box.itemDoubleClicked.connect(self.apply_tags) else: - self.connect(self.available_items_box, SIGNAL('itemActivated(QListWidgetItem*)'), self.apply_tags) - self.connect(self.applied_items_box, SIGNAL('itemActivated(QListWidgetItem*)'), self.unapply_tags) + self.connect(self.available_items_box, + SIGNAL('itemActivated(QListWidgetItem*)'), self.apply_tags) + self.connect(self.applied_items_box, + SIGNAL('itemActivated(QListWidgetItem*)'), self.unapply_tags) self.populate_category_list() if on_category is not None: @@ -129,6 +143,7 @@ class TagCategories(QDialog, Ui_TagCategories): n = item.name if item.exists else item.name + _(' (not on any book)') w = QListWidgetItem(item.icon, n) w.setData(Qt.UserRole, item.index) + w.setToolTip(_('Category lookup name: ') + item.label) return w def display_filtered_categories(self, idx): diff --git a/src/calibre/gui2/tag_view.py b/src/calibre/gui2/tag_view.py index e867f2cac6..3429cefae9 100644 --- a/src/calibre/gui2/tag_view.py +++ b/src/calibre/gui2/tag_view.py @@ -510,9 +510,11 @@ class TagsView(QTreeView): # {{{ if hasattr(md, 'column_name'): fm_src = self.db.metadata_for_field(md.column_name) if md.column_name in ['authors', 'publisher', 'series'] or \ - (fm_src['is_custom'] and - fm_src['datatype'] in ['series', 'text'] and - not fm_src['is_multiple']): + (fm_src['is_custom'] and ( + (fm_src['datatype'] in ['series', 'text', 'enumeration'] and + not fm_src['is_multiple']) or + (fm_src['datatype'] == 'composite' and + fm_src['display'].get('make_category', False)))): self.setDropIndicatorShown(True) def clear(self): @@ -976,8 +978,11 @@ class TagsModel(QAbstractItemModel): # {{{ fm = self.db.metadata_for_field(node.tag.category) if node.tag.category in \ ('tags', 'series', 'authors', 'rating', 'publisher') or \ - (fm['is_custom'] and \ - fm['datatype'] in ['text', 'rating', 'series']): + (fm['is_custom'] and ( + fm['datatype'] in ['text', 'rating', 'series', + 'enumeration'] or + (fm['datatype'] == 'composite' and + fm['display'].get('make_category', False)))): mime = 'application/calibre+from_library' ids = list(map(int, str(md.data(mime)).split())) self.handle_drop(node, ids) @@ -987,9 +992,11 @@ class TagsModel(QAbstractItemModel): # {{{ if fm_dest['kind'] == 'user': fm_src = self.db.metadata_for_field(md.column_name) if md.column_name in ['authors', 'publisher', 'series'] or \ - (fm_src['is_custom'] and - fm_src['datatype'] in ['series', 'text'] and - not fm_src['is_multiple']): + (fm_src['is_custom'] and ( + (fm_src['datatype'] in ['series', 'text', 'enumeration'] and + not fm_src['is_multiple']))or + (fm_src['datatype'] == 'composite' and + fm_src['display'].get('make_category', False))): mime = 'application/calibre+from_library' ids = list(map(int, str(md.data(mime)).split())) self.handle_user_category_drop(node, ids, md.column_name) @@ -1019,19 +1026,21 @@ class TagsModel(QAbstractItemModel): # {{{ value = self.db.series(id, index_is_id=True) else: items = self.db.get_custom_items_with_ids(label=label) - value = self.db.get_custom(id, label=label, index_is_id=True) + if fm_src['datatype'] != 'composite': + value = self.db.get_custom(id, label=label, index_is_id=True) + else: + value = self.db.get_property(id, loc=fm_src['rec_index'], + index_is_id=True) if value is None: return if not isinstance(value, list): value = [value] - for v in items: - vmap[v[1]] = v[0] for val in value: for (v, c, id) in category: if v == val and c == column: break else: - category.append([val, column, vmap[val]]) + category.append([val, column, 0]) categories[on_node.category_key[1:]] = category self.db.prefs.set('user_categories', categories) self.tags_view.recount()