diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 4a2fd9aca4..4cf0306026 100644 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -52,7 +52,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): else: Logger.log("w", "Could not find reader that was able to read the scene data for 3MF workspace") return WorkspaceReader.PreReadResult.failed - + machine_name = "" # Check if there are any conflicts, so we can ask the user. archive = zipfile.ZipFile(file_name, "r") cura_file_names = [name for name in archive.namelist() if name.startswith("Cura/")] @@ -62,14 +62,16 @@ class ThreeMFWorkspaceReader(WorkspaceReader): quality_changes_conflict = False for container_stack_file in container_stack_files: container_id = self._stripFileToId(container_stack_file) + serialized = archive.open(container_stack_file).read().decode("utf-8") + if machine_name == "": + machine_name = self._getMachineNameFromSerializedStack(serialized) stacks = self._container_registry.findContainerStacks(id=container_id) if stacks: # Check if there are any changes at all in any of the container stacks. - id_list = self._getContainerIdListFromSerialized(archive.open(container_stack_file).read().decode("utf-8")) + id_list = self._getContainerIdListFromSerialized(serialized) for index, container_id in enumerate(id_list): if stacks[0].getContainer(index).getId() != container_id: machine_conflict = True - break Job.yieldThread() material_conflict = False @@ -138,6 +140,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): self._dialog.setQualityType(quality_type) self._dialog.setNumSettingsOverridenByQualityChanges(num_settings_overriden_by_quality_changes) self._dialog.setActiveMode(active_mode) + self._dialog.setMachineName(machine_name) self._dialog.show() # Block until the dialog is closed. @@ -437,3 +440,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): container_string = parser["general"].get("containers", "") container_list = container_string.split(",") return [container_id for container_id in container_list if container_id != ""] + + def _getMachineNameFromSerializedStack(self, serialized): + parser = configparser.ConfigParser(interpolation=None, empty_lines_in_values=False) + parser.read_string(serialized) + return parser["general"].get("name", "") diff --git a/plugins/3MFReader/WorkspaceDialog.py b/plugins/3MFReader/WorkspaceDialog.py index 09c6ff1f4f..313fde0e29 100644 --- a/plugins/3MFReader/WorkspaceDialog.py +++ b/plugins/3MFReader/WorkspaceDialog.py @@ -35,6 +35,7 @@ class WorkspaceDialog(QObject): self._quality_name = "" self._num_settings_overriden_by_quality_changes = 0 self._quality_type = "" + self._machine_name = "" machineConflictChanged = pyqtSignal() qualityChangesConflictChanged = pyqtSignal() @@ -44,6 +45,15 @@ class WorkspaceDialog(QObject): qualityNameChanged = pyqtSignal() numSettingsOverridenByQualityChangesChanged = pyqtSignal() qualityTypeChanged = pyqtSignal() + machineNameChanged = pyqtSignal() + + @pyqtProperty(str, notify = machineNameChanged) + def machineName(self): + return self._machine_name + + def setMachineName(self, machine_name): + self._machine_name = machine_name + self.machineNameChanged.emit() @pyqtProperty(str, notify=qualityTypeChanged) def qualityType(self): diff --git a/plugins/3MFReader/WorkspaceDialog.qml b/plugins/3MFReader/WorkspaceDialog.qml index 4e7a510058..d2860b7a26 100644 --- a/plugins/3MFReader/WorkspaceDialog.qml +++ b/plugins/3MFReader/WorkspaceDialog.qml @@ -81,19 +81,19 @@ UM.Dialog text: catalog.i18nc("@action:label", "Printer settings") font.bold: true } - + Row { width: parent.width height: childrenRect.height Label { - text: catalog.i18nc("@action:label", "Type") + text: catalog.i18nc("@action:label", "Name") width: parent.width / 3 } Label { - text: catalog.i18nc("@action:label", "TOCHANGE") + text: manager.machineName width: parent.width / 3 }