mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 10:44:09 -04:00
Implement #7709 ("Merge only formats - delete others" and Ctl-M keyboard shortcut)
This commit is contained in:
parent
826221c0f5
commit
2f26cc8d2b
@ -54,6 +54,10 @@ class EditMetadataAction(InterfaceAction):
|
|||||||
mb.addAction(_('Merge into first selected book - keep others'),
|
mb.addAction(_('Merge into first selected book - keep others'),
|
||||||
partial(self.merge_books, safe_merge=True),
|
partial(self.merge_books, safe_merge=True),
|
||||||
Qt.AltModifier+Qt.Key_M)
|
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.merge_menu = mb
|
||||||
self.action_merge.setMenu(mb)
|
self.action_merge.setMenu(mb)
|
||||||
md.addSeparator()
|
md.addSeparator()
|
||||||
@ -206,7 +210,7 @@ class EditMetadataAction(InterfaceAction):
|
|||||||
self.gui.library_view.select_rows(ids)
|
self.gui.library_view.select_rows(ids)
|
||||||
|
|
||||||
# Merge books {{{
|
# 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.
|
Merge selected books in library.
|
||||||
'''
|
'''
|
||||||
@ -220,6 +224,12 @@ class EditMetadataAction(InterfaceAction):
|
|||||||
return error_dialog(self.gui, _('Cannot merge books'),
|
return error_dialog(self.gui, _('Cannot merge books'),
|
||||||
_('At least two books must be selected for merging'),
|
_('At least two books must be selected for merging'),
|
||||||
show=True)
|
show=True)
|
||||||
|
if len(rows) > 5:
|
||||||
|
if not confirm('<p>'+_('You are about to merge more than 5 books. '
|
||||||
|
'Are you <b>sure</b> you want to proceed?')
|
||||||
|
+'</p>', 'merge_too_many_books', self.gui):
|
||||||
|
return
|
||||||
|
|
||||||
dest_id, src_books, src_ids = self.books_to_merge(rows)
|
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)
|
title = self.gui.library_view.model().db.title(dest_id, index_is_id=True)
|
||||||
if safe_merge:
|
if safe_merge:
|
||||||
@ -234,6 +244,22 @@ class EditMetadataAction(InterfaceAction):
|
|||||||
return
|
return
|
||||||
self.add_formats(dest_id, src_books)
|
self.add_formats(dest_id, src_books)
|
||||||
self.merge_metadata(dest_id, src_ids)
|
self.merge_metadata(dest_id, src_ids)
|
||||||
|
elif merge_only_formats:
|
||||||
|
if not confirm('<p>'+_(
|
||||||
|
'Book formats from the selected books will be merged '
|
||||||
|
'into the <b>first selected book</b> (%s). '
|
||||||
|
'Metadata in the first selected book will not be changed.'
|
||||||
|
'Author, Title, ISBN and all other metadata will <i>not</i> be merged.<br><br>'
|
||||||
|
'After merger the second and subsequently '
|
||||||
|
'selected books, with any metadata they have will be <b>deleted</b>. <br><br>'
|
||||||
|
'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 <b>deleted</b> from your calibre library.<br><br> '
|
||||||
|
'Are you <b>sure</b> you want to proceed?')%title
|
||||||
|
+'</p>', 'merge_only_formats', self.gui):
|
||||||
|
return
|
||||||
|
self.add_formats(dest_id, src_books)
|
||||||
|
self.delete_books_after_merge(src_ids)
|
||||||
else:
|
else:
|
||||||
if not confirm('<p>'+_(
|
if not confirm('<p>'+_(
|
||||||
'Book formats and metadata from the selected books will be merged '
|
'Book formats and metadata from the selected books will be merged '
|
||||||
@ -243,15 +269,10 @@ class EditMetadataAction(InterfaceAction):
|
|||||||
'subsequently selected books will be <b>deleted</b>. <br><br>'
|
'subsequently selected books will be <b>deleted</b>. <br><br>'
|
||||||
'All book formats of the first selected book will be kept '
|
'All book formats of the first selected book will be kept '
|
||||||
'and any duplicate formats in the second and subsequently selected books '
|
'and any duplicate formats in the second and subsequently selected books '
|
||||||
'will be permanently <b>deleted</b> from your computer.<br><br> '
|
'will be permanently <b>deleted</b> from your calibre library.<br><br> '
|
||||||
'Are you <b>sure</b> you want to proceed?')%title
|
'Are you <b>sure</b> you want to proceed?')%title
|
||||||
+'</p>', 'merge_books', self.gui):
|
+'</p>', 'merge_books', self.gui):
|
||||||
return
|
return
|
||||||
if len(rows)>5:
|
|
||||||
if not confirm('<p>'+_('You are about to merge more than 5 books. '
|
|
||||||
'Are you <b>sure</b> you want to proceed?')
|
|
||||||
+'</p>', 'merge_too_many_books', self.gui):
|
|
||||||
return
|
|
||||||
self.add_formats(dest_id, src_books)
|
self.add_formats(dest_id, src_books)
|
||||||
self.merge_metadata(dest_id, src_ids)
|
self.merge_metadata(dest_id, src_ids)
|
||||||
self.delete_books_after_merge(src_ids)
|
self.delete_books_after_merge(src_ids)
|
||||||
|
@ -31,4 +31,5 @@ def confirm(msg, name, parent=None, pixmap='dialog_warning.png'):
|
|||||||
d = Dialog(msg, name, parent)
|
d = Dialog(msg, name, parent)
|
||||||
d.label.setPixmap(QPixmap(I(pixmap)))
|
d.label.setPixmap(QPixmap(I(pixmap)))
|
||||||
d.setWindowIcon(QIcon(I(pixmap)))
|
d.setWindowIcon(QIcon(I(pixmap)))
|
||||||
|
d.resize(d.sizeHint())
|
||||||
return d.exec_() == d.Accepted
|
return d.exec_() == d.Accepted
|
||||||
|
Loading…
x
Reference in New Issue
Block a user