mirror of
git://github.com/kovidgoyal/calibre.git
synced 2025-12-27 01:46:18 +01:00
Allow using relative URLs in comments type metadata. The relative URLs are interpreted relative to the book folder in the calibre library
This commit is contained in:
parent
aed9a856b3
commit
a9500f08da
5 changed files with 38 additions and 6 deletions
|
|
@ -3,6 +3,7 @@
|
|||
# License: GPLv3 Copyright: 2010, Kovid Goyal <kovid at kovidgoyal.net>
|
||||
|
||||
import cPickle
|
||||
import os
|
||||
import re
|
||||
from binascii import unhexlify
|
||||
from collections import namedtuple
|
||||
|
|
@ -38,6 +39,18 @@
|
|||
InternetSearch = namedtuple('InternetSearch', 'author where')
|
||||
|
||||
|
||||
def set_html(mi, html, web_view):
|
||||
from calibre.gui2.ui import get_gui
|
||||
gui = get_gui()
|
||||
book_id = getattr(mi, 'id', None)
|
||||
if gui and book_id is not None:
|
||||
path = gui.current_db.abspath(book_id, index_is_id=True)
|
||||
if path:
|
||||
web_view.setHtml(html, QUrl.fromLocalFile(os.path.join(path, 'metadata.html')))
|
||||
return
|
||||
web_view.setHtml(html)
|
||||
|
||||
|
||||
def css():
|
||||
global _css
|
||||
if _css is None:
|
||||
|
|
@ -603,7 +616,7 @@ def turnoff_scrollbar(self, *args):
|
|||
|
||||
def show_data(self, mi):
|
||||
html = render_html(mi, css(), self.vertical, self.parent())
|
||||
self.setHtml(html)
|
||||
set_html(mi, html, self)
|
||||
|
||||
def mouseDoubleClickEvent(self, ev):
|
||||
swidth = self.page().mainFrame().scrollBarGeometry(Qt.Vertical).width()
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ class EditorWidget(QWebView): # {{{
|
|||
|
||||
def __init__(self, parent=None):
|
||||
QWebView.__init__(self, parent)
|
||||
self.base_url = None
|
||||
self._parent = weakref.ref(parent)
|
||||
self.readonly = False
|
||||
|
||||
|
|
@ -370,10 +371,17 @@ def fget(self):
|
|||
return ans
|
||||
|
||||
def fset(self, val):
|
||||
self.setHtml(val)
|
||||
if self.base_url is None:
|
||||
self.setHtml(val)
|
||||
else:
|
||||
self.setHtml(val, self.base_url)
|
||||
self.set_font_style()
|
||||
return property(fget=fget, fset=fset)
|
||||
|
||||
def set_base_url(self, qurl):
|
||||
self.base_url = qurl
|
||||
self.setHtml('', self.base_url)
|
||||
|
||||
def set_html(self, val, allow_undo=True):
|
||||
if not allow_undo or self.readonly:
|
||||
self.html = val
|
||||
|
|
@ -650,6 +658,7 @@ def __init__(self, parent=None, one_line_toolbar=False, toolbar_prefs_name=None)
|
|||
t = getattr(self, 'toolbar%d'%i)
|
||||
t.setIconSize(QSize(18, 18))
|
||||
self.editor = EditorWidget(self)
|
||||
self.set_base_url = self.editor.set_base_url
|
||||
self.set_html = self.editor.set_html
|
||||
self.tabs = QTabWidget(self)
|
||||
self.tabs.setTabPosition(self.tabs.South)
|
||||
|
|
|
|||
|
|
@ -5,10 +5,11 @@
|
|||
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
import os
|
||||
from functools import partial
|
||||
|
||||
from PyQt5.Qt import (QComboBox, QLabel, QSpinBox, QDoubleSpinBox, QDateTimeEdit,
|
||||
QDateTime, QGroupBox, QVBoxLayout, QSizePolicy, QGridLayout,
|
||||
QDateTime, QGroupBox, QVBoxLayout, QSizePolicy, QGridLayout, QUrl,
|
||||
QSpacerItem, QIcon, QCheckBox, QWidget, QHBoxLayout, QLineEdit,
|
||||
QPushButton, QMessageBox, QToolButton, Qt, QPlainTextEdit)
|
||||
|
||||
|
|
@ -315,6 +316,12 @@ def setup_ui(self, parent):
|
|||
self._box.setLayout(self._layout)
|
||||
self.widgets = [self._box]
|
||||
|
||||
def initialize(self, book_id):
|
||||
path = self.db.abspath(book_id, index_is_id=True)
|
||||
if path:
|
||||
self._tb.set_base_url(QUrl.fromLocalFile(os.path.join(path, 'metadata.html')))
|
||||
return Base.initialize(self, book_id)
|
||||
|
||||
def setter(self, val):
|
||||
if not val or not val.strip():
|
||||
val = ''
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
from calibre import fit_image
|
||||
from calibre.gui2 import NO_URL_FORMATTING, gprefs
|
||||
from calibre.gui2.book_details import css, details_context_menu_event, render_html
|
||||
from calibre.gui2.book_details import css, details_context_menu_event, render_html, set_html
|
||||
from calibre.gui2.ui import get_gui
|
||||
from calibre.gui2.widgets import CoverView
|
||||
from calibre.gui2.widgets2 import Dialog
|
||||
|
|
@ -275,7 +275,7 @@ def refresh(self, row, mi=None):
|
|||
self.cover_pixmap.setDevicePixelRatio(dpr)
|
||||
self.resize_cover()
|
||||
html = render_html(mi, self.css, True, self, pref_name='popup_book_display_fields')
|
||||
self.details.setHtml(html)
|
||||
set_html(mi, html, self.details)
|
||||
self.marked = mi.marked
|
||||
self.cover.setBackgroundBrush(self.marked_brush if mi.marked else self.normal_brush)
|
||||
self.update_cover_tooltip()
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
QLabel, QGridLayout, QApplication, QDoubleSpinBox, QListWidgetItem, QSize,
|
||||
QPixmap, QDialog, QMenu, QLineEdit, QSizePolicy, QKeySequence,
|
||||
QDialogButtonBox, QAction, QCalendarWidget, QDate, QDateTime, QUndoCommand,
|
||||
QUndoStack, QVBoxLayout, QPlainTextEdit)
|
||||
QUndoStack, QVBoxLayout, QPlainTextEdit, QUrl)
|
||||
|
||||
from calibre.gui2.widgets import EnLineEdit, FormatList as _FormatList, ImageView
|
||||
from calibre.gui2.widgets2 import access_key, populate_standard_spinbox_context_menu, RightClickButton, Dialog, RatingEditor
|
||||
|
|
@ -1247,6 +1247,9 @@ def fset(self, val):
|
|||
return property(fget=fget, fset=fset)
|
||||
|
||||
def initialize(self, db, id_):
|
||||
path = db.abspath(id_, index_is_id=True)
|
||||
if path:
|
||||
self.set_base_url(QUrl.fromLocalFile(os.path.join(path, 'metadata.html')))
|
||||
self.current_val = db.comments(id_, index_is_id=True)
|
||||
self.original_val = self.current_val
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue