From dac41a87f84de591fe9466161b6bba29846f952e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexis=20M=C3=A9taireau?= Date: Tue, 3 Dec 2024 17:34:31 +0100 Subject: [PATCH] fixup! Display a button if Docker Desktop needs an update --- dangerzone/gui/main_window.py | 48 ++++++++++++++++++++-- dangerzone/isolation_provider/container.py | 2 +- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/dangerzone/gui/main_window.py b/dangerzone/gui/main_window.py index a94f3c2..782da4b 100644 --- a/dangerzone/gui/main_window.py +++ b/dangerzone/gui/main_window.py @@ -236,6 +236,12 @@ class MainWindow(QtWidgets.QMainWindow): self.setProperty("OSColorMode", self.dangerzone.app.os_color_mode.value) self.show() + print("Checking Docker Desktop version") + is_version_valid, version = ( + self.dangerzone.isolation_provider.check_docker_desktop_version() + ) + if not is_version_valid: + self.handle_docker_desktop_version_check(is_version_valid, version) def show_update_success(self) -> None: """Inform the user about a new Dangerzone release.""" @@ -288,6 +294,44 @@ class MainWindow(QtWidgets.QMainWindow): self.dangerzone.settings.set("updater_check", check) self.dangerzone.settings.save() + def handle_docker_desktop_version_check( + self, is_version_valid: bool, version: str + ) -> None: + hamburger_menu = self.hamburger_button.menu() + sep = hamburger_menu.insertSeparator(hamburger_menu.actions()[0]) + error_action = QAction("Docker Desktop should be upgraded", hamburger_menu) + error_action.setIcon( + QtGui.QIcon( + load_svg_image( + "hamburger_menu_update_dot_error.svg", width=64, height=64 + ) + ) + ) + + def _show_alert() -> None: + message = """ +

Your Docker Desktop version is too old. Please upgrade to a more recent version.

+

Visit the Docker Desktop website to download the latest version.

+ Updating Docker Desktop allows you to have more confidence that you can process your documents safely. + """ + widget = Alert( + self.dangerzone, + title="Your Docker Desktop version should be upgraded", + message=message, + ok_text="Ok", + has_cancel=False, + ) + widget.launch() + + error_action.triggered.connect(_show_alert) + hamburger_menu.insertAction(sep, error_action) + + self.hamburger_button.setIcon( + QtGui.QIcon( + load_svg_image("hamburger_menu_update_error.svg", width=64, height=64) + ) + ) + def handle_updates(self, report: UpdateReport) -> None: """Handle update reports from the update checker thread. @@ -500,10 +544,6 @@ class WaitingWidgetContainer(WaitingWidget): error: Optional[str] = None try: - is_greater, version = self.dangerzone.isolation_provider.check_docker_desktop_version() - if not is_greater: - error = f"Your Docker version is too old ({version})." - print(error) self.dangerzone.isolation_provider.is_runtime_available() except NoContainerTechException as e: log.error(str(e)) diff --git a/dangerzone/isolation_provider/container.py b/dangerzone/isolation_provider/container.py index 76e1a4d..91a50e3 100644 --- a/dangerzone/isolation_provider/container.py +++ b/dangerzone/isolation_provider/container.py @@ -205,7 +205,7 @@ class Container(IsolationProvider): # On windows and darwin, check that the minimum version is met if platform.system() != "Linux": with subprocess.Popen( - ["docker", "version", "--format", "{{.Server.Platform.Name}}"], + ["docker", "version", "--format", "{{.Server.Platform.Name}}"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=get_subprocess_startupinfo(),