Remove _added functions for nodes that can't be added during runtime

Among the machines, variants, materials, qualities and intents, only machines and materials can ever be added during runtime. For the rest, we don't need to listen to these signals.

Contributes to issue CURA-6600.
This commit is contained in:
Ghostkeeper 2019-08-16 16:28:42 +02:00
parent 97e77994a1
commit 80baeb9873
No known key found for this signature in database
GPG key ID: 86BEF881AE2CF276
6 changed files with 7 additions and 188 deletions

View file

@ -4,7 +4,6 @@
from typing import TYPE_CHECKING
from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.Settings.Interfaces import ContainerInterface
from cura.Machines.ContainerNode import ContainerNode
from cura.Machines.QualityNode import QualityNode
@ -20,10 +19,8 @@ class MaterialNode(ContainerNode):
super().__init__(container_id)
self.variant = variant
self.qualities = {} # type: Dict[str, QualityNode] # Mapping container IDs to quality profiles.
container_registry = ContainerRegistry.getInstance()
my_metadata = container_registry.findContainersMetadata(id = container_id)[0]
my_metadata = ContainerRegistry.getInstance().findContainersMetadata(id = container_id)[0]
self.base_file = my_metadata["base_file"]
container_registry.containerAdded.connect(self._qualityAdded)
self._loadAll()
def _loadAll(self) -> None:
@ -47,39 +44,4 @@ class MaterialNode(ContainerNode):
for quality in qualities:
quality_id = quality["id"]
if quality_id not in self.qualities:
self.qualities[quality_id] = QualityNode(quality_id, parent = self)
def _qualityAdded(self, container: ContainerInterface) -> None:
if container.getMetaDataEntry("type") != "quality":
return # Not interested.
if not self.variant.machine.has_machine_quality:
if container.getMetaDataEntry("definition") != "fdmprinter":
return # Only want global qualities.
else:
if container.getMetaDataEntry("definition") != self.variant.machine.quality_definition:
return # Doesn't match the machine.
if container.getMetaDataEntry("variant") != self.variant.variant_name:
return # Doesn't match the variant.
# Detect if we're falling back to matching via GUID.
# If so, we might need to erase the current list and put just this one in (i.e. no longer use the fallback).
container_registry = ContainerRegistry.getInstance()
my_metadata = container_registry.findInstanceContainersMetadata(id = self.container_id)[0]
my_material_type = my_metadata.get("material")
allowed_material_ids = {metadata["id"] for metadata in container_registry.findInstanceContainersMetadata(type = "material", material = my_material_type)}
# Select any quality profile; if the material is not matching by material type, we've been falling back to GUID all along.
is_fallback_guid = len(self.qualities) == 0 or next(iter(self.qualities.values())).getMetaDataEntry("material") not in allowed_material_ids
if is_fallback_guid and container.getMetaDataEntry("material") in allowed_material_ids: # So far we needed the fallback, but no longer!
self.qualities.clear() # It'll get filled with the new quality profile then.
else:
if not is_fallback_guid:
if container.getMetaDataEntry("material") not in allowed_material_ids:
return # Doesn't match the material type.
else:
my_material_guid = my_metadata.get("GUID")
allowed_material_ids = {metadata["id"] for metadata in container_registry.findInstanceContainersMetadata(type = "material", guid = my_material_guid)}
if container.getMetaDataEntry("material") not in allowed_material_ids:
return # Doesn't match the material GUID.
quality_id = container.getId()
self.qualities[quality_id] = QualityNode(quality_id, parent = self)
self.qualities[quality_id] = QualityNode(quality_id, parent = self)