Example #1
0
    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()