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 # Check for updates
log.debug("Setting up Dangezone updater") log.debug("Setting up Dangezone updater")
updater = UpdaterThread(dangerzone) updater = UpdaterThread(dangerzone)
updater.update_check_toggled.connect(window.refresh_updates_checkbox)
window.register_update_handler(updater.finished) window.register_update_handler(updater.finished)
log.debug("Consulting updater settings before checking for updates") 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.set("updater_check", check)
self.dangerzone.settings.save() 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: def handle_updates(self, report: UpdateReport) -> None:
"""Handle update reports from the update checker thread. """Handle update reports from the update checker thread.

View file

@ -108,6 +108,7 @@ class UpdaterThread(QtCore.QThread):
""" """
finished = QtCore.Signal(UpdateReport) finished = QtCore.Signal(UpdateReport)
update_check_toggled = QtCore.Signal()
GH_RELEASE_URL = ( GH_RELEASE_URL = (
"https://api.github.com/repos/freedomofpress/dangerzone/releases/latest" "https://api.github.com/repos/freedomofpress/dangerzone/releases/latest"
@ -177,6 +178,7 @@ class UpdaterThread(QtCore.QThread):
if self.check is None: if self.check is None:
log.debug("User has not been asked yet for update checks") log.debug("User has not been asked yet for update checks")
self.check = self.prompt_for_checks() self.check = self.prompt_for_checks()
self.update_check_toggled.emit()
return bool(self.check) return bool(self.check)
elif not self.check: elif not self.check:
log.debug("User has expressed that they don't want to check for updates") 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( def test_user_prompts(
updater: UpdaterThread, monkeypatch: MonkeyPatch, mocker: MockerFixture qtbot: QtBot,
updater: UpdaterThread,
monkeypatch: MonkeyPatch,
mocker: MockerFixture,
) -> None: ) -> None:
"""Test prompting users to ask them if they want to enable update checks.""" """Test prompting users to ask them if they want to enable update checks."""
# First run # First run
@ -165,8 +168,10 @@ def test_user_prompts(
# Check disabling update checks. # Check disabling update checks.
prompt_mock().launch.return_value = False # type: ignore [attr-defined] prompt_mock().launch.return_value = False # type: ignore [attr-defined]
expected_settings["updater_check"] = False 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. # Reset the "updater_check" field and check enabling update checks.
updater.dangerzone.settings.set("updater_check", None) updater.dangerzone.settings.set("updater_check", None)