Browse Source

Show message when new cloud printers were added to your account but not in Cura yet

ChrisTerBeke 5 years ago
parent
commit
07672fd569

+ 9 - 0
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()

+ 33 - 0
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