From 54c827fd4411f79c7ec9eea75ddd116d2c64d089 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 7 Jun 2018 13:43:43 +0200 Subject: [PATCH] Do not run firmware update check jobs in parallel CURA-5418 To avoid showing multiple update messages. --- .../FirmwareUpdateChecker.py | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py index 23a040f2e2..bc216ab395 100644 --- a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py +++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py @@ -8,10 +8,11 @@ from UM.Extension import Extension from UM.Preferences import Preferences from UM.Logger import Logger from UM.i18n import i18nCatalog +from UM.Settings.ContainerRegistry import ContainerRegistry + from cura.Settings.GlobalStack import GlobalStack from .FirmwareUpdateCheckerJob import FirmwareUpdateCheckerJob -from UM.Settings.ContainerRegistry import ContainerRegistry i18n_catalog = i18nCatalog("cura") @@ -36,6 +37,7 @@ class FirmwareUpdateChecker(Extension): ContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded) self._download_url = None + self._check_job = None ## Callback for the message that is spawned when there is a new version. def _onActionTriggered(self, message, action): @@ -51,6 +53,9 @@ class FirmwareUpdateChecker(Extension): if isinstance(container, GlobalStack): self.checkFirmwareVersion(container, True) + def _onJobFinished(self, *args, **kwargs): + self._check_job = None + ## Connect with software.ultimaker.com, load latest.version and check version info. # If the version info is different from the current version, spawn a message to # allow the user to download it. @@ -58,7 +63,13 @@ class FirmwareUpdateChecker(Extension): # \param silent type(boolean) Suppresses messages other than "new version found" messages. # This is used when checking for a new firmware version at startup. def checkFirmwareVersion(self, container = None, silent = False): - job = FirmwareUpdateCheckerJob(container = container, silent = silent, url = self.JEDI_VERSION_URL, - callback = self._onActionTriggered, - set_download_url_callback = self._onSetDownloadUrl) - job.start() + # Do not run multiple check jobs in parallel + if self._check_job is not None: + Logger.log("i", "A firmware update check is already running, do nothing.") + return + + self._check_job = FirmwareUpdateCheckerJob(container = container, silent = silent, url = self.JEDI_VERSION_URL, + callback = self._onActionTriggered, + set_download_url_callback = self._onSetDownloadUrl) + self._check_job.start() + self._check_job.finished.connect(self._onJobFinished)