diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py index 1da099dadc..b775d603d8 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -13,6 +13,7 @@ from cura.Settings.GlobalStack import GlobalStack from .CloudApiClient import CloudApiClient from .CloudOutputDevice import CloudOutputDevice from ..Models.Http.CloudClusterResponse import CloudClusterResponse +from ..Messages.CloudPrinterDetectedMessage import CloudPrinterDetectedMessage ## The cloud output device manager is responsible for using the Ultimaker Cloud APIs to manage remote clusters. @@ -108,6 +109,7 @@ class CloudOutputDeviceManager: ) self._remote_clusters[device.getId()] = device self.discoveredDevicesChanged.emit() + self._checkIfNewClusterWasAdded(device.clusterData.cluster_id) self._connectToActiveMachine() def _onDiscoveredDeviceUpdated(self, cluster_data: CloudClusterResponse) -> None: @@ -179,3 +181,10 @@ class CloudOutputDeviceManager: output_device_manager = CuraApplication.getInstance().getOutputDeviceManager() if device.key not in output_device_manager.getOutputDeviceIds(): output_device_manager.addOutputDevice(device) + + ## Checks if Cura has a machine stack (printer) for the given cluster ID and shows a message if it hasn't. + def _checkIfNewClusterWasAdded(self, cluster_id: str) -> None: + container_registry = CuraApplication.getInstance().getContainerRegistry() + cloud_machines = container_registry.findContainersMetadata(**{self.META_CLUSTER_ID: "*"}) # all cloud machines + if not any(machine[self.META_CLUSTER_ID] == cluster_id for machine in cloud_machines): + CloudPrinterDetectedMessage().show() diff --git a/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py b/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py new file mode 100644 index 0000000000..0acb6c5066 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py @@ -0,0 +1,33 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from UM import i18nCatalog +from UM.Message import Message + + +I18N_CATALOG = i18nCatalog("cura") + + +## Message shown when a new printer was added to your account but not yet in Cura. +class CloudPrinterDetectedMessage(Message): + + # Singleton used to prevent duplicate messages of this type at the same time. + __is_visible = False + + def __init__(self) -> None: + super().__init__( + title=I18N_CATALOG.i18nc("@info:title", "New cloud printers found"), + text=I18N_CATALOG.i18nc("@info:message", "New printers have been found connected to your account, " + "you can find them in your list of discovered printers."), + lifetime=10, + dismissable=True + ) + + def show(self) -> None: + if CloudPrinterDetectedMessage.__is_visible: + return + super().show() + CloudPrinterDetectedMessage.__is_visible = True + + def hide(self, send_signal = True) -> None: + super().hide(send_signal) + CloudPrinterDetectedMessage.__is_visible = False