summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2021-01-27 16:22:42 +0100
committerFlorian Bruhin <me@the-compiler.org>2021-01-27 17:10:32 +0100
commit5ee28105ad972dd635fcdc0ea56e5f82de478fb1 (patch)
tree9f9c7fa42ecde3563ef78d1fbd9df308d8248bc2
parent7ee0236184e063825d48113a851181b4c8356f9f (diff)
downloadqutebrowser-5ee28105ad972dd635fcdc0ea56e5f82de478fb1.tar.gz
qutebrowser-5ee28105ad972dd635fcdc0ea56e5f82de478fb1.zip
Show changelog after upgrades
-rw-r--r--doc/changelog.asciidoc2
-rw-r--r--doc/help/settings.asciidoc9
-rw-r--r--qutebrowser/app.py22
-rw-r--r--qutebrowser/config/configdata.yml5
-rw-r--r--qutebrowser/config/configfiles.py5
-rw-r--r--tests/unit/config/test_configfiles.py22
6 files changed, 65 insertions, 0 deletions
diff --git a/doc/changelog.asciidoc b/doc/changelog.asciidoc
index e90704896..4f48d219b 100644
--- a/doc/changelog.asciidoc
+++ b/doc/changelog.asciidoc
@@ -117,6 +117,8 @@ Added
remove the "Service Workers" directory on every start. Usage of this option is
generally discouraged, except in situations where the underlying QtWebEngine bug
is a known cause for crashes.
+- Changelogs are now shown after qutebrowser was upgraded. This can be disabled
+ via a new `changelog_after_upgrade` setting.
- New userscripts:
* `kodi` to play videos in Kodi
* `qr` to generate a QR code of the current URL
diff --git a/doc/help/settings.asciidoc b/doc/help/settings.asciidoc
index 67541c16b..8accac834 100644
--- a/doc/help/settings.asciidoc
+++ b/doc/help/settings.asciidoc
@@ -17,6 +17,7 @@
|<<bindings.commands,bindings.commands>>|Keybindings mapping keys to commands in different modes.
|<<bindings.default,bindings.default>>|Default keybindings. If you want to add bindings, modify `bindings.commands` instead.
|<<bindings.key_mappings,bindings.key_mappings>>|This setting can be used to map keys to other keys.
+|<<changelog_after_upgrade,changelog_after_upgrade>>|Whether to show a changelog after qutebrowser was upgraded.
|<<colors.completion.category.bg,colors.completion.category.bg>>|Background color of the completion widget category headers.
|<<colors.completion.category.border.bottom,colors.completion.category.border.bottom>>|Bottom border color of the completion widget category headers.
|<<colors.completion.category.border.top,colors.completion.category.border.top>>|Top border color of the completion widget category headers.
@@ -791,6 +792,14 @@ Default:
- +pass:[&lt;Shift-Enter&gt;]+: +pass:[&lt;Return&gt;]+
- +pass:[&lt;Shift-Return&gt;]+: +pass:[&lt;Return&gt;]+
+[[changelog_after_upgrade]]
+=== changelog_after_upgrade
+Whether to show a changelog after qutebrowser was upgraded.
+
+Type: <<types,Bool>>
+
+Default: +pass:[true]+
+
[[colors.completion.category.bg]]
=== colors.completion.category.bg
Background color of the completion widget category headers.
diff --git a/qutebrowser/app.py b/qutebrowser/app.py
index 51a5db8b7..249f8da1e 100644
--- a/qutebrowser/app.py
+++ b/qutebrowser/app.py
@@ -383,6 +383,28 @@ def _open_special_pages(args):
tabbed_browser.tabopen(QUrl(url), background=False)
general_sect[state] = '1'
+ # Show changelog on new releases
+ if not configfiles.state.qutebrowser_version_changed:
+ return
+ if not config.val.changelog_after_upgrade:
+ log.init.debug("Showing changelog is disabled")
+ return
+
+ try:
+ changelog = utils.read_file('html/doc/changelog.html')
+ except OSError as e:
+ log.init.warning(f"Not showing changelog due to {e}")
+ return
+
+ version = qutebrowser.__version__
+ if f'id="v{version}"' not in changelog:
+ log.init.warning("Not showing changelog (anchor not found)")
+ return
+
+ message.info(f"Showing changelog after upgrade to qutebrowser v{version}.")
+ changelog_url = f'qute://help/changelog.html#v{version}'
+ tabbed_browser.tabopen(QUrl(changelog_url), background=False)
+
def on_focus_changed(_old, new):
"""Register currently focused main window in the object registry."""
diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml
index e39193165..96ea5ee21 100644
--- a/qutebrowser/config/configdata.yml
+++ b/qutebrowser/config/configdata.yml
@@ -35,6 +35,11 @@ history_gap_interval:
Items with less time between them are grouped when being displayed in
`:history`. Use -1 to disable separation.
+changelog_after_upgrade:
+ type: Bool
+ default: true
+ desc: Whether to show a changelog after qutebrowser was upgraded.
+
ignore_case:
renamed: search.ignore_case
diff --git a/qutebrowser/config/configfiles.py b/qutebrowser/config/configfiles.py
index dcf1c9e5a..542e66eea 100644
--- a/qutebrowser/config/configfiles.py
+++ b/qutebrowser/config/configfiles.py
@@ -60,14 +60,19 @@ class StateConfig(configparser.ConfigParser):
self._filename = os.path.join(standarddir.data(), 'state')
self.read(self._filename, encoding='utf-8')
qt_version = qVersion()
+
# We handle this here, so we can avoid setting qt_version_changed if
# the config is brand new, but can still set it when qt_version wasn't
# there before...
if 'general' in self:
old_qt_version = self['general'].get('qt_version', None)
+ old_qutebrowser_version = self['general'].get('version', None)
self.qt_version_changed = old_qt_version != qt_version
+ self.qutebrowser_version_changed = (
+ old_qutebrowser_version != qutebrowser.__version__)
else:
self.qt_version_changed = False
+ self.qutebrowser_version_changed = False
for sect in ['general', 'geometry', 'inspector']:
try:
diff --git a/tests/unit/config/test_configfiles.py b/tests/unit/config/test_configfiles.py
index 8208a4d26..254ddade9 100644
--- a/tests/unit/config/test_configfiles.py
+++ b/tests/unit/config/test_configfiles.py
@@ -166,6 +166,28 @@ def test_qt_version_changed(data_tmpdir, monkeypatch,
assert state.qt_version_changed == changed
+@pytest.mark.parametrize('old_version, new_version, changed', [
+ (None, '2.0.0', False),
+ ('1.14.1', '1.14.1', False),
+ ('1.14.0', '1.14.1', True),
+ ('1.14.1', '2.0.0', True),
+])
+def test_qutebrowser_version_changed(
+ data_tmpdir, monkeypatch, old_version, new_version, changed):
+ monkeypatch.setattr(configfiles.qutebrowser, '__version__', lambda: new_version)
+
+ statefile = data_tmpdir / 'state'
+ if old_version is not None:
+ data = (
+ '[general]\n'
+ f'version = {old_version}'
+ )
+ statefile.write_text(data, 'utf-8')
+
+ state = configfiles.StateConfig()
+ assert state.qutebrowser_version_changed == changed
+
+
@pytest.fixture
def yaml(config_tmpdir):
return configfiles.YamlConfig()