Materials are now also handled in conflict resolvement

CURA-1263
This commit is contained in:
Jaime van Kessel 2016-11-17 11:16:15 +01:00
parent 9539774c0b
commit 92a4fd7239
3 changed files with 62 additions and 9 deletions

View file

@ -340,10 +340,22 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
mapping[key] = element
first.append(element)
def clearData(self):
self._metadata = {}
self._name = ""
self._definition = None
self._instances = {}
self._read_only = False
self._dirty = False
self._path = ""
## Overridden from InstanceContainer
def deserialize(self, serialized):
data = ET.fromstring(serialized)
# Reset previous metadata
self.clearData() # Ensure any previous data is gone.
self.addMetaDataEntry("type", "material")
self.addMetaDataEntry("base_file", self.id)
@ -445,7 +457,16 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
definition = definitions[0]
if machine_compatibility:
new_material = XmlMaterialProfile(self.id + "_" + machine_id)
new_material_id = self.id + "_" + machine_id
# It could be that we are overwriting, so check if the ID already exists.
materials = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id=new_material_id)
if materials:
new_material = materials[0]
new_material.clearData()
else:
new_material = XmlMaterialProfile(new_material_id)
new_material.setName(self.getName())
new_material.setMetaData(copy.deepcopy(self.getMetaData()))
new_material.setDefinition(definition)
@ -459,9 +480,8 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
new_material.setProperty(key, "value", value, definition)
new_material._dirty = False
UM.Settings.ContainerRegistry.getInstance().addContainer(new_material)
if not materials:
UM.Settings.ContainerRegistry.getInstance().addContainer(new_material)
hotends = machine.iterfind("./um:hotend", self.__namespaces)
for hotend in hotends:
@ -491,7 +511,15 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
else:
Logger.log("d", "Unsupported material setting %s", key)
new_hotend_material = XmlMaterialProfile(self.id + "_" + machine_id + "_" + hotend_id.replace(" ", "_"))
# It could be that we are overwriting, so check if the ID already exists.
new_hotend_id = self.id + "_" + machine_id + "_" + hotend_id.replace(" ", "_")
materials = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id=new_hotend_id)
if materials:
new_hotend_material = materials[0]
new_hotend_material.clearData()
else:
new_hotend_material = XmlMaterialProfile(new_hotend_id)
new_hotend_material.setName(self.getName())
new_hotend_material.setMetaData(copy.deepcopy(self.getMetaData()))
new_hotend_material.setDefinition(definition)
@ -509,7 +537,8 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
new_hotend_material.setProperty(key, "value", value, definition)
new_hotend_material._dirty = False
UM.Settings.ContainerRegistry.getInstance().addContainer(new_hotend_material)
if not materials: # It was not added yet, do so now.
UM.Settings.ContainerRegistry.getInstance().addContainer(new_hotend_material)
def _addSettingElement(self, builder, instance):
try: