mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-07 15:07:28 -06:00
WIP: Cleanup ContainerManager
This commit is contained in:
parent
5b37de8adb
commit
d4db41503f
1 changed files with 15 additions and 43 deletions
|
@ -5,12 +5,11 @@ import copy
|
||||||
import os.path
|
import os.path
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
import uuid
|
import uuid
|
||||||
from typing import Any, Dict, List, Union
|
from typing import Dict, Union
|
||||||
|
|
||||||
from PyQt5.QtCore import QObject, QUrl, QVariant
|
from PyQt5.QtCore import QObject, QUrl, QVariant
|
||||||
from UM.FlameProfiler import pyqtSlot
|
from UM.FlameProfiler import pyqtSlot
|
||||||
from PyQt5.QtWidgets import QMessageBox
|
from PyQt5.QtWidgets import QMessageBox
|
||||||
from UM.Util import parseBool
|
|
||||||
|
|
||||||
from UM.PluginRegistry import PluginRegistry
|
from UM.PluginRegistry import PluginRegistry
|
||||||
from UM.SaveFile import SaveFile
|
from UM.SaveFile import SaveFile
|
||||||
|
@ -22,7 +21,6 @@ from UM.Application import Application
|
||||||
from UM.Settings.ContainerStack import ContainerStack
|
from UM.Settings.ContainerStack import ContainerStack
|
||||||
from UM.Settings.DefinitionContainer import DefinitionContainer
|
from UM.Settings.DefinitionContainer import DefinitionContainer
|
||||||
from UM.Settings.InstanceContainer import InstanceContainer
|
from UM.Settings.InstanceContainer import InstanceContainer
|
||||||
from cura.QualityManager import QualityManager
|
|
||||||
|
|
||||||
from UM.MimeTypeDatabase import MimeTypeNotFoundError
|
from UM.MimeTypeDatabase import MimeTypeNotFoundError
|
||||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||||
|
@ -30,6 +28,8 @@ from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
|
|
||||||
from cura.Settings.ExtruderManager import ExtruderManager
|
from cura.Settings.ExtruderManager import ExtruderManager
|
||||||
|
from cura.Settings.ExtruderStack import ExtruderStack
|
||||||
|
from cura.Machines.MachineTools import getMachineDefinitionIDForQualitySearch
|
||||||
|
|
||||||
catalog = i18nCatalog("cura")
|
catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
|
@ -183,32 +183,6 @@ class ContainerManager(QObject):
|
||||||
def findInstanceContainers(self, criteria):
|
def findInstanceContainers(self, criteria):
|
||||||
return [entry["id"] for entry in self._container_registry.findInstanceContainersMetadata(**criteria)]
|
return [entry["id"] for entry in self._container_registry.findInstanceContainersMetadata(**criteria)]
|
||||||
|
|
||||||
@pyqtSlot(str, result = bool)
|
|
||||||
def isContainerUsed(self, container_id):
|
|
||||||
Logger.log("d", "Checking if container %s is currently used", container_id)
|
|
||||||
# check if this is a material container. If so, check if any material with the same base is being used by any
|
|
||||||
# stacks.
|
|
||||||
container_ids_to_check = [container_id]
|
|
||||||
container_results = self._container_registry.findInstanceContainersMetadata(id = container_id, type = "material")
|
|
||||||
if container_results:
|
|
||||||
this_container = container_results[0]
|
|
||||||
material_base_file = this_container["id"]
|
|
||||||
if "base_file" in this_container:
|
|
||||||
material_base_file = this_container["base_file"]
|
|
||||||
# check all material container IDs with the same base
|
|
||||||
material_containers = self._container_registry.findInstanceContainersMetadata(base_file = material_base_file,
|
|
||||||
type = "material")
|
|
||||||
if material_containers:
|
|
||||||
container_ids_to_check = [container["id"] for container in material_containers]
|
|
||||||
|
|
||||||
all_stacks = self._container_registry.findContainerStacks()
|
|
||||||
for stack in all_stacks:
|
|
||||||
for used_container_id in container_ids_to_check:
|
|
||||||
if used_container_id in [child.getId() for child in stack.getContainers()]:
|
|
||||||
Logger.log("d", "The container is in use by %s", stack.getId())
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
@pyqtSlot(str, result = str)
|
@pyqtSlot(str, result = str)
|
||||||
def makeUniqueName(self, original_name):
|
def makeUniqueName(self, original_name):
|
||||||
return self._container_registry.uniqueName(original_name)
|
return self._container_registry.uniqueName(original_name)
|
||||||
|
@ -423,11 +397,11 @@ class ContainerManager(QObject):
|
||||||
Logger.log("w", "No quality or quality changes container found in stack %s, ignoring it", stack.getId())
|
Logger.log("w", "No quality or quality changes container found in stack %s, ignoring it", stack.getId())
|
||||||
continue
|
continue
|
||||||
|
|
||||||
extruder_id = None if stack is global_stack else QualityManager.getInstance().getParentMachineDefinition(stack.getBottom()).getId()
|
extruder_definition_id = None
|
||||||
|
if isinstance(stack, ExtruderStack):
|
||||||
|
extruder_definition_id = stack.definition.getId()
|
||||||
quality_type = quality_container.getMetaDataEntry("quality_type")
|
quality_type = quality_container.getMetaDataEntry("quality_type")
|
||||||
new_changes = self._createQualityChanges(quality_type, unique_name,
|
new_changes = self._createQualityChanges(quality_type, unique_name, global_stack, extruder_definition_id)
|
||||||
Application.getInstance().getGlobalContainerStack().getBottom(),
|
|
||||||
extruder_id)
|
|
||||||
self._performMerge(new_changes, quality_changes_container, clear_settings = False)
|
self._performMerge(new_changes, quality_changes_container, clear_settings = False)
|
||||||
self._performMerge(new_changes, user_container)
|
self._performMerge(new_changes, user_container)
|
||||||
|
|
||||||
|
@ -476,14 +450,14 @@ class ContainerManager(QObject):
|
||||||
|
|
||||||
@pyqtSlot(str, "QVariantMap")
|
@pyqtSlot(str, "QVariantMap")
|
||||||
def duplicateQualityChanges(self, quality_changes_name, quality_model_item):
|
def duplicateQualityChanges(self, quality_changes_name, quality_model_item):
|
||||||
|
global_stack = Application.getInstance().getGlobalContainerStack()
|
||||||
|
|
||||||
quality_group = quality_model_item["quality_group"]
|
quality_group = quality_model_item["quality_group"]
|
||||||
quality_changes_group = quality_model_item["quality_changes_group"]
|
quality_changes_group = quality_model_item["quality_changes_group"]
|
||||||
if quality_changes_group is None:
|
if quality_changes_group is None:
|
||||||
# create global quality changes only
|
# create global quality changes only
|
||||||
new_quality_changes = self._createQualityChanges(
|
new_quality_changes = self._createQualityChanges(quality_group.quality_type, quality_changes_name,
|
||||||
quality_group.quality_type, quality_changes_name,
|
global_stack, extruder_id = None)
|
||||||
Application.getInstance().getGlobalContainerStack().definition,
|
|
||||||
extruder_id = None)
|
|
||||||
self._container_registry.addContainer(new_quality_changes)
|
self._container_registry.addContainer(new_quality_changes)
|
||||||
else:
|
else:
|
||||||
for node in quality_changes_group.getAllNodes():
|
for node in quality_changes_group.getAllNodes():
|
||||||
|
@ -711,8 +685,8 @@ class ContainerManager(QObject):
|
||||||
# \param extruder_id
|
# \param extruder_id
|
||||||
#
|
#
|
||||||
# \return A new quality_changes container with the specified container as base.
|
# \return A new quality_changes container with the specified container as base.
|
||||||
def _createQualityChanges(self, quality_type, new_name, machine_definition, extruder_id):
|
def _createQualityChanges(self, quality_type, new_name, machine, extruder_id):
|
||||||
base_id = machine_definition.getId() if extruder_id is None else extruder_id
|
base_id = machine.definition.getId() if extruder_id is None else extruder_id
|
||||||
|
|
||||||
# Create a new quality_changes container for the quality.
|
# Create a new quality_changes container for the quality.
|
||||||
quality_changes = InstanceContainer(self._createUniqueId(base_id, new_name))
|
quality_changes = InstanceContainer(self._createUniqueId(base_id, new_name))
|
||||||
|
@ -725,10 +699,8 @@ class ContainerManager(QObject):
|
||||||
quality_changes.addMetaDataEntry("extruder", extruder_id)
|
quality_changes.addMetaDataEntry("extruder", extruder_id)
|
||||||
|
|
||||||
# If the machine specifies qualities should be filtered, ensure we match the current criteria.
|
# If the machine specifies qualities should be filtered, ensure we match the current criteria.
|
||||||
if not machine_definition.getMetaDataEntry("has_machine_quality"):
|
machine_definition_id = getMachineDefinitionIDForQualitySearch(machine)
|
||||||
quality_changes.setDefinition("fdmprinter")
|
quality_changes.setDefinition(machine_definition_id)
|
||||||
else:
|
|
||||||
quality_changes.setDefinition(QualityManager.getInstance().getParentMachineDefinition(machine_definition).getId())
|
|
||||||
|
|
||||||
from cura.CuraApplication import CuraApplication
|
from cura.CuraApplication import CuraApplication
|
||||||
quality_changes.addMetaDataEntry("setting_version", CuraApplication.SettingVersion)
|
quality_changes.addMetaDataEntry("setting_version", CuraApplication.SettingVersion)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue