diff --git a/src/calibre/gui2/actions/delete.py b/src/calibre/gui2/actions/delete.py index 43465512e0..bef456033b 100644 --- a/src/calibre/gui2/actions/delete.py +++ b/src/calibre/gui2/actions/delete.py @@ -94,6 +94,9 @@ class DeleteAction(InterfaceAction): self.delete_menu.addAction( _('Remove all formats from selected books, except...'), self.delete_all_but_selected_formats) + self.delete_menu.addAction( + _('Remove all formats from selected books'), + self.delete_all_formats) self.delete_menu.addAction( _('Remove covers from selected books'), self.delete_covers) self.delete_menu.addSeparator() @@ -174,6 +177,28 @@ class DeleteAction(InterfaceAction): if ids: self.gui.tags_view.recount() + def delete_all_formats(self, *args): + ids = self._get_selected_ids() + if not ids: + return + if not confirm('

'+_('All formats for the selected books will ' + 'be deleted from your library.
' + 'The book metadata will be kept. Are you sure?') + +'

', 'delete_all_formats', self.gui): + return + db = self.gui.library_view.model().db + for id in ids: + fmts = db.formats(id, index_is_id=True, verify_formats=False) + if fmts: + for fmt in fmts.split(','): + self.gui.library_view.model().db.remove_format(id, fmt, + index_is_id=True, notify=False) + self.gui.library_view.model().refresh_ids(ids) + self.gui.library_view.model().current_changed(self.gui.library_view.currentIndex(), + self.gui.library_view.currentIndex()) + if ids: + self.gui.tags_view.recount() + def remove_matching_books_from_device(self, *args): if not self.gui.device_manager.is_device_connected: d = error_dialog(self.gui, _('Cannot delete books'),