Prepare for moving adblocker to extension API

This commit is contained in:
Florian Bruhin 2018-12-10 14:29:01 +01:00
parent 8806c0925e
commit 3d6f604739
3 changed files with 27 additions and 23 deletions

View File

@ -468,11 +468,6 @@ def _init_modules(args, crash_handler):
log.init.debug("Initializing websettings...")
websettings.init(args)
log.init.debug("Initializing adblock...")
host_blocker = adblock.HostBlocker()
host_blocker.read_hosts()
objreg.register('host-blocker', host_blocker)
log.init.debug("Initializing quickmarks...")
quickmark_manager = urlmarks.QuickmarkManager(qApp)
objreg.register('quickmark-manager', quickmark_manager)

View File

@ -24,11 +24,12 @@ import os.path
import functools
import posixpath
import zipfile
import logging
from qutebrowser.api import downloads
from qutebrowser.config import config
from qutebrowser.utils import objreg, standarddir, log, message
from qutebrowser.api import cmdutils
from qutebrowser.api import cmdutils, hook, config, message, downloads
logger = logging.getLogger('misc')
def _guess_zip_filename(zf):
@ -95,18 +96,17 @@ class HostBlocker:
_config_hosts_file: The path to a blocked-hosts in ~/.config
"""
def __init__(self):
def __init__(self, *, data_dir, config_dir, args):
self._args = args
self._blocked_hosts = set()
self._config_blocked_hosts = set()
self._in_progress = []
self._done_count = 0
data_dir = standarddir.data()
self._local_hosts_file = os.path.join(data_dir, 'blocked-hosts')
self._local_hosts_file = str(data_dir / 'blocked-hosts')
self._update_files()
config_dir = standarddir.config()
self._config_hosts_file = os.path.join(config_dir, 'blocked-hosts')
self._config_hosts_file = str(config_dir / 'blocked-hosts')
config.instance.changed.connect(self._update_files)
@ -141,7 +141,7 @@ class HostBlocker:
for line in f:
target.add(line.strip())
except (OSError, UnicodeDecodeError):
log.misc.exception("Failed to read host blocklist!")
logger.exception("Failed to read host blocklist!")
return True
@ -156,9 +156,8 @@ class HostBlocker:
self._blocked_hosts)
if not found:
args = objreg.get('args')
if (config.val.content.host_blocking.lists and
args.basedir is None and
self._args.basedir is None and
config.val.content.host_blocking.enabled):
message.info("Run :adblock-update to get adblock lists.")
@ -221,7 +220,7 @@ class HostBlocker:
try:
line = line.decode('utf-8')
except UnicodeDecodeError:
log.misc.error("Failed to decode: {!r}".format(line))
logger.error("Failed to decode: {!r}".format(line))
return False
# Remove comments
@ -277,7 +276,7 @@ class HostBlocker:
if not ok:
error_count += 1
log.misc.debug("{}: read {} lines".format(byte_io.name, line_count))
logger.debug("{}: read {} lines".format(byte_io.name, line_count))
if error_count > 0:
message.error("adblock: {} read errors for {}".format(
error_count, byte_io.name))
@ -299,7 +298,7 @@ class HostBlocker:
except FileNotFoundError:
pass
except OSError as e:
log.misc.exception("Failed to delete hosts file: {}".format(e))
logger.exception("Failed to delete hosts file: {}".format(e))
def _on_download_finished(self, download):
"""Check if all downloads are finished and if so, trigger reading.
@ -318,4 +317,12 @@ class HostBlocker:
try:
self._on_lists_downloaded()
except OSError:
log.misc.exception("Failed to write host block list!")
logger.exception("Failed to write host block list!")
@hook.init()
def init(context):
host_blocker = HostBlocker(data_dir=context.data_dir,
config_dir=context.config_dir,
args=context.args)
host_blocker.read_hosts()

View File

@ -29,7 +29,7 @@ import pathlib
import attr
from qutebrowser import components
from qutebrowser.utils import log, standarddir
from qutebrowser.utils import log, standarddir, objreg
@attr.s
@ -39,6 +39,7 @@ class InitContext:
data_dir = attr.ib() # type: pathlib.Path
config_dir = attr.ib() # type: pathlib.Path
args = attr.ib() # type: argparse.Namespace
@attr.s
@ -119,7 +120,8 @@ def _walk_pyinstaller() -> typing.Iterator[ExtensionInfo]:
def _get_init_context() -> InitContext:
"""Get an InitContext object."""
return InitContext(data_dir=pathlib.Path(standarddir.data()),
config_dir=pathlib.Path(standarddir.config()))
config_dir=pathlib.Path(standarddir.config()),
args=objreg.get('args'))
def _load_component(info: ExtensionInfo) -> types.ModuleType: