Browse Source

Fix material upgrade and version checking

CURA-4519

Less duplicated code, but it's still one of the worst parts...
Lipu Fei 7 years ago
parent
commit
25c41062e1

+ 8 - 6
plugins/XmlMaterialProfile/XmlMaterialProfile.py

@@ -33,9 +33,10 @@ class XmlMaterialProfile(InstanceContainer):
     #
     #   \param xml_version: The version number found in an XML file.
     #   \return The corresponding setting_version.
-    def xmlVersionToSettingVersion(self, xml_version: str) -> int:
+    @classmethod
+    def xmlVersionToSettingVersion(cls, xml_version: str) -> int:
         if xml_version == "1.3":
-            return 4
+            return CuraApplication.SettingVersion
         return 0 #Older than 1.3.
 
     def getInheritedFiles(self):
@@ -407,15 +408,16 @@ class XmlMaterialProfile(InstanceContainer):
     def getConfigurationTypeFromSerialized(self, serialized: str) -> Optional[str]:
         return "materials"
 
-    def getVersionFromSerialized(self, serialized: str) -> Optional[int]:
+    @classmethod
+    def getVersionFromSerialized(cls, serialized: str) -> Optional[int]:
         data = ET.fromstring(serialized)
 
-        version = 1
+        version = XmlMaterialProfile.Version
         # get setting version
         if "version" in data.attrib:
-            setting_version = self.xmlVersionToSettingVersion(data.attrib["version"])
+            setting_version = XmlMaterialProfile.xmlVersionToSettingVersion(data.attrib["version"])
         else:
-            setting_version = self.xmlVersionToSettingVersion("1.2")
+            setting_version = XmlMaterialProfile.xmlVersionToSettingVersion("1.2")
 
         return version * 1000000 + setting_version
 

+ 5 - 13
plugins/XmlMaterialProfile/XmlMaterialUpgrader.py

@@ -5,24 +5,16 @@ import xml.etree.ElementTree as ET
 
 from UM.VersionUpgrade import VersionUpgrade
 
+from cura.CuraApplication import CuraApplication
+from .XmlMaterialProfile import XmlMaterialProfile
+
 
 class XmlMaterialUpgrader(VersionUpgrade):
     def getXmlVersion(self, serialized):
-        data = ET.fromstring(serialized)
-
-        version = 1
-        # get setting version
-        if "version" in data.attrib:
-            setting_version = self._xmlVersionToSettingVersion(data.attrib["version"])
-        else:
-            setting_version = self._xmlVersionToSettingVersion("1.2")
-
-        return version * 1000000 + setting_version
+        return XmlMaterialProfile.getVersionFromSerialized(serialized)
 
     def _xmlVersionToSettingVersion(self, xml_version: str) -> int:
-        if xml_version == "1.3":
-            return 2
-        return 0 #Older than 1.3.
+        return XmlMaterialProfile.xmlVersionToSettingVersion(xml_version)
 
     def upgradeMaterial(self, serialised, filename):
         data = ET.fromstring(serialised)

+ 1 - 1
plugins/XmlMaterialProfile/__init__.py

@@ -19,7 +19,7 @@ def getMetaData():
             "mimetype": "application/x-ultimaker-material-profile"
         },
         "version_upgrade": {
-            ("materials", 1000000): ("materials", 1000003, upgrader.upgradeMaterial),
+            ("materials", 1000000): ("materials", 1000004, upgrader.upgradeMaterial),
         },
         "sources": {
             "materials": {