Propagate "update check" prompt to UI checkbox

The "check for updates" button wasn't showing up immediately as checked
as soon as the user is prompted for checking updates. This fixes that.

Fixes #513
This commit is contained in:
deeplow 2023-08-14 16:36:33 +01:00
parent 89365b585c
commit 1695cc7a6c
No known key found for this signature in database
GPG key ID: 577982871529A52A
4 changed files with 16 additions and 3 deletions

View file

@ -123,6 +123,7 @@ def gui_main(
# Check for updates
log.debug("Setting up Dangezone updater")
updater = UpdaterThread(dangerzone)
updater.update_check_toggled.connect(window.refresh_updates_checkbox)
window.register_update_handler(updater.finished)
log.debug("Consulting updater settings before checking for updates")

View file

@ -229,6 +229,11 @@ class MainWindow(QtWidgets.QMainWindow):
self.dangerzone.settings.set("updater_check", check)
self.dangerzone.settings.save()
def refresh_updates_checkbox(self) -> None:
"""Refreshes the "check for updates" checkbox according to the settings"""
check = self.dangerzone.settings.get("updater_check")
self.toggle_updates_action.setChecked(check)
def handle_updates(self, report: UpdateReport) -> None:
"""Handle update reports from the update checker thread.

View file

@ -108,6 +108,7 @@ class UpdaterThread(QtCore.QThread):
"""
finished = QtCore.Signal(UpdateReport)
update_check_toggled = QtCore.Signal()
GH_RELEASE_URL = (
"https://api.github.com/repos/freedomofpress/dangerzone/releases/latest"
@ -177,6 +178,7 @@ class UpdaterThread(QtCore.QThread):
if self.check is None:
log.debug("User has not been asked yet for update checks")
self.check = self.prompt_for_checks()
self.update_check_toggled.emit()
return bool(self.check)
elif not self.check:
log.debug("User has expressed that they don't want to check for updates")

View file

@ -141,7 +141,10 @@ def test_linux_no_check(updater: UpdaterThread, monkeypatch: MonkeyPatch) -> Non
def test_user_prompts(
updater: UpdaterThread, monkeypatch: MonkeyPatch, mocker: MockerFixture
qtbot: QtBot,
updater: UpdaterThread,
monkeypatch: MonkeyPatch,
mocker: MockerFixture,
) -> None:
"""Test prompting users to ask them if they want to enable update checks."""
# First run
@ -165,8 +168,10 @@ def test_user_prompts(
# Check disabling update checks.
prompt_mock().launch.return_value = False # type: ignore [attr-defined]
expected_settings["updater_check"] = False
assert updater.should_check_for_updates() == False
assert updater.dangerzone.settings.get_updater_settings() == expected_settings
with qtbot.waitSignal(updater.update_check_toggled) as blocker:
assert updater.should_check_for_updates() == False
assert updater.dangerzone.settings.get_updater_settings() == expected_settings
# Reset the "updater_check" field and check enabling update checks.
updater.dangerzone.settings.set("updater_check", None)