summaryrefslogtreecommitdiff
path: root/qutebrowser/config/configfiles.py
diff options
context:
space:
mode:
Diffstat (limited to 'qutebrowser/config/configfiles.py')
-rw-r--r--qutebrowser/config/configfiles.py83
1 files changed, 76 insertions, 7 deletions
diff --git a/qutebrowser/config/configfiles.py b/qutebrowser/config/configfiles.py
index 412f88e54..d88e3e91d 100644
--- a/qutebrowser/config/configfiles.py
+++ b/qutebrowser/config/configfiles.py
@@ -33,7 +33,7 @@ from typing import (TYPE_CHECKING, Any, Dict, Iterable, Iterator, List, Mapping,
MutableMapping, Optional, Tuple, cast)
import yaml
-from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, QSettings, qVersion
+from qutebrowser.qt.core import pyqtSignal, pyqtSlot, QObject, QSettings, qVersion
import qutebrowser
from qutebrowser.config import (configexc, config, configdata, configutils,
@@ -91,6 +91,7 @@ class StateConfig(configparser.ConfigParser):
self.qt_version_changed = False
self.qtwe_version_changed = False
self.qutebrowser_version_changed = VersionChange.unknown
+ self.chromium_version_changed = VersionChange.unknown
self._set_changed_attributes()
for sect in ['general', 'geometry', 'inspector']:
@@ -103,6 +104,7 @@ class StateConfig(configparser.ConfigParser):
('general', 'fooled'),
('general', 'backend-warning-shown'),
('general', 'old-qt-warning-shown'),
+ ('general', 'serviceworker_workaround'),
('geometry', 'inspector'),
]
for sect, key in deleted_keys:
@@ -110,18 +112,40 @@ class StateConfig(configparser.ConfigParser):
self['general']['qt_version'] = qVersion()
self['general']['qtwe_version'] = self._qtwe_version_str()
+ self['general']['chromium_version'] = self._chromium_version_str()
self['general']['version'] = qutebrowser.__version__
- def _qtwe_version_str(self) -> str:
- """Get the QtWebEngine version string.
+ def _has_webengine(self) -> bool:
+ """Check if QtWebEngine is available.
Note that it's too early to use objects.backend here...
"""
try:
- import PyQt5.QtWebEngineWidgets # pylint: disable=unused-import
+ # pylint: disable=unused-import,redefined-outer-name
+ import qutebrowser.qt.webenginewidgets
except ImportError:
+ return False
+ return True
+
+ def _qtwe_versions(self) -> Optional[version.WebEngineVersions]:
+ """Get the QtWebEngine versions."""
+ if not self._has_webengine():
+ return None
+ return version.qtwebengine_versions(avoid_init=True)
+
+ def _qtwe_version_str(self) -> str:
+ """Get the QtWebEngine version string."""
+ versions = self._qtwe_versions()
+ if versions is None:
+ return 'no'
+ return str(versions.webengine)
+
+ def _chromium_version_str(self) -> str:
+ """Get the Chromium major version string."""
+ versions = self._qtwe_versions()
+ if versions is None:
return 'no'
- return str(version.qtwebengine_versions(avoid_init=True).webengine)
+ return str(versions.chromium_major)
def _set_changed_attributes(self) -> None:
"""Set qt_version_changed/qutebrowser_version_changed attributes.
@@ -139,6 +163,11 @@ class StateConfig(configparser.ConfigParser):
old_qtwe_version = self['general'].get('qtwe_version', None)
self.qtwe_version_changed = old_qtwe_version != self._qtwe_version_str()
+ self._set_qutebrowser_changed_attribute()
+ self._set_chromium_changed_attribute()
+
+ def _set_qutebrowser_changed_attribute(self) -> None:
+ """Detect a qutebrowser version change."""
old_qutebrowser_version = self['general'].get('version', None)
if old_qutebrowser_version is None:
return
@@ -162,6 +191,46 @@ class StateConfig(configparser.ConfigParser):
else:
self.qutebrowser_version_changed = VersionChange.major
+ def _set_chromium_changed_attribute(self) -> None:
+ if not self._has_webengine():
+ return
+
+ old_chromium_version_str = self['general'].get('chromium_version', None)
+ if old_chromium_version_str in ['no', None]:
+ old_qtwe_version = self['general'].get('qtwe_version', None)
+ if old_qtwe_version in ['no', None]:
+ return
+
+ try:
+ old_chromium_version = version.WebEngineVersions.from_webengine(
+ old_qtwe_version, source='config').chromium_major
+ except ValueError:
+ log.init.warning(
+ f"Unable to parse old QtWebEngine version {old_qtwe_version}")
+ return
+ else:
+ try:
+ old_chromium_version = int(old_chromium_version_str)
+ except ValueError:
+ log.init.warning(
+ f"Unable to parse old Chromium version {old_chromium_version_str}")
+ return
+
+ new_versions = version.qtwebengine_versions(avoid_init=True)
+ new_chromium_version = new_versions.chromium_major
+
+ if old_chromium_version is None or new_chromium_version is None:
+ return
+
+ if old_chromium_version <= 87 and new_chromium_version >= 90: # Qt 5 -> Qt 6
+ self.chromium_version_changed = VersionChange.major
+ elif old_chromium_version > new_chromium_version:
+ self.chromium_version_changed = VersionChange.downgrade
+ elif old_chromium_version == new_chromium_version:
+ self.chromium_version_changed = VersionChange.equal
+ else:
+ self.chromium_version_changed = VersionChange.minor
+
def init_save_manager(self,
save_manager: 'savemanager.SaveManager') -> None:
"""Make sure the config gets saved properly.
@@ -989,5 +1058,5 @@ def init() -> None:
# https://github.com/qutebrowser/qutebrowser/issues/515
path = os.path.join(standarddir.config(auto=True), 'qsettings')
- for fmt in [QSettings.NativeFormat, QSettings.IniFormat]:
- QSettings.setPath(fmt, QSettings.UserScope, path)
+ for fmt in [QSettings.Format.NativeFormat, QSettings.Format.IniFormat]:
+ QSettings.setPath(fmt, QSettings.Scope.UserScope, path)