1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-30 00:12:50 -05:00

cups: sync with API changes

This commit is contained in:
bbedward
2025-11-05 16:15:11 -05:00
parent 3702f493f6
commit e75b47c21a
2 changed files with 181 additions and 138 deletions

View File

@@ -28,7 +28,9 @@ PluginComponent {
} }
ccWidgetIsActive: CupsService.cupsAvailable && CupsService.getTotalJobsNum() > 0 ccWidgetIsActive: CupsService.cupsAvailable && CupsService.getTotalJobsNum() > 0
onCcWidgetToggled: {} onCcWidgetToggled: {
}
ccDetailContent: Component { ccDetailContent: Component {
Rectangle { Rectangle {
@@ -274,7 +276,7 @@ PluginComponent {
iconName: "delete" iconName: "delete"
buttonSize: 36 buttonSize: 36
onClicked: { onClicked: {
CupsService.cancelJob(modelData.id) CupsService.cancelJob(CupsService.getSelectedPrinter(), modelData.id)
} }
} }
} }

View File

@@ -1,6 +1,6 @@
pragma Singleton pragma Singleton
pragma ComponentBehavior: Bound pragma ComponentBehavior
import QtQuick import QtQuick
import Quickshell import Quickshell
@@ -45,7 +45,7 @@ Singleton {
function onCupsStateUpdate(data) { function onCupsStateUpdate(data) {
console.log("CupsService: Subscription update received") console.log("CupsService: Subscription update received")
updateState(data) getState()
} }
function onCapabilitiesChanged() { function onCapabilitiesChanged() {
@@ -71,17 +71,31 @@ Singleton {
} }
function getState() { function getState() {
if (!cupsAvailable) return if (!cupsAvailable)
return
DMSService.sendRequest("cups.getState", null, response => { DMSService.sendRequest("cups.getPrinters", null, response => {
if (response.result) { if (response.result) {
updateState(response.result) updatePrinters(response.result)
fetchAllJobs()
} }
}) })
} }
function updateState(state) { function updatePrinters(printersData) {
printerNames = Object.keys(state.printers) printerNames = printersData.map(p => p.name)
let printersObj = {}
for (var i = 0; i < printersData.length; i++) {
let printer = printersData[i]
printersObj[printer.name] = {
"state": printer.state,
"stateReason": printer.stateReason,
"jobs": []
}
}
printers = printersObj
if (printerNames.length > 0) { if (printerNames.length > 0) {
if (selectedPrinter.length > 0) { if (selectedPrinter.length > 0) {
if (!printerNames.includes(selectedPrinter)) { if (!printerNames.includes(selectedPrinter)) {
@@ -91,7 +105,26 @@ Singleton {
selectedPrinter = printerNames[0] selectedPrinter = printerNames[0]
} }
} }
printers = state.printers }
function fetchAllJobs() {
for (var i = 0; i < printerNames.length; i++) {
fetchJobsForPrinter(printerNames[i])
}
}
function fetchJobsForPrinter(printerName) {
const params = {
"printerName": printerName
}
DMSService.sendRequest("cups.getJobs", params, response => {
if (response.result && printers[printerName]) {
let updatedPrinters = Object.assign({}, printers)
updatedPrinters[printerName].jobs = response.result
printers = updatedPrinters
}
})
} }
function getSelectedPrinter() { function getSelectedPrinter() {
@@ -109,19 +142,22 @@ Singleton {
} }
function getPrintersNum() { function getPrintersNum() {
if (!cupsAvailable) return 0 if (!cupsAvailable)
return 0
return printerNames.length return printerNames.length
} }
function getPrintersNames() { function getPrintersNames() {
if (!cupsAvailable) return [] if (!cupsAvailable)
return []
return printerNames return printerNames
} }
function getTotalJobsNum() { function getTotalJobsNum() {
if (!cupsAvailable) return 0 if (!cupsAvailable)
return 0
var result = 0 var result = 0
for (var i = 0; i < printerNames.length; i++) { for (var i = 0; i < printerNames.length; i++) {
@@ -134,53 +170,58 @@ Singleton {
} }
function getCurrentPrinterState() { function getCurrentPrinterState() {
if (!cupsAvailable || !selectedPrinter) return "" if (!cupsAvailable || !selectedPrinter)
return ""
var printer = printers[selectedPrinter] var printer = printers[selectedPrinter]
return printer.state return printer.state
} }
function getCurrentPrinterStatePrettyShort() { function getCurrentPrinterStatePrettyShort() {
if (!cupsAvailable || !selectedPrinter) return "" if (!cupsAvailable || !selectedPrinter)
return ""
var printer = printers[selectedPrinter] var printer = printers[selectedPrinter]
return getPrinterStateTranslation(printer.state) + return getPrinterStateTranslation(printer.state) + " (" + getPrinterStateReasonTranslation(printer.stateReason) + ")"
" (" + getPrinterStateReasonTranslation(printer.stateReason) + ")"
} }
function getCurrentPrinterStatePretty() { function getCurrentPrinterStatePretty() {
if (!cupsAvailable || !selectedPrinter) return "" if (!cupsAvailable || !selectedPrinter)
return ""
var printer = printers[selectedPrinter] var printer = printers[selectedPrinter]
return getPrinterStateTranslation(printer.state) + return getPrinterStateTranslation(printer.state) + " (" + I18n.tr("Reason") + ": " + getPrinterStateReasonTranslation(printer.stateReason) + ")"
" (" + I18n.tr("Reason") + ": " + getPrinterStateReasonTranslation(printer.stateReason) + ")"
} }
function getCurrentPrinterJobs() { function getCurrentPrinterJobs() {
if (!cupsAvailable || !selectedPrinter) return [] if (!cupsAvailable || !selectedPrinter)
return []
return getJobs(selectedPrinter) return getJobs(selectedPrinter)
} }
function getJobs(printerName) { function getJobs(printerName) {
if (!cupsAvailable) return "" if (!cupsAvailable)
return ""
var printer = printers[printerName] var printer = printers[printerName]
return printer.jobs return printer.jobs
} }
function getJobsNum(printerName) { function getJobsNum(printerName) {
if (!cupsAvailable) return 0 if (!cupsAvailable)
return 0
var printer = printers[printerName] var printer = printers[printerName]
return printer.jobs.length return printer.jobs.length
} }
function pausePrinter(printerName) { function pausePrinter(printerName) {
if (!cupsAvailable) return if (!cupsAvailable)
return
const params = { const params = {
printerName: printerName "printerName": printerName
} }
DMSService.sendRequest("cups.pausePrinter", params, response => { DMSService.sendRequest("cups.pausePrinter", params, response => {
@@ -191,10 +232,11 @@ Singleton {
} }
function resumePrinter(printerName) { function resumePrinter(printerName) {
if (!cupsAvailable) return if (!cupsAvailable)
return
const params = { const params = {
printerName: printerName "printerName": printerName
} }
DMSService.sendRequest("cups.resumePrinter", params, response => { DMSService.sendRequest("cups.resumePrinter", params, response => {
@@ -204,30 +246,37 @@ Singleton {
}) })
} }
function cancelJob(jobid) { function cancelJob(printerName, jobID) {
if (!cupsAvailable) return if (!cupsAvailable)
return
const params = { const params = {
jobid: jobid "printerName": printerName,
"jobID": jobID
} }
DMSService.sendRequest("cups.cancelJob", params, response => { DMSService.sendRequest("cups.cancelJob", params, response => {
if (response.error) { if (response.error) {
ToastService.showError(I18n.tr("Failed to cancel selected job") + " - " + response.error) ToastService.showError(I18n.tr("Failed to cancel selected job") + " - " + response.error)
} else {
fetchJobsForPrinter(printerName)
} }
}) })
} }
function purgeJobs(printerName) { function purgeJobs(printerName) {
if (!cupsAvailable) return if (!cupsAvailable)
return
const params = { const params = {
printerName: printerName "printerName": printerName
} }
DMSService.sendRequest("cups.purgeJobs", params, response => { DMSService.sendRequest("cups.purgeJobs", params, response => {
if (response.error) { if (response.error) {
ToastService.showError(I18n.tr("Failed to cancel all jobs") + " - " + response.error) ToastService.showError(I18n.tr("Failed to cancel all jobs") + " - " + response.error)
} else {
fetchJobsForPrinter(printerName)
} }
}) })
} }
@@ -299,15 +348,7 @@ Singleton {
} }
function getPrinterStateReasonTranslation(reason) { function getPrinterStateReasonTranslation(reason) {
let allReasons = Object.assign({}, let allReasons = Object.assign({}, reasonsGeneral, reasonsSupplies, reasonsMedia, reasonsParts, reasonsErrors, reasonsService, reasonsConnectivity)
reasonsGeneral,
reasonsSupplies,
reasonsMedia,
reasonsParts,
reasonsErrors,
reasonsService,
reasonsConnectivity
)
let basReason = reason let basReason = reason
let suffix = "" let suffix = ""