From 380cdee85b90d514b81d723e30dcd5a115c52c13 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 2 Aug 2023 13:45:54 +0530 Subject: [PATCH] Implement file deletion in data files manager --- .../gui2/dialogs/data_files_manager.py | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/calibre/gui2/dialogs/data_files_manager.py b/src/calibre/gui2/dialogs/data_files_manager.py index 8d92a026d6..f47d4226a7 100644 --- a/src/calibre/gui2/dialogs/data_files_manager.py +++ b/src/calibre/gui2/dialogs/data_files_manager.py @@ -16,8 +16,10 @@ from calibre.db.constants import DATA_DIR_NAME, DATA_FILE_PATTERN from calibre.gui2 import ( choose_files, error_dialog, file_icon_provider, gprefs, question_dialog, ) +from calibre.gui2.dialogs.confirm_delete import confirm from calibre.gui2.widgets2 import Dialog from calibre.utils.icu import primary_sort_key +from calibre.utils.recycle_bin import delete_file class Files(QAbstractListModel): @@ -125,6 +127,9 @@ class DataFilesManager(Dialog): self.add_button = b = QPushButton(QIcon.ic('plus.png'), _('&Add files'), self) b.clicked.connect(self.add_files) self.bb.addButton(b, QDialogButtonBox.ButtonRole.ActionRole) + self.remove_button = b = QPushButton(QIcon.ic('minus.png'), _('&Remove files'), self) + b.clicked.connect(self.remove_files) + self.bb.addButton(b, QDialogButtonBox.ButtonRole.ActionRole) self.current_changed() self.resize(self.sizeHint()) @@ -204,6 +209,23 @@ class DataFilesManager(Dialog): with self.preserve_state(): self.files.refresh() + def remove_files(self): + files = [] + for idx in self.fview.selectionModel().selectedRows(): + files.append(self.files.item_at(idx.row())) + if not files: + return error_dialog(self, _('Cannot delete'), _('No files selected to remove'), show=True) + if len(files) == 1: + msg = _('Send the file "{}" to the Recycle Bin?').format(files[0].relpath.replace('/', os.sep)) + else: + msg = _('Send the {} selected filed to the Recycle Bin?').format(len(files)) + if not confirm(msg, 'manage-data-files-confirm-delete'): + return + for f in files: + delete_file(f.file_path, permanent=False) + with self.preserve_state(): + self.files.refresh() + if __name__ == '__main__': from calibre.gui2 import Application