diff --git a/cura/PrinterOutput/PrintJobOutputModel.py b/cura/PrinterOutput/PrintJobOutputModel.py index 9c96c45ca8..fa8bbe8673 100644 --- a/cura/PrinterOutput/PrintJobOutputModel.py +++ b/cura/PrinterOutput/PrintJobOutputModel.py @@ -2,6 +2,7 @@ # Cura is released under the terms of the LGPLv3 or higher. from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, pyqtSlot +from typing import Optional MYPY = False if MYPY: from cura.PrinterOutput.PrinterOutputController import PrinterOutputController @@ -15,6 +16,7 @@ class PrintJobOutputModel(QObject): nameChanged = pyqtSignal() keyChanged = pyqtSignal() assignedPrinterChanged = pyqtSignal() + ownerChanged = pyqtSignal() def __init__(self, output_controller: "PrinterOutputController", key: str = "", name: str = "", parent=None): super().__init__(parent) @@ -24,7 +26,17 @@ class PrintJobOutputModel(QObject): self._time_elapsed = 0 self._name = name # Human readable name self._key = key # Unique identifier - self._assigned_printer = None + self._assigned_printer = None # type: Optional[PrinterOutputModel] + self._owner = "" # Who started/owns the print job? + + @pyqtProperty(str, notify=ownerChanged) + def owner(self): + return self._owner + + def updateOwner(self, owner): + if self._owner != owner: + self._owner = owner + self.ownerChanged.emit() @pyqtProperty(QObject, notify=assignedPrinterChanged) def assignedPrinter(self): diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index ce96627296..362dc344d4 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -198,11 +198,17 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): print_job.updateTimeTotal(print_job_data["time_total"]) print_job.updateTimeElapsed(print_job_data["time_elapsed"]) print_job.updateState(print_job_data["status"]) + print_job.updateOwner(print_job_data["owner"]) + printer = None if print_job.state != "queued": # Print job should be assigned to a printer. printer = self._getPrinterByKey(print_job_data["printer_uuid"]) - if printer: - printer.updateActivePrintJob(print_job) + else: # Status is queued + # The job can "reserve" a printer if some changes are required. + printer = self._getPrinterByKey(print_job_data["assigned_to"]) + + if printer: + printer.updateActivePrintJob(print_job) print_jobs_seen.append(print_job) for old_job in self._print_jobs: diff --git a/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml b/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml index 5c0963a390..29fe8882f9 100644 --- a/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml @@ -269,14 +269,7 @@ Rectangle case "sent_to_printer": return catalog.i18nc("@label", "Preparing to print") case "queued": - if (printJob.configuration_changes_required != null && printJob.configuration_changes_required.length !== 0) - { return catalog.i18nc("@label:status", "Action required"); - } - else - { - return ""; - } case "pausing": case "paused": return catalog.i18nc("@label:status", "Paused"); @@ -334,10 +327,7 @@ Rectangle { if(printJob.state === "queued") { - if (printJob.configuration_changes_required != null && printJob.configuration_changes_required.length !== 0) - { - return "action-required-icon.svg"; - } + return "action-required-icon.svg"; } else if (printJob.state === "wait_cleanup") { @@ -401,10 +391,7 @@ Rectangle case "wait_for_configuration": return catalog.i18nc("@label", "Not accepting print jobs") case "queued": - if (printJob.configuration_changes_required != undefined) - { - return catalog.i18nc("@label", "Waiting for configuration change"); - } + return catalog.i18nc("@label", "Waiting for configuration change"); default: return ""; }