Browse Source

Fix quality and variant processing in project loading

From version 22 to 24, there is an upgrade for "quality" that changes
it to "quality_changes", but for "quality", we don't have any upgrades.
Lipu Fei 7 years ago
parent
commit
d78e2d56f7
1 changed files with 12 additions and 2 deletions
  1. 12 2
      plugins/3MFReader/ThreeMFWorkspaceReader.py

+ 12 - 2
plugins/3MFReader/ThreeMFWorkspaceReader.py

@@ -280,6 +280,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
         # Check if any quality_changes instance container is in conflict.
         instance_container_files = [name for name in cura_file_names if name.endswith(self._instance_container_suffix)]
         quality_name = ""
+        custom_quality_name = ""
         num_settings_overriden_by_quality_changes = 0 # How many settings are changed by the quality changes
         num_user_settings = 0
         quality_changes_conflict = False
@@ -292,7 +293,14 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
             container_id = self._stripFileToId(instance_container_file_name)
 
             serialized = archive.open(instance_container_file_name).read().decode("utf-8")
-            serialized = InstanceContainer._updateSerialized(serialized, instance_container_file_name)
+
+            # Qualities and variants don't have upgrades, so don't upgrade them
+            parser = ConfigParser(interpolation = None)
+            parser.read_string(serialized)
+            container_type = parser["metadata"]["type"]
+            if container_type not in ("quality", "variant"):
+                serialized = InstanceContainer._updateSerialized(serialized, instance_container_file_name)
+
             parser = ConfigParser(interpolation = None)
             parser.read_string(serialized)
             container_info = ContainerInfo(instance_container_file_name, serialized, parser)
@@ -309,7 +317,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
                     position = parser["metadata"]["position"]
                     self._machine_info.quality_changes_info.extruder_info_dict[position] = container_info
 
-                quality_name = parser["general"]["name"]
+                custom_quality_name = parser["general"]["name"]
                 values = parser["values"] if parser.has_section("values") else dict()
                 num_settings_overriden_by_quality_changes += len(values)
                 # Check if quality changes already exists.
@@ -473,6 +481,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
 
         extruders = num_extruders * [""]
 
+        quality_name = custom_quality_name if custom_quality_name else quality_name
+
         self._machine_info.container_id = global_stack_id
         self._machine_info.name = machine_name
         self._machine_info.definition_id = machine_definition_id