Просмотр исходного кода

Merge branch 'master' of https://github.com/loociano/Cura

Jaime van Kessel 4 лет назад
Родитель
Сommit
dff4771fae
1 измененных файлов с 20 добавлено и 9 удалено
  1. 20 9
      cura/Machines/Models/DiscoveredPrintersModel.py

+ 20 - 9
cura/Machines/Models/DiscoveredPrintersModel.py

@@ -129,6 +129,7 @@ class DiscoveredPrintersModel(QObject):
         self._discovered_printer_by_ip_dict = dict()  # type: Dict[str, DiscoveredPrinter]
 
         self._plugin_for_manual_device = None  # type: Optional[OutputDevicePlugin]
+        self._network_plugin_queue = []  # type: List[OutputDevicePlugin]
         self._manual_device_address = ""
 
         self._manual_device_request_timeout_in_seconds = 5  # timeout for adding a manual device in seconds
@@ -153,20 +154,25 @@ class DiscoveredPrintersModel(QObject):
 
         all_plugins_dict = self._application.getOutputDeviceManager().getAllOutputDevicePlugins()
 
-        can_add_manual_plugins = [item for item in filter(
+        self._network_plugin_queue = [item for item in filter(
             lambda plugin_item: plugin_item.canAddManualDevice(address) in priority_order,
             all_plugins_dict.values())]
 
-        if not can_add_manual_plugins:
+        if not self._network_plugin_queue:
             Logger.log("d", "Could not find a plugin to accept adding %s manually via address.", address)
             return
 
-        plugin = max(can_add_manual_plugins, key = lambda p: priority_order.index(p.canAddManualDevice(address)))
-        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()
+        self._attemptToAddManualDevice(address)
+
+    def _attemptToAddManualDevice(self, address: str) -> None:
+        if self._network_plugin_queue:
+            self._plugin_for_manual_device = self._network_plugin_queue.pop()
+            Logger.log("d", "Network plugin %s: attempting to add manual device with address %s.",
+                       self._plugin_for_manual_device.getId(), address)
+            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:
@@ -181,8 +187,11 @@ class DiscoveredPrintersModel(QObject):
             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)
+        address = self._manual_device_address
+        Logger.log("w", "Manual printer [%s] request timed out. Cancel the current request.", address)
         self.cancelCurrentManualDeviceRequest()
+        if self._network_plugin_queue:
+            self._attemptToAddManualDevice(address)
 
     hasManualDeviceRequestInProgressChanged = pyqtSignal()
 
@@ -198,6 +207,8 @@ class DiscoveredPrintersModel(QObject):
             self._manual_device_address = ""
             self.hasManualDeviceRequestInProgressChanged.emit()
             self.manualDeviceRequestFinished.emit(success)
+        if not success and self._network_plugin_queue:
+            self._attemptToAddManualDevice(address)
 
     @pyqtProperty("QVariantMap", notify = discoveredPrintersChanged)
     def discoveredPrintersByAddress(self) -> Dict[str, DiscoveredPrinter]: