From d0534c04764fcf4c79697a94c081669b0c8fd525 Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Tue, 2 Jun 2020 15:23:35 +0200 Subject: [PATCH 1/2] Update _remote_clusters dict when cloud printer is removed from Cura CURA-7457 --- .../src/Cloud/CloudOutputDeviceManager.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py index c562f7988e..2fc3171c04 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -9,6 +9,7 @@ from PyQt5.QtNetwork import QNetworkReply from UM import i18nCatalog from UM.Logger import Logger # To log errors talking to the API. from UM.Message import Message +from UM.Settings.Interfaces import ContainerInterface from UM.Signal import Signal from cura.API import Account from cura.API.Account import SyncState @@ -49,6 +50,8 @@ class CloudOutputDeviceManager: self._syncing = False + CuraApplication.getInstance().getContainerRegistry().containerRemoved.connect(self._printerRemoved) + def start(self): """Starts running the cloud output device manager, thus periodically requesting cloud data.""" @@ -287,3 +290,16 @@ class CloudOutputDeviceManager: output_device_manager = CuraApplication.getInstance().getOutputDeviceManager() if device.key not in output_device_manager.getOutputDeviceIds(): output_device_manager.addOutputDevice(device) + + def _printerRemoved(self, container: ContainerInterface) -> None: + """ + Callback connected to the containerRemoved signal. Invoked when a cloud printer is removed from Cura to remove + the printer's reference from the _remote_clusters. + + :param container: The ContainerInterface passed to this function whenever the ContainerRemoved signal is emitted + :return: None + """ + if isinstance(container, GlobalStack): + printer_clusters_map = {cluster.name: cluster_id for cluster_id, cluster in self._remote_clusters.items()} + if container.name in printer_clusters_map: + del self._remote_clusters[printer_clusters_map[container.name]] From be9aec624aaa9447b5a7fa5f2bc2852a4347ded7 Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Wed, 3 Jun 2020 11:13:21 +0200 Subject: [PATCH 2/2] Use the um_cloud_cluster_id metadata when removing the cloud printer CURA-7457 --- .../src/Cloud/CloudOutputDeviceManager.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py index 2fc3171c04..7ee8322ba1 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -300,6 +300,6 @@ class CloudOutputDeviceManager: :return: None """ if isinstance(container, GlobalStack): - printer_clusters_map = {cluster.name: cluster_id for cluster_id, cluster in self._remote_clusters.items()} - if container.name in printer_clusters_map: - del self._remote_clusters[printer_clusters_map[container.name]] + container_cluster_id = container.getMetaDataEntry(self.META_CLUSTER_ID, None) + if container_cluster_id in self._remote_clusters.keys(): + del self._remote_clusters[container_cluster_id]