Ensure metadata changes are propagated to the related containers

Now we properly serialize the new metadata

Contributes to CURA-342
This commit is contained in:
Arjen Hiemstra 2016-06-30 17:32:10 +02:00
parent 92d3bea229
commit ded4c89cb5

View File

@ -28,6 +28,12 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
result.setMetaDataEntry("GUID", str(uuid.uuid4())) result.setMetaDataEntry("GUID", str(uuid.uuid4()))
return result return result
def setMetaDataEntry(self, key, value):
super().setMetaDataEntry(key, value)
for container in UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(GUID = self.getMetaDataEntry("GUID")):
container.setMetaData(copy.deepcopy(self._metadata))
def setProperty(self, key, property_name, property_value, container = None): def setProperty(self, key, property_name, property_value, container = None):
super().setProperty(key, property_name, property_value) super().setProperty(key, property_name, property_value)
@ -75,8 +81,7 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
builder.end("brand") builder.end("brand")
builder.start("material") builder.start("material")
builder.data(self.getName()) builder.data(metadata.pop("material", ""))
metadata.pop("material", "")
builder.end("material") builder.end("material")
builder.start("color") builder.start("color")
@ -128,8 +133,8 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
variant = container.getMetaDataEntry("variant") variant = container.getMetaDataEntry("variant")
if variant: if variant:
if definition_id not in machine_nozzle_map: if definition_id not in machine_nozzle_map:
machine_nozzle_map[definition_id] = [] machine_nozzle_map[definition_id] = {}
machine_nozzle_map[definition_id].append(container) machine_nozzle_map[definition_id][variant] = container
for definition_id, container in machine_container_map.items(): for definition_id, container in machine_container_map.items():
definition = container.getDefinition() definition = container.getDefinition()
@ -150,7 +155,7 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
self._addSettingElement(builder, instance) self._addSettingElement(builder, instance)
# Find all hotend sub-profiles corresponding to this material and machine and add them to this profile. # Find all hotend sub-profiles corresponding to this material and machine and add them to this profile.
for hotend in machine_nozzle_map[definition_id]: for hotend_id, hotend in machine_nozzle_map[definition_id].items():
variant_containers = registry.findInstanceContainers(id = hotend.getMetaDataEntry("variant")) variant_containers = registry.findInstanceContainers(id = hotend.getMetaDataEntry("variant"))
if not variant_containers: if not variant_containers:
continue continue