diff --git a/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py b/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py new file mode 100644 index 0000000000..a6e541be6d --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py @@ -0,0 +1,56 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + +import configparser #To parse preference files. +import io #To serialise the preference files afterwards. + +from UM.VersionUpgrade import VersionUpgrade #We're inheriting from this. + +_renamed_themes = { + "cura": "cura-light" +} + +class VersionUpgrade27to30(VersionUpgrade): + ## Gets the version number from a CFG file in Uranium's 2.7 format. + # + # Since the format may change, this is implemented for the 2.7 format only + # and needs to be included in the version upgrade system rather than + # globally in Uranium. + # + # \param serialised The serialised form of a CFG file. + # \return The version number stored in the CFG file. + # \raises ValueError The format of the version number in the file is + # incorrect. + # \raises KeyError The format of the file is incorrect. + def getCfgVersion(self, serialised): + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialised) + format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. + setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + return format_version * 1000000 + setting_version + + ## Upgrades a preferences file from version 2.7 to 3.0. + # + # \param serialised The serialised form of a preferences file. + # \param filename The name of the file to upgrade. + def upgradePreferences(self, serialised, filename): + parser = configparser.ConfigParser(interpolation=None) + parser.read_string(serialised) + + # Update version numbers + if "general" not in parser: + parser["general"] = {} + parser["general"]["version"] = "5" + if "metadata" not in parser: + parser["metadata"] = {} + parser["metadata"]["setting_version"] = "2" + + #Renamed themes. + if "theme" in parser["general"]: + if parser["general"]["theme"] in _renamed_themes: + parser["general"]["theme"] = _renamed_themes[parser["general"]["theme"]] + + # Re-serialise the file. + output = io.StringIO() + parser.write(output) + return [filename], [output.getvalue()] \ No newline at end of file diff --git a/plugins/VersionUpgrade/VersionUpgrade27to30/__init__.py b/plugins/VersionUpgrade/VersionUpgrade27to30/__init__.py new file mode 100644 index 0000000000..73e1246360 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade27to30/__init__.py @@ -0,0 +1,23 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + +from . import VersionUpgrade27to30 + +upgrade = VersionUpgrade27to30.VersionUpgrade27to30() + +def getMetaData(): + return { + "version_upgrade": { + # From To Upgrade function + ("preferences", 4000002): ("preferences", 5000002, upgrade.upgradePreferences), + }, + "sources": { + "preferences": { + "get_version": upgrade.getCfgVersion, + "location": {"."} + }, + } + } + +def register(app): + return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json b/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json new file mode 100644 index 0000000000..3df84ff7e6 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json @@ -0,0 +1,8 @@ + { + "name": "Version Upgrade 2.7 to 3.0", + "author": "Ultimaker B.V.", + "version": "1.0.0", + "description": "Upgrades configurations from Cura 2.7 to Cura 3.0.", + "api": 4, + "i18n-catalog": "cura" +}