From 1e2e6bc9bfab85e45bc71f57340e6b210d03b578 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 30 Oct 2024 11:18:49 +0530 Subject: [PATCH] Book details: Add an action to download the cover to the context menu when right clicking the cover. Fixes #2082075 [[Enhancement] allow cover downloads by clicking on cover in bookdetails](https://bugs.launchpad.net/calibre/+bug/2082075) --- src/calibre/gui2/book_details.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/calibre/gui2/book_details.py b/src/calibre/gui2/book_details.py index 0d0f5fb7f9..5907a9c8ff 100644 --- a/src/calibre/gui2/book_details.py +++ b/src/calibre/gui2/book_details.py @@ -859,6 +859,7 @@ class CoverView(QWidget): # {{{ def contextMenuEvent(self, ev): cm = QMenu(self) paste = cm.addAction(QIcon.ic('edit-paste.png'), _('Paste cover')) + download = cm.addAction(QIcon.ic('download-metadata.png'), _('Download cover')) copy = cm.addAction(QIcon.ic('edit-copy.png'), _('Copy cover')) save = cm.addAction(QIcon.ic('save.png'), _('Save cover to disk')) remove = cm.addAction(QIcon.ic('trash.png'), _('Remove cover')) @@ -878,6 +879,7 @@ class CoverView(QWidget): # {{{ copy.triggered.connect(self.copy_to_clipboard) paste.triggered.connect(self.paste_from_clipboard) remove.triggered.connect(self.remove_cover) + download.triggered.connect(self.download_cover) gc.triggered.connect(self.generate_cover) save.triggered.connect(self.save_cover) create_open_cover_with_menu(self, cm) @@ -941,6 +943,21 @@ class CoverView(QWidget): # {{{ if not pmap.isNull(): self.update_cover(pmap) + def download_cover(self): + from calibre.ebooks.metadata.sources.update import update_sources + from calibre.gui2.ui import get_gui + update_sources() + from calibre.gui2.metadata.single_download import CoverFetch + book_id = self.data.get('id') + db = get_gui().current_db.new_api + title = db.field_for('title', book_id) + authors = db.field_for('authors', book_id) + identifiers = db.field_for('identifiers', book_id, default_value={}) + d = CoverFetch(self.pixmap, self) + if d.start(title, authors, identifiers) == QDialog.DialogCode.Accepted: + if d.cover_pixmap is not None: + self.update_cover(d.cover_pixmap) + def save_cover(self): from calibre.gui2.ui import get_gui book_id = self.data.get('id')