diff options
author | Jaime van Kessel <nallath@gmail.com> | 2022-06-13 14:22:03 +0300 |
---|---|---|
committer | Jaime van Kessel <nallath@gmail.com> | 2022-06-13 14:22:03 +0300 |
commit | 525f96db98a28aeb518f6d8196cf7fb7884ae5b3 (patch) | |
tree | 5a484583f5bf0f3e1f9c87172a06aa5a96804caf /cura | |
parent | 739749726094488d132d051d2cc75261fc3c05ea (diff) | |
parent | ddb49ddba4345df1bea2e08c56992a08044ac356 (diff) |
Merge branch 'CURA-8610_add_package_metadata' of github.com:Ultimaker/Cura
Diffstat (limited to 'cura')
-rw-r--r-- | cura/CuraPackageManager.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/cura/CuraPackageManager.py b/cura/CuraPackageManager.py index e23ed47ffa..87a2935d96 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,26 @@ 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(): + # Secure search paths are install directory paths, if a material is in here it must be bundled. + + 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()]: |