From 80a5b53aadf8ef42fcd6911067d51a66c7f1b975 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Wed, 3 Jun 2020 13:59:51 +0200 Subject: [PATCH] Store the printer cluster size as a metadata entry on the machine This makes the cluster size also available when the machine is offline. Also fixes an issue where the cluster size is improperly restored once the internet connection comes back online, resulting in the printer showing as a single printer until next sync CURA-7347 --- cura/Settings/MachineManager.py | 6 +++++- plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py | 2 +- .../src/Cloud/CloudOutputDeviceManager.py | 1 + .../src/Models/Http/CloudClusterResponse.py | 4 +++- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index e5286e7032..cbb986010e 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -488,7 +488,11 @@ class MachineManager(QObject): @pyqtProperty(bool, notify = printerConnectedStatusChanged) def activeMachineIsGroup(self) -> bool: - return bool(self._printer_output_devices) and len(self._printer_output_devices[0].printers) > 1 + if self.activeMachine is None: + return False + + group_size = int(self.activeMachine.getMetaDataEntry("group_size", "-1")) + return group_size > 1 @pyqtProperty(bool, notify = printerConnectedStatusChanged) def activeMachineHasNetworkConnection(self) -> bool: diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py index b8c5a30524..4abab245e8 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py @@ -74,7 +74,7 @@ class CloudOutputDevice(UltimakerNetworkedPrinterOutputDevice): b"name": cluster.friendly_name.encode() if cluster.friendly_name else b"", b"firmware_version": cluster.host_version.encode() if cluster.host_version else b"", b"printer_type": cluster.printer_type.encode() if cluster.printer_type else b"", - b"cluster_size": b"1" # cloud devices are always clusters of at least one + b"cluster_size": str(cluster.printer_count).encode() if cluster.printer_count else b"1" } super().__init__( diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py index f9d53b6b65..6f2c68e5fb 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -265,6 +265,7 @@ class CloudOutputDeviceManager: machine.setName(device.name) machine.setMetaDataEntry(self.META_CLUSTER_ID, device.key) machine.setMetaDataEntry("group_name", device.name) + machine.setMetaDataEntry("group_size", device.clusterSize) machine.setMetaDataEntry("removal_warning", self.I18N_CATALOG.i18nc( "@label ({} is printer name)", "{} will be removed until the next account sync.
To remove {} permanently, " diff --git a/plugins/UM3NetworkPrinting/src/Models/Http/CloudClusterResponse.py b/plugins/UM3NetworkPrinting/src/Models/Http/CloudClusterResponse.py index 94f20b65c6..a9107db3c8 100644 --- a/plugins/UM3NetworkPrinting/src/Models/Http/CloudClusterResponse.py +++ b/plugins/UM3NetworkPrinting/src/Models/Http/CloudClusterResponse.py @@ -11,7 +11,7 @@ class CloudClusterResponse(BaseModel): def __init__(self, cluster_id: str, host_guid: str, host_name: str, is_online: bool, status: str, host_internal_ip: Optional[str] = None, host_version: Optional[str] = None, - friendly_name: Optional[str] = None, printer_type: str = "ultimaker3", **kwargs) -> None: + friendly_name: Optional[str] = None, printer_type: str = "ultimaker3", printer_count: int = 1, **kwargs) -> None: """Creates a new cluster response object. :param cluster_id: The secret unique ID, e.g. 'kBEeZWEifXbrXviO8mRYLx45P8k5lHVGs43XKvRniPg='. @@ -23,6 +23,7 @@ class CloudClusterResponse(BaseModel): :param host_internal_ip: The internal IP address of the host printer. :param friendly_name: The human readable name of the host printer. :param printer_type: The machine type of the host printer. + :param printer_count: The amount of printers in the print cluster. 1 for a single printer """ self.cluster_id = cluster_id @@ -34,6 +35,7 @@ class CloudClusterResponse(BaseModel): self.host_internal_ip = host_internal_ip self.friendly_name = friendly_name self.printer_type = printer_type + self.printer_count = printer_count super().__init__(**kwargs) # Validates the model, raising an exception if the model is invalid.