diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index e0d996c80e..3e562adf14 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -352,7 +352,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): @pyqtProperty("QVariantList", notify = printJobsChanged) def queuedPrintJobs(self) -> List[PrintJobOutputModel]: - return [print_job for print_job in self._print_jobs if print_job.state == "queued"] + return [print_job for print_job in self._print_jobs if print_job.state == "queued" or print_job.state == "error"] @pyqtProperty("QVariantList", notify = printJobsChanged) def activePrintJobs(self) -> List[PrintJobOutputModel]: @@ -474,7 +474,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): self._updatePrintJob(print_job, print_job_data) - if print_job.state != "queued": # Print job should be assigned to a printer. + if print_job.state != "queued" and print_job.state != "error": # Print job should be assigned to a printer. if print_job.state in ["failed", "finished", "aborted", "none"]: # Print job was already completed, so don't attach it to a printer. printer = None @@ -559,9 +559,20 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): def _updatePrintJob(self, print_job: PrintJobOutputModel, data: Dict[str, Any]) -> None: print_job.updateTimeTotal(data["time_total"]) print_job.updateTimeElapsed(data["time_elapsed"]) - print_job.updateState(data["status"]) + impediments_to_printing = data.get("impediments_to_printing", []) print_job.updateOwner(data["owner"]) + status_set_by_impediment = False + for impediment in impediments_to_printing: + if impediment["severity"] == "UNFIXABLE": + status_set_by_impediment = True + print_job.updateState("error") + break + + if not status_set_by_impediment: + print_job.updateState(data["status"]) + + def _createMaterialOutputModel(self, material_data) -> MaterialOutputModel: containers = ContainerRegistry.getInstance().findInstanceContainers(type="material", GUID=material_data["guid"]) if containers: diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index c3e445d933..2cd0a4b206 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -80,11 +80,26 @@ Item Image { + id: printJobPreview source: printJob.previewImageUrl anchors.top: ownerName.bottom anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: totalTimeLabel.bottom width: height + opacity: printJob.state == "error" ? 0.5 : 1.0 + } + + UM.RecolorImage + { + id: statusImage + anchors.centerIn: printJobPreview + source: printJob.state == "error" ? "aborted-icon.svg" : "" + visible: source != "" + width: 0.5 * printJobPreview.width + height: 0.5 * printJobPreview.height + sourceSize.width: width + sourceSize.height: height + color: "black" } Label @@ -121,7 +136,11 @@ Item { if(printJob.assignedPrinter == null) { - return catalog.i18nc("@label", "Waiting for: first available") + if(printJob.state == "error") + { + return catalog.i18nc("@label", "Waiting for: Unavailable printer") + } + return catalog.i18nc("@label", "Waiting for: First available") } else { diff --git a/plugins/UM3NetworkPrinting/warning-icon.svg b/plugins/UM3NetworkPrinting/warning-icon.svg new file mode 100644 index 0000000000..1e5359a5eb --- /dev/null +++ b/plugins/UM3NetworkPrinting/warning-icon.svg @@ -0,0 +1 @@ +warning-icon \ No newline at end of file