Remove greasemonkey from objreg

See #640
This commit is contained in:
Florian Bruhin 2019-11-25 16:03:59 +01:00
parent fd27346504
commit 71e4e1788a
4 changed files with 25 additions and 13 deletions

View File

@ -39,6 +39,9 @@ from qutebrowser.browser import downloads
from qutebrowser.misc import objects
gm_manager = typing.cast('GreasemonkeyManager', None)
def _scripts_dir():
"""Get the directory of the scripts."""
return os.path.join(standarddir.data(), 'greasemonkey')
@ -263,9 +266,7 @@ class GreasemonkeyManager(QObject):
self.load_scripts()
@cmdutils.register(name='greasemonkey-reload',
instance='greasemonkey')
def load_scripts(self, force=False):
def load_scripts(self, *, force=False):
"""Re-read Greasemonkey scripts from disk.
The scripts are read from a 'greasemonkey' subdirectory in
@ -423,10 +424,24 @@ class GreasemonkeyManager(QObject):
return self._run_start + self._run_end + self._run_idle
@cmdutils.register()
def greasemonkey_reload(force=False):
"""Re-read Greasemonkey scripts from disk.
The scripts are read from a 'greasemonkey' subdirectory in
qutebrowser's data directory (see `:version`).
Args:
force: For any scripts that have required dependencies,
re-download them.
"""
gm_manager.load_scripts(force=force)
def init():
"""Initialize Greasemonkey support."""
global gm_manager
gm_manager = GreasemonkeyManager()
objreg.register('greasemonkey', gm_manager)
try:
os.mkdir(_scripts_dir())

View File

@ -33,7 +33,7 @@ from PyQt5.QtWebEngineWidgets import QWebEnginePage, QWebEngineScript
from qutebrowser.config import configdata, config
from qutebrowser.browser import (browsertab, eventfilter, shared, webelem,
history)
history, greasemonkey)
from qutebrowser.browser.webengine import (webview, webengineelem, tabhistory,
interceptor, webenginequtescheme,
cookies, webenginedownloads,
@ -899,7 +899,7 @@ class _WebEngineScripts(QObject):
super().__init__(parent)
self._tab = tab
self._widget = typing.cast(QWidget, None)
self._greasemonkey = objreg.get('greasemonkey')
self._greasemonkey = greasemonkey.gm_manager
def connect_signals(self):
"""Connect signals to our private slots."""

View File

@ -30,7 +30,7 @@ from PyQt5.QtPrintSupport import QPrintDialog
from PyQt5.QtWebKitWidgets import QWebPage, QWebFrame
from qutebrowser.config import config
from qutebrowser.browser import pdfjs, shared, downloads
from qutebrowser.browser import pdfjs, shared, downloads, greasemonkey
from qutebrowser.browser.webkit import http
from qutebrowser.browser.webkit.network import networkmanager
from qutebrowser.utils import message, usertypes, log, jinja, objreg
@ -305,8 +305,7 @@ class BrowserPage(QWebPage):
log.greasemonkey.debug("_inject_userjs called for {} ({})"
.format(frame, url.toDisplayString()))
greasemonkey = objreg.get('greasemonkey')
scripts = greasemonkey.scripts_for(url)
scripts = greasemonkey.gm_manager.scripts_for(url)
# QtWebKit has trouble providing us with signals representing
# page load progress at reasonable times, so we just load all
# scripts on the same event.

View File

@ -158,11 +158,9 @@ def fake_web_tab(stubs, tab_registry, mode_manager, qapp):
@pytest.fixture
def greasemonkey_manager(data_tmpdir):
def greasemonkey_manager(monkeypatch, data_tmpdir):
gm_manager = greasemonkey.GreasemonkeyManager()
objreg.register('greasemonkey', gm_manager)
yield
objreg.delete('greasemonkey')
monkeypatch.setattr(greasemonkey, 'gm_manager', gm_manager)
@pytest.fixture(scope='session')