Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorj.delarago <joeydelarago@gmail.com>2022-06-08 11:22:24 +0300
committerj.delarago <joeydelarago@gmail.com>2022-06-08 11:22:24 +0300
commit71a817697bd3a0c5cb941efa9c4c7f3c944593af (patch)
treed6bbeb1ed80e410f6d3baf1845ca0bbf05c0c46a /cura/CuraPackageManager.py
parentde8a58f0d7e2ca5cc9e4b7966d6a7d6201118b0b (diff)
Before this change packages were only being checked if they were bundled after loading the package_id. However only installed packages were being loaded so this would always be false.
The solution here is to check first if a material file is inside "secure_paths" (these are install directory resource paths). If it is, it must be a bundled material. CURA-8610
Diffstat (limited to 'cura/CuraPackageManager.py')
-rw-r--r--cura/CuraPackageManager.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/cura/CuraPackageManager.py b/cura/CuraPackageManager.py
index e23ed47ffa..a153906005 100644
--- a/cura/CuraPackageManager.py
+++ b/cura/CuraPackageManager.py
@@ -1,7 +1,9 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
+import glob
import os
+from pathlib import Path
from typing import Any, cast, Dict, List, Set, Tuple, TYPE_CHECKING, Optional
from UM.Logger import Logger
@@ -55,6 +57,24 @@ class CuraPackageManager(PackageManager):
super().initialize()
+ def isMaterialBundled(self, file_name: str, guid: str):
+ """ Check if there is a bundled material name with file_name and guid """
+ for path in Resources.getSecureSearchPaths():
+ paths = [Path(p) for p in glob.glob(path + '/**/*.xml.fdm_material')]
+ for material in paths:
+ if material.name == file_name:
+ with open(str(material), encoding="utf-8") as f:
+ # Make sure the file we found has the same guid as our material
+ # Parsing this xml would be better but the namespace is needed to search it.
+ parsed_guid = PluginRegistry.getInstance().getPluginObject(
+ "XmlMaterialProfile").getMetadataFromSerialized(
+ f.read(), "GUID")
+ if guid == parsed_guid:
+ # The material we found matches both filename and GUID
+ return True
+
+ return False
+
def getMaterialFilePackageId(self, file_name: str, guid: str) -> str:
"""Get the id of the installed material package that contains file_name"""
for material_package in [f for f in os.scandir(self._installation_dirs_dict["materials"]) if f.is_dir()]: