diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py index b290095be7..8665497229 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -22,6 +22,7 @@ from cura.Settings.GlobalStack import GlobalStack from cura.UltimakerCloud.UltimakerCloudConstants import META_CAPABILITIES, META_UM_LINKED_TO_ACCOUNT from .CloudApiClient import CloudApiClient from .CloudOutputDevice import CloudOutputDevice +from ..Messages.RemovedPrintersMessage import RemovedPrintersMessage from ..Models.Http.CloudClusterResponse import CloudClusterResponse from ..Messages.NewPrinterDetectedMessage import NewPrinterDetectedMessage @@ -303,52 +304,13 @@ class CloudOutputDeviceManager: for device_id in removed_device_ids: if not parseBool(self._um_cloud_printers[device_id].getMetaDataEntry(META_UM_LINKED_TO_ACCOUNT, "true")): ignored_device_ids.add(device_id) + # Keep the reported_device_ids list in a class variable, so that the message button actions can access it and # take the necessary steps to fulfill their purpose. self.reported_device_ids = removed_device_ids - ignored_device_ids if not self.reported_device_ids: return - # Generate message - self._removed_printers_message = Message( - title = self.i18n_catalog.i18ncp( - "info:status", - "A cloud connection is not available for a printer", - "A cloud connection is not available for some printers", - len(self.reported_device_ids) - ), - message_type = Message.MessageType.WARNING - ) - device_names = "".join(["
  • {} ({})
  • ".format(self._um_cloud_printers[device].name, - self._um_cloud_printers[device].definition.name) for device in self.reported_device_ids]) - message_text = self.i18n_catalog.i18ncp( - "info:status", - "This printer is not linked to the Digital Factory:", - "These printers are not linked to the Digital Factory:", - len(self.reported_device_ids) - ) - message_text += "

    ".format(device_names) - digital_factory_string = self.i18n_catalog.i18nc("info:name", "Ultimaker Digital Factory") - website_link = f"{digital_factory_string}." - message_text += self.i18n_catalog.i18nc( - "info:status", - f"To establish a connection, please visit the {website_link}" - ) - self._removed_printers_message.setText(message_text) - self._removed_printers_message.addAction("keep_printer_configurations_action", - name = self.i18n_catalog.i18nc("@action:button", "Keep printer configurations"), - icon = "", - description = "Keep cloud printers in Ultimaker Cura when not connected to your account.", - button_align = Message.ActionButtonAlignment.ALIGN_RIGHT) - self._removed_printers_message.addAction("remove_printers_action", - name = self.i18n_catalog.i18nc("@action:button", "Remove printers"), - icon = "", - description = "Remove cloud printer(s) which aren't linked to your account.", - button_style = Message.ActionButtonStyle.SECONDARY, - button_align = Message.ActionButtonAlignment.ALIGN_LEFT) - self._removed_printers_message.actionTriggered.connect(self._onRemovedPrintersMessageActionTriggered) - output_device_manager = CuraApplication.getInstance().getOutputDeviceManager() # Remove the output device from the printers @@ -364,6 +326,12 @@ class CloudOutputDeviceManager: # Update the printer's metadata to mark it as not linked to the account global_stack.setMetaDataEntry(META_UM_LINKED_TO_ACCOUNT, False) + # Generate message to show + device_names = "".join(["
  • {} ({})
  • ".format(self._um_cloud_printers[device].name, + self._um_cloud_printers[device].definition.name) for device in + self.reported_device_ids]) + self._removed_printers_message = RemovedPrintersMessage(self.reported_device_ids, device_names) + self._removed_printers_message.actionTriggered.connect(self._onRemovedPrintersMessageActionTriggered) self._removed_printers_message.show() def _onDiscoveredDeviceRemoved(self, device_id: str) -> None: diff --git a/plugins/UM3NetworkPrinting/src/Messages/RemovedPrintersMessage.py b/plugins/UM3NetworkPrinting/src/Messages/RemovedPrintersMessage.py new file mode 100644 index 0000000000..c047fee4f2 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Messages/RemovedPrintersMessage.py @@ -0,0 +1,52 @@ +# Copyright (c) 2022 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from UM import i18nCatalog +from UM.Message import Message +from cura.CuraApplication import CuraApplication + + +class RemovedPrintersMessage(Message): + i18n_catalog = i18nCatalog("cura") + + def __init__(self, removed_devices, device_names) -> None: + self._removed_devices = removed_devices + + message_text = self.i18n_catalog.i18ncp( + "info:status", + "This printer is not linked to the Digital Factory:", + "These printers are not linked to the Digital Factory:", + len(self.removed_devices) + ) + message_text += "

    ".format(device_names) + + digital_factory_string = self.i18n_catalog.i18nc("info:name", "Ultimaker Digital Factory") + website_link = f"{digital_factory_string}." + + message_text += self.i18n_catalog.i18nc( + "info:status", + f"To establish a connection, please visit the {website_link}" + ) + + super().__init__(title=self.i18n_catalog.i18ncp("info:status", + "A cloud connection is not available for a printer", + "A cloud connection is not available for some printers", + len(self.removed_devices)), + message_type=Message.MessageType.WARNING, + text = message_text) + + self.addAction("keep_printer_configurations_action", + name=self.i18n_catalog.i18nc("@action:button", + "Keep printer configurations"), + icon="", + description="Keep cloud printers in Ultimaker Cura when not connected to your account.", + button_align=Message.ActionButtonAlignment.ALIGN_RIGHT) + self.addAction("remove_printers_action", + name=self.i18n_catalog.i18nc("@action:button", "Remove printers"), + icon="", + description="Remove cloud printer(s) which aren't linked to your account.", + button_style=Message.ActionButtonStyle.SECONDARY, + button_align=Message.ActionButtonAlignment.ALIGN_LEFT) + + +