Book details panel: Allow right clicking on a format to open it in the calibre editor

This commit is contained in:
Kovid Goyal 2018-09-27 10:19:45 +05:30
parent 6dc51fa61d
commit cef074948d
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 17 additions and 1 deletions

View File

@ -204,6 +204,7 @@ def details_context_menu_event(view, ev, book_info): # {{{
menu.addAction(QIcon(I('edit-copy.png')), _('Copy &all'), partial(copy_all, book_info)) menu.addAction(QIcon(I('edit-copy.png')), _('Copy &all'), partial(copy_all, book_info))
search_internet_added = False search_internet_added = False
if not r.isNull(): if not r.isNull():
from calibre.ebooks.oeb.polish.main import SUPPORTED
if url.startswith('format:'): if url.startswith('format:'):
parts = url.split(':') parts = url.split(':')
try: try:
@ -213,7 +214,6 @@ def details_context_menu_event(view, ev, book_info): # {{{
traceback.print_exc() traceback.print_exc()
else: else:
from calibre.gui2.ui import get_gui from calibre.gui2.ui import get_gui
from calibre.ebooks.oeb.polish.main import SUPPORTED
db = get_gui().current_db.new_api db = get_gui().current_db.new_api
ofmt = fmt.upper() if fmt.startswith('ORIGINAL_') else 'ORIGINAL_' + fmt ofmt = fmt.upper() if fmt.startswith('ORIGINAL_') else 'ORIGINAL_' + fmt
nfmt = ofmt[len('ORIGINAL_'):] nfmt = ofmt[len('ORIGINAL_'):]
@ -253,6 +253,9 @@ def details_context_menu_event(view, ev, book_info): # {{{
m.addAction(_('Edit Open With applications...'), partial(edit_programs, fmt, book_info)) m.addAction(_('Edit Open With applications...'), partial(edit_programs, fmt, book_info))
menu.addMenu(m) menu.addMenu(m)
menu.ow = m menu.ow = m
if fmt.upper() in SUPPORTED:
menu.addSeparator()
menu.addAction(_('Edit %s...') % fmt.upper(), partial(book_info.edit_fmt, book_id, fmt))
ac = book_info.copy_link_action ac = book_info.copy_link_action
ac.current_url = r.linkElement().attribute('data-full-path') ac.current_url = r.linkElement().attribute('data-full-path')
if ac.current_url: if ac.current_url:
@ -543,6 +546,7 @@ class BookInfo(QWebView):
copy_link = pyqtSignal(object) copy_link = pyqtSignal(object)
manage_category = pyqtSignal(object, object) manage_category = pyqtSignal(object, object)
open_fmt_with = pyqtSignal(int, object, object) open_fmt_with = pyqtSignal(int, object, object)
edit_book = pyqtSignal(int, object)
def __init__(self, vertical, parent=None): def __init__(self, vertical, parent=None):
QWebView.__init__(self, parent) QWebView.__init__(self, parent)
@ -648,6 +652,9 @@ class BookInfo(QWebView):
if entry is not None: if entry is not None:
self.open_with(book_id, fmt, entry) self.open_with(book_id, fmt, entry)
def edit_fmt(self, book_id, fmt):
self.edit_book.emit(book_id, fmt)
# }}} # }}}
@ -762,6 +769,7 @@ class BookDetails(QWidget): # {{{
view_device_book = pyqtSignal(object) view_device_book = pyqtSignal(object)
manage_category = pyqtSignal(object, object) manage_category = pyqtSignal(object, object)
open_fmt_with = pyqtSignal(int, object, object) open_fmt_with = pyqtSignal(int, object, object)
edit_book = pyqtSignal(int, object)
# Drag 'n drop {{{ # Drag 'n drop {{{
@ -831,6 +839,7 @@ class BookDetails(QWidget): # {{{
self.book_info.remove_format.connect(self.remove_specific_format) self.book_info.remove_format.connect(self.remove_specific_format)
self.book_info.remove_item.connect(self.remove_metadata_item) self.book_info.remove_item.connect(self.remove_metadata_item)
self.book_info.open_fmt_with.connect(self.open_fmt_with) self.book_info.open_fmt_with.connect(self.open_fmt_with)
self.book_info.edit_book.connect(self.edit_book)
self.book_info.save_format.connect(self.save_specific_format) self.book_info.save_format.connect(self.save_specific_format)
self.book_info.restore_format.connect(self.restore_specific_format) self.book_info.restore_format.connect(self.restore_specific_format)
self.book_info.set_cover_format.connect(self.set_cover_from_format) self.book_info.set_cover_format.connect(self.set_cover_from_format)

View File

@ -659,6 +659,8 @@ class LayoutMixin(object): # {{{
type=Qt.QueuedConnection) type=Qt.QueuedConnection)
self.book_details.open_fmt_with.connect(self.bd_open_fmt_with, self.book_details.open_fmt_with.connect(self.bd_open_fmt_with,
type=Qt.QueuedConnection) type=Qt.QueuedConnection)
self.book_details.edit_book.connect(self.bd_edit_book,
type=Qt.QueuedConnection)
self.book_details.cover_removed.connect(self.bd_cover_removed, self.book_details.cover_removed.connect(self.bd_cover_removed,
type=Qt.QueuedConnection) type=Qt.QueuedConnection)
self.book_details.remote_file_dropped.connect( self.book_details.remote_file_dropped.connect(
@ -730,6 +732,11 @@ class LayoutMixin(object): # {{{
self.current_db.new_api.field_for('title', book_id, default_value=_('Unknown')), self.current_db.new_api.field_for('title', book_id, default_value=_('Unknown')),
fmt), show=True) fmt), show=True)
def bd_edit_book(self, book_id, fmt):
from calibre.gui2.device import BusyCursor
with BusyCursor():
self.iactions['Tweak ePub'].ebook_edit_format(book_id, fmt)
def open_with_action_triggerred(self, fmt, entry, *args): def open_with_action_triggerred(self, fmt, entry, *args):
book_id = self.library_view.current_book book_id = self.library_view.current_book
if book_id is not None: if book_id is not None: