diff --git a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py index a8a4142dfc..54d92433d9 100644 --- a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py +++ b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py @@ -2,6 +2,7 @@ # Cura is released under the terms of the LGPLv3 or higher. import configparser +import copy # To split up files. from typing import Tuple, List import io from UM.VersionUpgrade import VersionUpgrade @@ -32,6 +33,53 @@ class VersionUpgrade46to47(VersionUpgrade): parser.write(result) return [filename], [result.getvalue()] + def upgradeDefinitionChanges(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + """ + Upgrades definition changes files to the new version number. + + This applies all of the changes that are applied in other instance + containers as well. + + In the case of Deltacomb printers, it splits the 2 extruder definition + changes into 4. + :param serialized: The original contents of the instance container. + :param filename: The original file name of the instance container. + :return: A list of new file names, and a list of the new contents for + those files. + """ + parser = configparser.ConfigParser(interpolation = None, comment_prefixes = ()) + parser.read_string(serialized) + results = [(parser, filename)] + + if "general" in parser and "definition" in parser["general"]: + if parser["general"]["definition"] == "deltacomb_extruder_0": + parser["general"]["definition"] = "deltacomb_base_extruder_0" + elif parser["general"]["definition"] == "deltacomb_extruder_1": # Split up the second Deltacomb extruder into 3, creating an extra two extruders. + third_extruder_changes = copy.copy(parser) + fourth_extruder_changes = copy.copy(parser) + + parser["general"]["definition"] = "deltacomb_base_extruder_1" + third_extruder_changes["general"]["definition"] = "deltacomb_base_extruder_2" + fourth_extruder_changes["general"]["definition"] = "deltacomb_base_extruder_3" + results.append((third_extruder_changes, filename + "_e2_upgrade")) # Hopefully not already taken. + results.append((fourth_extruder_changes, filename + "_e3_upgrade")) # Hopefully not already taken. + elif parser["general"]["definition"] == "deltacomb": # Global stack. + parser["general"]["definition"] = "deltacomb_dc20" + + # Now go upgrade with the generic instance container method. + final_serialised = [] + final_filenames = [] + for result_parser, result_filename in results: + result_ss = io.StringIO() + result_parser.write(result_ss) + result_serialised = result_ss.getvalue() + # The upgrade function itself might also return multiple files, so we need to append all of those into the final list. + this_filenames_upgraded, this_serialised_upgraded = self.upgradeInstanceContainer(result_serialised, result_filename) + final_serialised += this_serialised_upgraded + final_filenames += this_filenames_upgraded + + return final_filenames, final_serialised + def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: """ Upgrades instance containers to have the new version number. diff --git a/plugins/VersionUpgrade/VersionUpgrade46to47/__init__.py b/plugins/VersionUpgrade/VersionUpgrade46to47/__init__.py index 93dfb69ffe..288fe8c164 100644 --- a/plugins/VersionUpgrade/VersionUpgrade46to47/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade46to47/__init__.py @@ -17,7 +17,7 @@ def getMetaData() -> Dict[str, Any]: ("preferences", 6000012): ("preferences", 6000013, upgrade.upgradePreferences), ("machine_stack", 4000012): ("machine_stack", 4000013, upgrade.upgradeStack), ("extruder_train", 4000012): ("extruder_train", 4000013, upgrade.upgradeStack), - ("definition_changes", 4000012): ("definition_changes", 4000013, upgrade.upgradeInstanceContainer), + ("definition_changes", 4000012): ("definition_changes", 4000013, upgrade.upgradeDefinitionChanges), ("quality_changes", 4000012): ("quality_changes", 4000013, upgrade.upgradeInstanceContainer), ("quality", 4000012): ("quality", 4000013, upgrade.upgradeInstanceContainer), ("user", 4000012): ("user", 4000013, upgrade.upgradeInstanceContainer),