Hide the message if a manual check is initiated

This has to be done in order to avoid weird actions taking place, such
as the user pressing to remove the printers while another sync is
happening.

CURA-7454
This commit is contained in:
Kostas Karmas 2020-06-09 17:42:53 +02:00
parent 1c9ce25614
commit 2442371c2f

View file

@ -51,6 +51,7 @@ class CloudOutputDeviceManager:
self._account = CuraApplication.getInstance().getCuraAPI().account # type: Account self._account = CuraApplication.getInstance().getCuraAPI().account # type: Account
self._api = CloudApiClient(CuraApplication.getInstance(), on_error = lambda error: Logger.log("e", str(error))) self._api = CloudApiClient(CuraApplication.getInstance(), on_error = lambda error: Logger.log("e", str(error)))
self._account.loginStateChanged.connect(self._onLoginStateChanged) self._account.loginStateChanged.connect(self._onLoginStateChanged)
self.removed_printers_message = None # type: Optional[Message]
# Ensure we don't start twice. # Ensure we don't start twice.
self._running = False self._running = False
@ -121,6 +122,11 @@ class CloudOutputDeviceManager:
self._um_cloud_printers[device_id].setMetaDataEntry(META_UM_LINKED_TO_ACCOUNT, True) self._um_cloud_printers[device_id].setMetaDataEntry(META_UM_LINKED_TO_ACCOUNT, True)
self._onDevicesDiscovered(new_clusters) self._onDevicesDiscovered(new_clusters)
# Hide the current removed_printers_message, if there is any
if self.removed_printers_message:
self.removed_printers_message.actionTriggered.disconnect(self._onRemovedPrintersMessageActionTriggered)
self.removed_printers_message.hide()
# Remove the CloudOutput device for offline printers # Remove the CloudOutput device for offline printers
offline_device_keys = set(self._remote_clusters.keys()) - set(online_clusters.keys()) offline_device_keys = set(self._remote_clusters.keys()) - set(online_clusters.keys())
for device_id in offline_device_keys: for device_id in offline_device_keys:
@ -266,7 +272,7 @@ class CloudOutputDeviceManager:
return return
# Generate message # Generate message
removed_printers_message = Message( self.removed_printers_message = Message(
title = self.I18N_CATALOG.i18ncp( title = self.I18N_CATALOG.i18ncp(
"info:status", "info:status",
"Cloud connection is not available for a printer", "Cloud connection is not available for a printer",
@ -288,19 +294,19 @@ class CloudOutputDeviceManager:
"<a href='https://mycloud.ultimaker.com/'>Ultimaker Digital Factory</a>.", "<a href='https://mycloud.ultimaker.com/'>Ultimaker Digital Factory</a>.",
device_names device_names
) )
removed_printers_message.setText(message_text) self.removed_printers_message.setText(message_text)
removed_printers_message.addAction("keep_printer_configurations_action", self.removed_printers_message.addAction("keep_printer_configurations_action",
name = self.I18N_CATALOG.i18nc("@action:button", "Keep printer configurations"), name = self.I18N_CATALOG.i18nc("@action:button", "Keep printer configurations"),
icon = "", icon = "",
description = "Keep the configuration of the cloud printer(s) synced with Cura which are not linked to your account.", description = "Keep the configuration of the cloud printer(s) synced with Cura which are not linked to your account.",
button_align = Message.ActionButtonAlignment.ALIGN_RIGHT) button_align = Message.ActionButtonAlignment.ALIGN_RIGHT)
removed_printers_message.addAction("remove_printers_action", self.removed_printers_message.addAction("remove_printers_action",
name = self.I18N_CATALOG.i18nc("@action:button", "Remove printers"), name = self.I18N_CATALOG.i18nc("@action:button", "Remove printers"),
icon = "", icon = "",
description = "Remove the cloud printer(s) which are not linked to your account.", description = "Remove the cloud printer(s) which are not linked to your account.",
button_style = Message.ActionButtonStyle.SECONDARY, button_style = Message.ActionButtonStyle.SECONDARY,
button_align = Message.ActionButtonAlignment.ALIGN_LEFT) button_align = Message.ActionButtonAlignment.ALIGN_LEFT)
removed_printers_message.actionTriggered.connect(self._onRemovedPrintersMessageActionTriggered) self.removed_printers_message.actionTriggered.connect(self._onRemovedPrintersMessageActionTriggered)
output_device_manager = CuraApplication.getInstance().getOutputDeviceManager() output_device_manager = CuraApplication.getInstance().getOutputDeviceManager()
@ -317,7 +323,7 @@ class CloudOutputDeviceManager:
# Update the printer's metadata to mark it as not linked to the account # Update the printer's metadata to mark it as not linked to the account
device.setMetaDataEntry(META_UM_LINKED_TO_ACCOUNT, False) device.setMetaDataEntry(META_UM_LINKED_TO_ACCOUNT, False)
removed_printers_message.show() self.removed_printers_message.show()
def _onDiscoveredDeviceRemoved(self, device_id: str) -> None: def _onDiscoveredDeviceRemoved(self, device_id: str) -> None:
device = self._remote_clusters.pop(device_id, None) # type: Optional[CloudOutputDevice] device = self._remote_clusters.pop(device_id, None) # type: Optional[CloudOutputDevice]
@ -406,7 +412,7 @@ class CloudOutputDeviceManager:
def _onRemovedPrintersMessageActionTriggered(self, removed_printers_message: Message, action: str) -> None: def _onRemovedPrintersMessageActionTriggered(self, removed_printers_message: Message, action: str) -> None:
if action == "keep_printer_configurations_action": if action == "keep_printer_configurations_action":
removed_printers_message.hide() self.removed_printers_message.hide()
elif action == "remove_printers_action": elif action == "remove_printers_action":
machine_manager = CuraApplication.getInstance().getMachineManager() machine_manager = CuraApplication.getInstance().getMachineManager()
remove_printers_ids = {self._um_cloud_printers[i].getId() for i in self.reported_device_ids} remove_printers_ids = {self._um_cloud_printers[i].getId() for i in self.reported_device_ids}
@ -423,4 +429,4 @@ class CloudOutputDeviceManager:
for machine_cloud_id in self.reported_device_ids: for machine_cloud_id in self.reported_device_ids:
machine_manager.setActiveMachine(self._um_cloud_printers[machine_cloud_id].getId()) machine_manager.setActiveMachine(self._um_cloud_printers[machine_cloud_id].getId())
machine_manager.removeMachine(self._um_cloud_printers[machine_cloud_id].getId()) machine_manager.removeMachine(self._um_cloud_printers[machine_cloud_id].getId())
removed_printers_message.hide() self.removed_printers_message.hide()