def do_map(self, book_ids, selected): from calibre.ebooks.metadata.author_mapper import map_authors, compile_rules from calibre.gui2.author_mapper import RulesDialog from calibre.gui2.device import BusyCursor d = RulesDialog(self.gui) d.setWindowTitle(ngettext( 'Map authors for one book in the library', 'Map authors for {} books in the library', len(book_ids)).format(len(book_ids))) d.rules = gprefs.get('library-author-mapper-ruleset', ()) txt = ngettext( 'The changes will be applied to the <b>selected book</b>', 'The changes will be applied to the <b>{} selected books</b>', len(book_ids)) if selected else ngettext( 'The changes will be applied to <b>one book in the library</b>', 'The changes will be applied to <b>{} books in the library</b>', len(book_ids)) d.edit_widget.msg_label.setText(d.edit_widget.msg_label.text() + '<p>' + txt.format(len(book_ids))) if d.exec_() != QDialog.DialogCode.Accepted: return with BusyCursor(): rules = d.rules gprefs.set('library-author-mapper-ruleset', rules) rules = compile_rules(rules) db = self.gui.current_db.new_api author_map = db.all_field_for('authors', book_ids) changed_author_map = {} changed_author_sort_map = {} for book_id, authors in iteritems(author_map): authors = list(authors) new_authors = map_authors(authors, rules) if authors != new_authors: changed_author_map[book_id] = new_authors changed_author_sort_map[book_id] = db.author_sort_from_authors(new_authors) if changed_author_map: db.set_field('authors', changed_author_map) db.set_field('author_sort', changed_author_sort_map) self.gui.library_view.model().refresh_ids(tuple(changed_author_map), current_row=self.gui.library_view.currentIndex().row())
def do_map(self, book_ids, selected): from calibre.ebooks.metadata.tag_mapper import map_tags from calibre.gui2.tag_mapper import RulesDialog from calibre.gui2.device import BusyCursor d = RulesDialog(self.gui) d.setWindowTitle(_('Map tags for %d books in the library') % len(book_ids)) d.rules = gprefs.get('library-tag-mapper-ruleset', ()) txt = _('The changes will be applied to the <b>%d selected books</b>') if selected else _( 'The changes will be applied to <b>%d books in the library</b>') d.edit_widget.msg_label.setText(d.edit_widget.msg_label.text() + '<p>' + txt % len(book_ids)) if d.exec_() != d.Accepted: return with BusyCursor(): rules = d.rules gprefs.set('library-tag-mapper-ruleset', rules) db = self.gui.current_db.new_api tag_map = db.all_field_for('tags', book_ids) changed_tag_map = {} for book_id, tags in tag_map.iteritems(): tags = list(tags) new_tags = map_tags(tags, rules) if tags != new_tags: changed_tag_map[book_id] = new_tags if changed_tag_map: db.set_field('tags', changed_tag_map) self.gui.library_view.model().refresh_ids(tuple(changed_tag_map), current_row=self.gui.library_view.currentIndex().row())
def bd_edit_book(self, book_id, fmt): from calibre.gui2.device import BusyCursor with BusyCursor(): self.iactions['Tweak ePub'].ebook_edit_format(book_id, fmt)