diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml index 7259312577..9242abacdd 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml @@ -494,6 +494,25 @@ Item implicitWidth: 96 * screenScaleFactor // TODO: Theme! visible: printer && printer.activePrintJob && printer.activePrintJob.configurationChanges.length > 0 && !printerStatus.visible onClicked: base.enabled ? overrideConfirmationDialog.open() : {} + enabled: OutputDevice.supportsPrintJobActions + } + + // For cloud printing, add this mouse area over the disabled details button to indicate that it's not available + MouseArea + { + id: detailsButtonDisabledButtonArea + anchors.fill: detailsButton + hoverEnabled: detailsButton.visible && !detailsButton.enabled + onEntered: overrideButtonDisabledInfo.open() + onExited: overrideButtonDisabledInfo.close() + enabled: !detailsButton.enabled + } + + MonitorInfoBlurb + { + id: overrideButtonDisabledInfo + text: catalog.i18nc("@info", "Please update your printer's firmware to manage the queue remotely.") + target: detailsButton } } diff --git a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py index 3925ac364e..982c3a885d 100644 --- a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py +++ b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py @@ -62,6 +62,11 @@ class ClusterApiClient: def movePrintJobToTop(self, print_job_uuid: str) -> None: url = "{}/print_jobs/{}/action/move".format(self.CLUSTER_API_PREFIX, print_job_uuid) self._manager.post(self._createEmptyRequest(url), json.dumps({"to_position": 0, "list": "queued"}).encode()) + + ## Override print job configuration and force it to be printed. + def forcePrintJob(self, print_job_uuid: str) -> None: + url = "{}/print_jobs/{}".format(self.CLUSTER_API_PREFIX, print_job_uuid) + self._manager.put(self._createEmptyRequest(url), json.dumps({"force": True}).encode()) ## Delete a print job from the queue. def deletePrintJob(self, print_job_uuid: str) -> None: diff --git a/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py index cb373e7e1e..3d71429ef8 100644 --- a/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py @@ -86,7 +86,7 @@ class LocalClusterOutputDevice(UltimakerNetworkedPrinterOutputDevice): @pyqtSlot(str, name="forceSendJob") def forceSendJob(self, print_job_uuid: str) -> None: - pass # TODO + self._getApiClient().forcePrintJob(print_job_uuid) ## Set the remote print job state. # \param print_job_uuid: The UUID of the print job to set the state for.