mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 02:34:06 -04:00
Implement #7075 (possibility to move a book to another library)
This commit is contained in:
parent
585e5d63a3
commit
2dab246d4d
@ -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)
|
||||
|
||||
|
||||
|
||||
|
@ -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('<p>'+_('The selected books will be '
|
||||
'<b>permanently deleted</b> '
|
||||
|
Loading…
x
Reference in New Issue
Block a user