Try to always set the default webengine profile's cache path to the calibre cache directory

This commit is contained in:
Kovid Goyal 2022-07-14 12:09:24 +05:30
parent 0e044aa866
commit a6adb4c1e9
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
8 changed files with 36 additions and 15 deletions

View File

@ -39,6 +39,7 @@ isworker = hasenv('CALIBRE_WORKER') or hasenv('CALIBRE_SIMPLE_WORKER')
if isworker:
os.environ.pop(environ_item('CALIBRE_FORCE_ANSI'), None)
FAKE_PROTOCOL, FAKE_HOST = 'clbr', 'internal.invalid'
SPECIAL_TITLE_FOR_WEBENGINE_COMMS = '__webengine_messages_pending__'
VIEWER_APP_UID = 'com.calibre-ebook.viewer'
EDITOR_APP_UID = 'com.calibre-ebook.edit-book'
MAIN_APP_UID = 'com.calibre-ebook.main-gui'

View File

@ -155,6 +155,8 @@ class PDFOutput(OutputFormatPlugin):
scheme.setFlags(QWebEngineUrlScheme.Flag.SecureScheme)
QWebEngineUrlScheme.registerScheme(scheme)
must_use_qt()
from calibre.utils.webengine import setup_default_profile
setup_default_profile()
self.input_fmt = input_fmt
if opts.pdf_use_document_margins:

View File

@ -99,6 +99,8 @@ def main(path_to_html, tdir, image_format='jpeg'):
if image_format not in ('jpeg', 'png'):
raise ValueError('Image format must be either jpeg or png')
must_use_qt()
from calibre.utils.webengine import setup_default_profile
setup_default_profile()
path_to_html = os.path.abspath(path_to_html)
os.chdir(tdir)
renderer = Render()

View File

@ -1188,6 +1188,8 @@ def main(shm_name=None):
override = 'calibre-gui' if islinux else None
app = Application([], override_program_name=override)
from calibre.utils.webengine import setup_default_profile
setup_default_profile()
d = TOCEditor(path, title=title, write_result_to=path + '.result')
d.start()
ok = 0

View File

@ -71,6 +71,8 @@ def _run(args, notify=None):
decouple('edit-book-'), set_gui_prefs(tprefs)
override = 'calibre-ebook-edit' if islinux else None
app = Application(args, override_program_name=override, color_prefs=tprefs, windows_app_uid=EDITOR_APP_UID)
from calibre.utils.webengine import setup_default_profile
setup_default_profile()
app.file_event_hook = EventAccumulator()
app.load_builtin_fonts()
app.setWindowIcon(QIcon.ic('tweak.png'))

View File

@ -5,15 +5,15 @@
import json
import os
import sys
from contextlib import closing
from qt.core import QIcon, QObject, Qt, QTimer, pyqtSignal
from qt.webengine import QWebEngineUrlScheme
from contextlib import closing
from calibre.constants import FAKE_PROTOCOL, VIEWER_APP_UID, islinux
from calibre.gui2 import Application, error_dialog, setup_gui_option_parser
from calibre.gui2.listener import send_message_in_process
from calibre.gui2.viewer.config import get_session_pref, vprefs
from calibre.gui2.viewer.ui import EbookViewer, is_float
from calibre.gui2.listener import send_message_in_process
from calibre.ptempfile import reset_base_dir
from calibre.utils.config import JSONConfig
from calibre.utils.ipc import viewer_socket_address
@ -194,6 +194,8 @@ def main(args=sys.argv):
pass
args = processed_args
app = Application(args, override_program_name=override, windows_app_uid=VIEWER_APP_UID)
from calibre.utils.webengine import setup_default_profile
setup_default_profile()
parser = option_parser()
opts, args = parser.parse_args(args)
@ -204,8 +206,8 @@ def main(args=sys.argv):
raise SystemExit(f'Not a valid --open-at value: {opts.open_at}')
if get_session_pref('singleinstance', False):
from calibre.utils.lock import SingleInstance
from calibre.gui2.listener import Listener
from calibre.utils.lock import SingleInstance
with SingleInstance(singleinstance_name) as si:
if si:
try:

View File

@ -11,15 +11,15 @@ import sys
from calibre import force_unicode
from calibre.constants import (
FAKE_HOST, FAKE_PROTOCOL, __appname__, __version__, builtin_colors_dark,
builtin_colors_light, builtin_decorations, dark_link_color
FAKE_HOST, FAKE_PROTOCOL, SPECIAL_TITLE_FOR_WEBENGINE_COMMS, __appname__,
__version__, builtin_colors_dark, builtin_colors_light, builtin_decorations,
dark_link_color
)
from calibre.ptempfile import TemporaryDirectory
from calibre.utils.filenames import atomic_rename
from polyglot.builtins import as_bytes, as_unicode, exec_path
COMPILER_PATH = 'rapydscript/compiler.js.xz'
special_title = '__webengine_messages_pending__'
def abspath(x):
@ -59,8 +59,9 @@ def compiler():
from calibre import walk
from calibre.gui2 import must_use_qt
from calibre.utils.webengine import secure_webengine
from calibre.utils.webengine import secure_webengine, setup_default_profile
must_use_qt()
setup_default_profile()
with lzma.open(P(COMPILER_PATH, allow_user_override=False)) as lzf:
compiler_script = lzf.read().decode('utf-8')
@ -124,7 +125,7 @@ document.title = 'compiler initialized';
class Compiler(QWebEnginePage):
def __init__(self):
QWebEnginePage.__init__(self)
super().__init__()
self.errors = []
secure_webengine(self)
script = compiler_script
@ -330,17 +331,19 @@ def atomic_write(base, name, content):
def run_rapydscript_tests():
from urllib.parse import parse_qs
from qt.core import QApplication, QByteArray, QEventLoop, QUrl
from qt.webengine import (
QWebEnginePage, QWebEngineProfile, QWebEngineScript, QWebEngineUrlRequestJob,
QWebEngineUrlScheme, QWebEngineUrlSchemeHandler
)
from urllib.parse import parse_qs
from calibre.constants import FAKE_HOST, FAKE_PROTOCOL
from calibre.gui2 import must_use_qt
from calibre.gui2.viewer.web_view import send_reply
from calibre.utils.webengine import secure_webengine, insert_scripts, create_script
from calibre.utils.webengine import (
create_script, insert_scripts, secure_webengine
)
must_use_qt()
scheme = QWebEngineUrlScheme(FAKE_PROTOCOL.encode('ascii'))
scheme.setSyntax(QWebEngineUrlScheme.Syntax.Host)
@ -418,7 +421,7 @@ def run_rapydscript_tests():
def set_data(src, **kw):
for k, v in {
'__SPECIAL_TITLE__': special_title,
'__SPECIAL_TITLE__': SPECIAL_TITLE_FOR_WEBENGINE_COMMS,
'__FAKE_PROTOCOL__': FAKE_PROTOCOL,
'__FAKE_HOST__': FAKE_HOST,
'__CALIBRE_VERSION__': __version__,

View File

@ -3,11 +3,18 @@
# License: GPL v3 Copyright: 2021, Kovid Goyal <kovid at kovidgoyal.net>
import json
import json, os
from qt.core import QBuffer, QIODevice, QObject, pyqtSignal, sip
from qt.webengine import QWebEngineScript, QWebEngineSettings
from qt.webengine import QWebEngineScript, QWebEngineSettings, QWebEngineProfile
from calibre.utils.rapydscript import special_title
from calibre.constants import cache_dir, SPECIAL_TITLE_FOR_WEBENGINE_COMMS
def setup_default_profile():
p = QWebEngineProfile.defaultProfile()
q = os.path.join(cache_dir(), 'qt-webeng')
if p.cachePath() != q:
p.setCachePath(q)
def send_reply(rq, mime_type, data):
@ -112,7 +119,7 @@ class Bridge(QObject):
return self._signals_registered
def _title_changed(self, title):
if title.startswith(special_title):
if title.startswith(SPECIAL_TITLE_FOR_WEBENGINE_COMMS):
self._poll_for_messages()
def _register_signals(self):