From e29e8c2b28245b9cc84313ffc990a7925e5f67ba Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 30 Oct 2017 08:13:43 +0530 Subject: [PATCH] Book details panel: Allow saving the displayed cover to disk via the right click context menu. Fixes #1728251 [Save cover by right clicking](https://bugs.launchpad.net/calibre/+bug/1728251) --- src/calibre/gui2/book_details.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/calibre/gui2/book_details.py b/src/calibre/gui2/book_details.py index c0860bcf62..b1abe7b130 100644 --- a/src/calibre/gui2/book_details.py +++ b/src/calibre/gui2/book_details.py @@ -2,7 +2,8 @@ # vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai # License: GPLv3 Copyright: 2010, Kovid Goyal -import cPickle, re +import cPickle +import re from binascii import unhexlify from collections import namedtuple from functools import partial @@ -23,8 +24,8 @@ from calibre.ebooks.metadata.search_internet import ( url_for_book_search ) from calibre.gui2 import ( - NO_URL_FORMATTING, config, default_author_link, gprefs, open_url, pixmap_to_data, - rating_font + NO_URL_FORMATTING, choose_save_file, config, default_author_link, gprefs, + open_url, pixmap_to_data, rating_font ) from calibre.gui2.dnd import ( dnd_get_files, dnd_get_image, dnd_has_extension, dnd_has_image, image_extensions @@ -393,6 +394,7 @@ class CoverView(QWidget): # {{{ cm = QMenu(self) paste = cm.addAction(_('Paste cover')) copy = cm.addAction(_('Copy cover')) + save = cm.addAction(_('Save cover to disk')) remove = cm.addAction(_('Remove cover')) gc = cm.addAction(_('Generate cover from metadata')) cm.addSeparator() @@ -402,6 +404,7 @@ class CoverView(QWidget): # {{{ paste.triggered.connect(self.paste_from_clipboard) remove.triggered.connect(self.remove_cover) gc.triggered.connect(self.generate_cover) + save.triggered.connect(self.save_cover) m = QMenu(_('Open cover with...')) populate_menu(m, self.open_with, 'cover_image') @@ -440,6 +443,18 @@ class CoverView(QWidget): # {{{ if not pmap.isNull(): self.update_cover(pmap) + def save_cover(self): + from calibre.gui2.ui import get_gui + book_id = self.data.get('id') + db = get_gui().current_db.new_api + path = choose_save_file( + self, 'save-cover-from-book-details', _('Choose cover save location'), + filters=[(_('JPEG images'), ['jpg', 'jpeg'])], all_files=False, + initial_filename='{}.jpeg'.format(db.field_for('title', book_id, default_value='cover')) + ) + if path: + db.copy_cover_to(book_id, path) + def update_cover(self, pmap=None, cdata=None): if pmap is None: pmap = QPixmap()