Browse Source

Add timeout for manual IP requests

CURA-6483
Lipu Fei 5 years ago
parent
commit
b22073e170

+ 15 - 1
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()

+ 9 - 0
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