diff --git a/src/calibre/gui2/actions/copy_to_library.py b/src/calibre/gui2/actions/copy_to_library.py index 6b7654f644..513026f757 100644 --- a/src/calibre/gui2/actions/copy_to_library.py +++ b/src/calibre/gui2/actions/copy_to_library.py @@ -21,6 +21,7 @@ class Worker(Thread): def __init__(self, ids, db, loc, progress, done): Thread.__init__(self) self.ids = ids + self.processed = set([]) self.db = db self.loc = loc self.error = None @@ -71,6 +72,7 @@ class Worker(Thread): co = self.db.conversion_options(x, 'PIPE') if co is not None: newdb.set_conversion_options(x, 'PIPE', co) + self.processed.add(x) class CopyToLibraryAction(InterfaceAction): @@ -107,9 +109,13 @@ class CopyToLibraryAction(InterfaceAction): for name, loc in locations: self.menu.addAction(name, partial(self.copy_to_library, loc)) + self.menu.addAction(name + ' ' + _('(delete after copy)'), + partial(self.copy_to_library, loc, delete_after=True)) + self.menu.addSeparator() + self.qaction.setVisible(bool(locations)) - def copy_to_library(self, loc): + def copy_to_library(self, loc, delete_after=False): rows = self.gui.library_view.selectionModel().selectedRows() if not rows or len(rows) == 0: return error_dialog(self.gui, _('Cannot copy'), @@ -140,7 +146,16 @@ class CopyToLibraryAction(InterfaceAction): else: self.gui.status_bar.show_message(_('Copied %d books to %s') % (len(ids), loc), 2000) - + if delete_after and self.worker.processed: + v = self.gui.library_view + ci = v.currentIndex() + row = None + if ci.isValid(): + row = ci.row() + + v.model().delete_books_by_id(self.worker.processed) + self.gui.iactions['Remove Books'].library_ids_deleted( + self.worker.processed, row) diff --git a/src/calibre/gui2/actions/delete.py b/src/calibre/gui2/actions/delete.py index 406860e4ec..a541590fd1 100644 --- a/src/calibre/gui2/actions/delete.py +++ b/src/calibre/gui2/actions/delete.py @@ -149,6 +149,18 @@ class DeleteAction(InterfaceAction): self.gui.library_view.model().current_changed(self.gui.library_view.currentIndex(), self.gui.library_view.currentIndex()) + + def library_ids_deleted(self, ids_deleted, current_row=None): + view = self.gui.library_view + for v in (self.gui.memory_view, self.gui.card_a_view, self.gui.card_b_view): + if v is None: + continue + v.model().clear_ondevice(ids_deleted) + if current_row is not None: + ci = view.model().index(current_row, 0) + if ci.isValid(): + view.set_current_row(current_row) + def delete_books(self, *args): ''' Delete selected books from device or library. @@ -168,14 +180,7 @@ class DeleteAction(InterfaceAction): if ci.isValid(): row = ci.row() ids_deleted = view.model().delete_books(rows) - for v in (self.gui.memory_view, self.gui.card_a_view, self.gui.card_b_view): - if v is None: - continue - v.model().clear_ondevice(ids_deleted) - if row is not None: - ci = view.model().index(row, 0) - if ci.isValid(): - view.set_current_row(row) + self.library_ids_deleted(ids_deleted, row) else: if not confirm('
'+_('The selected books will be ' 'permanently deleted '