mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-04-22 21:59:37 +08:00
Add support for more than one network plugin when adding a network printer by IP address.
This commit is contained in:
parent
d499c6fdfe
commit
6fe66bf525
@ -129,6 +129,7 @@ class DiscoveredPrintersModel(QObject):
|
|||||||
self._discovered_printer_by_ip_dict = dict() # type: Dict[str, DiscoveredPrinter]
|
self._discovered_printer_by_ip_dict = dict() # type: Dict[str, DiscoveredPrinter]
|
||||||
|
|
||||||
self._plugin_for_manual_device = None # type: Optional[OutputDevicePlugin]
|
self._plugin_for_manual_device = None # type: Optional[OutputDevicePlugin]
|
||||||
|
self._network_plugin_queue = [] # type: List[OutputDevicePlugin]
|
||||||
self._manual_device_address = ""
|
self._manual_device_address = ""
|
||||||
|
|
||||||
self._manual_device_request_timeout_in_seconds = 5 # timeout for adding a manual device in seconds
|
self._manual_device_request_timeout_in_seconds = 5 # timeout for adding a manual device in seconds
|
||||||
@ -153,16 +154,21 @@ class DiscoveredPrintersModel(QObject):
|
|||||||
|
|
||||||
all_plugins_dict = self._application.getOutputDeviceManager().getAllOutputDevicePlugins()
|
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,
|
lambda plugin_item: plugin_item.canAddManualDevice(address) in priority_order,
|
||||||
all_plugins_dict.values())]
|
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)
|
Logger.log("d", "Could not find a plugin to accept adding %s manually via address.", address)
|
||||||
return
|
return
|
||||||
|
|
||||||
plugin = max(can_add_manual_plugins, key = lambda p: priority_order.index(p.canAddManualDevice(address)))
|
self._attemptToAddManualDevice(address)
|
||||||
self._plugin_for_manual_device = plugin
|
|
||||||
|
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._plugin_for_manual_device.addManualDevice(address, callback=self._onManualDeviceRequestFinished)
|
||||||
self._manual_device_address = address
|
self._manual_device_address = address
|
||||||
self._manual_device_request_timer.start()
|
self._manual_device_request_timer.start()
|
||||||
@ -181,8 +187,11 @@ class DiscoveredPrintersModel(QObject):
|
|||||||
self.manualDeviceRequestFinished.emit(False)
|
self.manualDeviceRequestFinished.emit(False)
|
||||||
|
|
||||||
def _onManualRequestTimeout(self) -> None:
|
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()
|
self.cancelCurrentManualDeviceRequest()
|
||||||
|
if self._network_plugin_queue:
|
||||||
|
self._attemptToAddManualDevice(address)
|
||||||
|
|
||||||
hasManualDeviceRequestInProgressChanged = pyqtSignal()
|
hasManualDeviceRequestInProgressChanged = pyqtSignal()
|
||||||
|
|
||||||
@ -198,6 +207,8 @@ class DiscoveredPrintersModel(QObject):
|
|||||||
self._manual_device_address = ""
|
self._manual_device_address = ""
|
||||||
self.hasManualDeviceRequestInProgressChanged.emit()
|
self.hasManualDeviceRequestInProgressChanged.emit()
|
||||||
self.manualDeviceRequestFinished.emit(success)
|
self.manualDeviceRequestFinished.emit(success)
|
||||||
|
if not success and self._network_plugin_queue:
|
||||||
|
self._attemptToAddManualDevice(address)
|
||||||
|
|
||||||
@pyqtProperty("QVariantMap", notify = discoveredPrintersChanged)
|
@pyqtProperty("QVariantMap", notify = discoveredPrintersChanged)
|
||||||
def discoveredPrintersByAddress(self) -> Dict[str, DiscoveredPrinter]:
|
def discoveredPrintersByAddress(self) -> Dict[str, DiscoveredPrinter]:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user