mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-07 06:57:28 -06:00
Read package.json required package information. Put package_ids for packages we don't have installed inside the WorkspaceDialog
CURA-6990
This commit is contained in:
parent
f130eb2e7c
commit
4572d53e11
2 changed files with 32 additions and 0 deletions
|
@ -23,6 +23,7 @@ from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||||
from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType
|
from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType
|
||||||
from UM.Job import Job
|
from UM.Job import Job
|
||||||
from UM.Preferences import Preferences
|
from UM.Preferences import Preferences
|
||||||
|
from cura.CuraPackageManager import CuraPackageManager
|
||||||
|
|
||||||
from cura.Machines.ContainerTree import ContainerTree
|
from cura.Machines.ContainerTree import ContainerTree
|
||||||
from cura.Settings.CuraStackBuilder import CuraStackBuilder
|
from cura.Settings.CuraStackBuilder import CuraStackBuilder
|
||||||
|
@ -579,6 +580,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||||
is_printer_group = True
|
is_printer_group = True
|
||||||
machine_name = group_name
|
machine_name = group_name
|
||||||
|
|
||||||
|
# Getting missing required package ids
|
||||||
|
package_metadata = self._parse_packages_metadata(archive)
|
||||||
|
missing_package_ids = self._get_missing_package_ids(package_metadata)
|
||||||
|
|
||||||
# Show the dialog, informing the user what is about to happen.
|
# Show the dialog, informing the user what is about to happen.
|
||||||
self._dialog.setMachineConflict(machine_conflict)
|
self._dialog.setMachineConflict(machine_conflict)
|
||||||
self._dialog.setIsPrinterGroup(is_printer_group)
|
self._dialog.setIsPrinterGroup(is_printer_group)
|
||||||
|
@ -599,6 +604,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||||
self._dialog.setExtruders(extruders)
|
self._dialog.setExtruders(extruders)
|
||||||
self._dialog.setVariantType(variant_type_name)
|
self._dialog.setVariantType(variant_type_name)
|
||||||
self._dialog.setHasObjectsOnPlate(Application.getInstance().platformActivity)
|
self._dialog.setHasObjectsOnPlate(Application.getInstance().platformActivity)
|
||||||
|
self._dialog.setRequiredPackages(missing_package_ids)
|
||||||
self._dialog.show()
|
self._dialog.show()
|
||||||
|
|
||||||
# Block until the dialog is closed.
|
# Block until the dialog is closed.
|
||||||
|
@ -1243,3 +1249,25 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||||
metadata = data.iterfind("./um:metadata/um:name/um:label", {"um": "http://www.ultimaker.com/material"})
|
metadata = data.iterfind("./um:metadata/um:name/um:label", {"um": "http://www.ultimaker.com/material"})
|
||||||
for entry in metadata:
|
for entry in metadata:
|
||||||
return entry.text
|
return entry.text
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _parse_packages_metadata(archive: zipfile.ZipFile) -> List[Dict[str, str]]:
|
||||||
|
try:
|
||||||
|
package_metadata = json.loads(archive.open("Metadata/packages.json").read().decode("utf-8"))
|
||||||
|
return package_metadata["packages"]
|
||||||
|
except Exception:
|
||||||
|
Logger.error("Failed to load packes metadata from .3mf file")
|
||||||
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _get_missing_package_ids(package_metadata: List[Dict[str, str]]) -> List[str]:
|
||||||
|
missing_packages = []
|
||||||
|
package_manager = cast(CuraPackageManager, CuraApplication.getInstance().getPackageManager())
|
||||||
|
|
||||||
|
for package in package_metadata:
|
||||||
|
package_id = package["id"]
|
||||||
|
if not package_manager.isPackageInstalled(package_id):
|
||||||
|
missing_packages.append(package_id)
|
||||||
|
|
||||||
|
return missing_packages
|
||||||
|
|
|
@ -59,6 +59,7 @@ class WorkspaceDialog(QObject):
|
||||||
self._objects_on_plate = False
|
self._objects_on_plate = False
|
||||||
self._is_printer_group = False
|
self._is_printer_group = False
|
||||||
self._updatable_machines_model = UpdatableMachinesModel(self)
|
self._updatable_machines_model = UpdatableMachinesModel(self)
|
||||||
|
self._missing_package_ids = []
|
||||||
|
|
||||||
machineConflictChanged = pyqtSignal()
|
machineConflictChanged = pyqtSignal()
|
||||||
qualityChangesConflictChanged = pyqtSignal()
|
qualityChangesConflictChanged = pyqtSignal()
|
||||||
|
@ -274,6 +275,9 @@ class WorkspaceDialog(QObject):
|
||||||
self._has_quality_changes_conflict = quality_changes_conflict
|
self._has_quality_changes_conflict = quality_changes_conflict
|
||||||
self.qualityChangesConflictChanged.emit()
|
self.qualityChangesConflictChanged.emit()
|
||||||
|
|
||||||
|
def setRequiredPackages(self, missing_package_ids):
|
||||||
|
self._missing_package_ids = missing_package_ids
|
||||||
|
|
||||||
def getResult(self) -> Dict[str, Optional[str]]:
|
def getResult(self) -> Dict[str, Optional[str]]:
|
||||||
if "machine" in self._result and self.updatableMachinesModel.count <= 1:
|
if "machine" in self._result and self.updatableMachinesModel.count <= 1:
|
||||||
self._result["machine"] = None
|
self._result["machine"] = None
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue