From 5b818d203ad9905f70ed7d6e1770d89027523ebe Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 5 Apr 2019 17:45:19 +0200 Subject: [PATCH] Move a bunch of network only functions out of machine manager Machine manager is way to big as is, so we need to move more code out of it to locations where the code is actually used. --- .../NetworkedPrinterOutputDevice.py | 19 +++++++++++++- cura/Settings/MachineManager.py | 26 ------------------- .../src/DiscoverUM3Action.py | 9 ++++++- 3 files changed, 26 insertions(+), 28 deletions(-) diff --git a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py index b846d98299..86da9bf57f 100644 --- a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py +++ b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py @@ -18,6 +18,8 @@ from enum import IntEnum import os # To get the username import gzip +from cura.Settings.CuraContainerRegistry import CuraContainerRegistry + class AuthState(IntEnum): NotAuthenticated = 1 @@ -319,12 +321,27 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self._manager.authenticationRequired.connect(self._onAuthenticationRequired) if self._properties.get(b"temporary", b"false") != b"true": - CuraApplication.getInstance().getMachineManager().checkCorrectGroupName(self.getId(), self.name) + self._checkCorrectGroupName(self.getId(), self.name) def _registerOnFinishedCallback(self, reply: QNetworkReply, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: if on_finished is not None: self._onFinishedCallbacks[reply.url().toString() + str(reply.operation())] = on_finished + ## This method checks if the name of the group stored in the definition container is correct. + # After updating from 3.2 to 3.3 some group names may be temporary. If there is a mismatch in the name of the group + # then all the container stacks are updated, both the current and the hidden ones. + def _checkCorrectGroupName(self, device_id: str, group_name: str) -> None: + global_container_stack = CuraApplication.getInstance().getGlobalContainerStack() + active_machine_network_name = CuraApplication.getInstance().getMachineManager().activeMachineNetworkKey() + if global_container_stack and device_id == active_machine_network_name: + # Check if the group_name is correct. If not, update all the containers connected to the same printer + if CuraApplication.getInstance().getMachineManager().activeMachineNetworkGroupName != group_name: + metadata_filter = {"um_network_key": active_machine_network_name} + containers = CuraContainerRegistry.getInstance().findContainerStacks(type="machine", + **metadata_filter) + for container in containers: + container.setMetaDataEntry("group_name", group_name) + def _handleOnFinished(self, reply: QNetworkReply) -> None: # Due to garbage collection, we need to cache certain bits of post operations. # As we don't want to keep them around forever, delete them if we get a reply. diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 3cee636d1d..267baf085f 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -683,11 +683,6 @@ class MachineManager(QObject): return False return True - ## Check if a container is read_only - @pyqtSlot(str, result = bool) - def isReadOnly(self, container_id: str) -> bool: - return CuraContainerRegistry.getInstance().isReadOnly(container_id) - ## Copy the value of the setting of the current extruder to all other extruders as well as the global container. @pyqtSlot(str) def copyValueToExtruders(self, key: str) -> None: @@ -1065,9 +1060,6 @@ class MachineManager(QObject): def _onMaterialNameChanged(self) -> None: self.activeMaterialChanged.emit() - def _onQualityNameChanged(self) -> None: - self.activeQualityChanged.emit() - def _getContainerChangedSignals(self) -> List[Signal]: if self._global_container_stack is None: return [] @@ -1463,24 +1455,6 @@ class MachineManager(QObject): if self.hasUserSettings and self._application.getPreferences().getValue("cura/active_mode") == 1: self._application.discardOrKeepProfileChanges() - ## Find all container stacks that has the pair 'key = value' in its metadata and replaces the value with 'new_value' - def replaceContainersMetadata(self, key: str, value: str, new_value: str) -> None: - machines = CuraContainerRegistry.getInstance().findContainerStacks(type = "machine") - for machine in machines: - if machine.getMetaDataEntry(key) == value: - machine.setMetaDataEntry(key, new_value) - - ## This method checks if the name of the group stored in the definition container is correct. - # After updating from 3.2 to 3.3 some group names may be temporary. If there is a mismatch in the name of the group - # then all the container stacks are updated, both the current and the hidden ones. - def checkCorrectGroupName(self, device_id: str, group_name: str) -> None: - if self._global_container_stack and device_id == self.activeMachineNetworkKey(): - # Check if the group_name is correct. If not, update all the containers connected to the same printer - if self.activeMachineNetworkGroupName != group_name: - metadata_filter = {"um_network_key": self.activeMachineNetworkKey()} - containers = CuraContainerRegistry.getInstance().findContainerStacks(type = "machine", **metadata_filter) - for container in containers: - container.setMetaDataEntry("group_name", group_name) ## This method checks if there is an instance connected to the given network_key def existNetworkInstances(self, network_key: str) -> bool: diff --git a/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py b/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py index a2a319b46a..0f2106bc9c 100644 --- a/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py +++ b/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py @@ -115,7 +115,7 @@ class DiscoverUM3Action(MachineAction): previous_connect_group_name = meta_data["group_name"] global_container_stack.setMetaDataEntry("group_name", group_name) # Find all the places where there is the same group name and change it accordingly - CuraApplication.getInstance().getMachineManager().replaceContainersMetadata(key = "group_name", value = previous_connect_group_name, new_value = group_name) + self._replaceContainersMetadata(key = "group_name", value = previous_connect_group_name, new_value = group_name) else: global_container_stack.setMetaDataEntry("group_name", group_name) # Set the default value for "hidden", which is used when you have a group with multiple types of printers @@ -125,6 +125,13 @@ class DiscoverUM3Action(MachineAction): # Ensure that the connection states are refreshed. self._network_plugin.refreshConnections() + ## Find all container stacks that has the pair 'key = value' in its metadata and replaces the value with 'new_value' + def _replaceContainersMetadata(self, key: str, value: str, new_value: str) -> None: + machines = CuraContainerRegistry.getInstance().findContainerStacks(type="machine") + for machine in machines: + if machine.getMetaDataEntry(key) == value: + machine.setMetaDataEntry(key, new_value) + # Associates the currently active machine with the given printer device. The network connection information will be # stored into the metadata of the currently active machine. @pyqtSlot(QObject)