From b22073e1707c96945d09b51922424f483b60119a Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 25 Apr 2019 11:54:30 +0200 Subject: [PATCH] Add timeout for manual IP requests CURA-6483 --- cura/Machines/Models/DiscoveredPrintersModel.py | 16 +++++++++++++++- .../qml/WelcomePages/AddPrinterByIpContent.qml | 9 +++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/cura/Machines/Models/DiscoveredPrintersModel.py b/cura/Machines/Models/DiscoveredPrintersModel.py index 3c7ffe1388..3d2ca546f3 100644 --- a/cura/Machines/Models/DiscoveredPrintersModel.py +++ b/cura/Machines/Models/DiscoveredPrintersModel.py @@ -3,7 +3,7 @@ from typing import Callable, Dict, List, Optional, TYPE_CHECKING -from PyQt5.QtCore import pyqtSlot, pyqtProperty, pyqtSignal, QObject +from PyQt5.QtCore import pyqtSlot, pyqtProperty, pyqtSignal, QObject, QTimer from UM.i18n import i18nCatalog from UM.Logger import Logger @@ -109,6 +109,12 @@ class DiscoveredPrintersModel(QObject): self._plugin_for_manual_device = None # type: Optional[OutputDevicePlugin] self._manual_device_address = "" + self._manual_device_request_timeout_in_seconds = 5 # timeout for adding a manual device in seconds + self._manual_device_request_timer = QTimer() + self._manual_device_request_timer.setInterval(self._manual_device_request_timeout_in_seconds * 1000) + self._manual_device_request_timer.setSingleShot(True) + self._manual_device_request_timer.timeout.connect(self._onManualRequestTimeout) + discoveredPrintersChanged = pyqtSignal() @pyqtSlot(str) @@ -137,10 +143,13 @@ class DiscoveredPrintersModel(QObject): self._plugin_for_manual_device = plugin self._plugin_for_manual_device.addManualDevice(address, callback = self._onManualDeviceRequestFinished) self._manual_device_address = address + self._manual_device_request_timer.start() self.hasManualDeviceRequestInProgressChanged.emit() @pyqtSlot() def cancelCurrentManualDeviceRequest(self) -> None: + self._manual_device_request_timer.stop() + if self._manual_device_address: if self._plugin_for_manual_device is not None: self._plugin_for_manual_device.removeManualDevice(self._manual_device_address, address = self._manual_device_address) @@ -149,6 +158,10 @@ class DiscoveredPrintersModel(QObject): self.hasManualDeviceRequestInProgressChanged.emit() self.manualDeviceRequestFinished.emit(False) + def _onManualRequestTimeout(self) -> None: + Logger.log("w", "Manual printer [%s] request timed out. Cancel the current request.", self._manual_device_address) + self.cancelCurrentManualDeviceRequest() + hasManualDeviceRequestInProgressChanged = pyqtSignal() @pyqtProperty(bool, notify = hasManualDeviceRequestInProgressChanged) @@ -158,6 +171,7 @@ class DiscoveredPrintersModel(QObject): manualDeviceRequestFinished = pyqtSignal(bool, arguments = ["success"]) def _onManualDeviceRequestFinished(self, success: bool, address: str) -> None: + self._manual_device_request_timer.stop() if address == self._manual_device_address: self._manual_device_address = "" self.hasManualDeviceRequestInProgressChanged.emit() diff --git a/resources/qml/WelcomePages/AddPrinterByIpContent.qml b/resources/qml/WelcomePages/AddPrinterByIpContent.qml index 663d2fd12a..402d56ab22 100644 --- a/resources/qml/WelcomePages/AddPrinterByIpContent.qml +++ b/resources/qml/WelcomePages/AddPrinterByIpContent.qml @@ -26,6 +26,15 @@ Item property var discoveredPrinter: null property var isPrinterDiscovered: discoveredPrinter != null + // Make sure to cancel the current request when this page closes. + onVisibleChanged: + { + if (!visible) + { + CuraApplication.getDiscoveredPrintersModel().cancelCurrentManualDeviceRequest() + } + } + Label { id: titleLabel