def do_tags_list_edit(self, tag, category, is_first_letter=False): ''' Open the 'manage_X' dialog where X == category. If tag is not None, the dialog will position the editor on that item. ''' db = self.current_db if category == 'series': key = lambda x: sort_key(title_sort(x)) else: key = sort_key d = TagListEditor(self, category=category, cat_name=db.field_metadata[category]['name'], tag_to_match=tag, get_book_ids=partial(self.get_book_ids, db=db, category=category), sorter=key, ttm_is_first_letter=is_first_letter, fm=db.field_metadata[category]) d.exec() if d.result() == QDialog.DialogCode.Accepted: to_rename = d.to_rename # dict of old id to new name to_delete = d.to_delete # list of ids orig_name = d.original_names # dict of id: name if (category in ['tags', 'series', 'publisher'] or db.new_api.field_metadata.is_custom_field(category)): m = self.tags_view.model() for item in to_delete: m.delete_item_from_all_user_categories( orig_name[item], category) for old_id in to_rename: m.rename_item_in_all_user_categories( orig_name[old_id], category, str(to_rename[old_id])) db.new_api.remove_items(category, to_delete) db.new_api.rename_items(category, to_rename, change_index=False) # Clean up the library view self.do_tag_item_renamed() self.tags_view.recount()