diff --git a/src/calibre/gui2/actions/edit_metadata.py b/src/calibre/gui2/actions/edit_metadata.py index 4a527d94d8..60a943ccb9 100644 --- a/src/calibre/gui2/actions/edit_metadata.py +++ b/src/calibre/gui2/actions/edit_metadata.py @@ -54,6 +54,10 @@ class EditMetadataAction(InterfaceAction): mb.addAction(_('Merge into first selected book - keep others'), partial(self.merge_books, safe_merge=True), Qt.AltModifier+Qt.Key_M) + mb.addSeparator() + mb.addAction(_('Merge only formats into first selected book - delete others'), + partial(self.merge_books, merge_only_formats=True), + Qt.AltModifier+Qt.ShiftModifier+Qt.Key_M) self.merge_menu = mb self.action_merge.setMenu(mb) md.addSeparator() @@ -206,7 +210,7 @@ class EditMetadataAction(InterfaceAction): self.gui.library_view.select_rows(ids) # Merge books {{{ - def merge_books(self, safe_merge=False): + def merge_books(self, safe_merge=False, merge_only_formats=False): ''' Merge selected books in library. ''' @@ -220,6 +224,12 @@ class EditMetadataAction(InterfaceAction): return error_dialog(self.gui, _('Cannot merge books'), _('At least two books must be selected for merging'), show=True) + if len(rows) > 5: + if not confirm('
'+_('You are about to merge more than 5 books. ' + 'Are you sure you want to proceed?') + +'
', 'merge_too_many_books', self.gui): + return + dest_id, src_books, src_ids = self.books_to_merge(rows) title = self.gui.library_view.model().db.title(dest_id, index_is_id=True) if safe_merge: @@ -234,6 +244,22 @@ class EditMetadataAction(InterfaceAction): return self.add_formats(dest_id, src_books) self.merge_metadata(dest_id, src_ids) + elif merge_only_formats: + if not confirm(''+_(
+ 'Book formats from the selected books will be merged '
+ 'into the first selected book (%s). '
+ 'Metadata in the first selected book will not be changed.'
+ 'Author, Title, ISBN and all other metadata will not be merged.
'
+ 'After merger the second and subsequently '
+ 'selected books, with any metadata they have will be deleted.
'
+ 'All book formats of the first selected book will be kept '
+ 'and any duplicate formats in the second and subsequently selected books '
+ 'will be permanently deleted from your calibre library.
'
+ 'Are you sure you want to proceed?')%title
+ +'
'+_(
'Book formats and metadata from the selected books will be merged '
@@ -243,15 +269,10 @@ class EditMetadataAction(InterfaceAction):
'subsequently selected books will be deleted.
'
'All book formats of the first selected book will be kept '
'and any duplicate formats in the second and subsequently selected books '
- 'will be permanently deleted from your computer.
'
+ 'will be permanently deleted from your calibre library.
'
'Are you sure you want to proceed?')%title
+'
'+_('You are about to merge more than 5 books. ' - 'Are you sure you want to proceed?') - +'
', 'merge_too_many_books', self.gui): - return self.add_formats(dest_id, src_books) self.merge_metadata(dest_id, src_ids) self.delete_books_after_merge(src_ids) diff --git a/src/calibre/gui2/dialogs/confirm_delete.py b/src/calibre/gui2/dialogs/confirm_delete.py index 4e0a259824..ff7f0a285a 100644 --- a/src/calibre/gui2/dialogs/confirm_delete.py +++ b/src/calibre/gui2/dialogs/confirm_delete.py @@ -31,4 +31,5 @@ def confirm(msg, name, parent=None, pixmap='dialog_warning.png'): d = Dialog(msg, name, parent) d.label.setPixmap(QPixmap(I(pixmap))) d.setWindowIcon(QIcon(I(pixmap))) + d.resize(d.sizeHint()) return d.exec_() == d.Accepted