Implement #7075 (possibility to move a book to another library)

This commit is contained in:
Kovid Goyal 2010-10-06 16:21:29 -06:00
parent 585e5d63a3
commit 2dab246d4d
2 changed files with 30 additions and 10 deletions

View File

@ -21,6 +21,7 @@ class Worker(Thread):
def __init__(self, ids, db, loc, progress, done): def __init__(self, ids, db, loc, progress, done):
Thread.__init__(self) Thread.__init__(self)
self.ids = ids self.ids = ids
self.processed = set([])
self.db = db self.db = db
self.loc = loc self.loc = loc
self.error = None self.error = None
@ -71,6 +72,7 @@ class Worker(Thread):
co = self.db.conversion_options(x, 'PIPE') co = self.db.conversion_options(x, 'PIPE')
if co is not None: if co is not None:
newdb.set_conversion_options(x, 'PIPE', co) newdb.set_conversion_options(x, 'PIPE', co)
self.processed.add(x)
class CopyToLibraryAction(InterfaceAction): class CopyToLibraryAction(InterfaceAction):
@ -107,9 +109,13 @@ class CopyToLibraryAction(InterfaceAction):
for name, loc in locations: for name, loc in locations:
self.menu.addAction(name, partial(self.copy_to_library, self.menu.addAction(name, partial(self.copy_to_library,
loc)) 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)) 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() rows = self.gui.library_view.selectionModel().selectedRows()
if not rows or len(rows) == 0: if not rows or len(rows) == 0:
return error_dialog(self.gui, _('Cannot copy'), return error_dialog(self.gui, _('Cannot copy'),
@ -140,7 +146,16 @@ class CopyToLibraryAction(InterfaceAction):
else: else:
self.gui.status_bar.show_message(_('Copied %d books to %s') % self.gui.status_bar.show_message(_('Copied %d books to %s') %
(len(ids), loc), 2000) (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)

View File

@ -149,6 +149,18 @@ class DeleteAction(InterfaceAction):
self.gui.library_view.model().current_changed(self.gui.library_view.currentIndex(), self.gui.library_view.model().current_changed(self.gui.library_view.currentIndex(),
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): def delete_books(self, *args):
''' '''
Delete selected books from device or library. Delete selected books from device or library.
@ -168,14 +180,7 @@ class DeleteAction(InterfaceAction):
if ci.isValid(): if ci.isValid():
row = ci.row() row = ci.row()
ids_deleted = view.model().delete_books(rows) ids_deleted = view.model().delete_books(rows)
for v in (self.gui.memory_view, self.gui.card_a_view, self.gui.card_b_view): self.library_ids_deleted(ids_deleted, row)
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)
else: else:
if not confirm('<p>'+_('The selected books will be ' if not confirm('<p>'+_('The selected books will be '
'<b>permanently deleted</b> ' '<b>permanently deleted</b> '