From 7d01ce50519e0fce1fdf71335295a227ced781d4 Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Fri, 24 Nov 2023 07:42:05 +0100 Subject: [PATCH] lpstat: Implemenet successful filter for jobs --- CHANGES.md | 2 ++ doc/help/man-lpstat.html | 2 +- man/lpstat.1 | 2 +- systemv/lpstat.c | 17 +++++++++++------ 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 50bc96cb28..9ed7424630 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,8 @@ CHANGES - OpenPrinting CUPS 2.4.8 - TBA Changes in CUPS v2.4.8 (TBA) ---------------------------- +- Added new value for 'lpstat' option '-W' - successfull - for getting + successfully printed jobs (Issue #830) - Fixed memory leak when creating color profiles (Issue #815) - Fixed memory leak when unloading a job (Issue #813) - Raised `cups_enum_dests()` timeout for listing available IPP printers (Issue #751) diff --git a/doc/help/man-lpstat.html b/doc/help/man-lpstat.html index ce7f48a49a..aed35f3bda 100644 --- a/doc/help/man-lpstat.html +++ b/doc/help/man-lpstat.html @@ -77,7 +77,7 @@ The lpstat command supports the following options:
-U username
Specifies an alternate username.
-W which-jobs -
Specifies which jobs to show, "completed" or "not-completed" (the default). +
Specifies which jobs to show, "all", "successful", "completed" or "not-completed" (the default). This option must appear before the -o option and/or any printer names, otherwise the default ("not-completed") value will be used in the request to the scheduler.
-a [printer(s)]
Shows the accepting state of printer queues. diff --git a/man/lpstat.1 b/man/lpstat.1 index dec52e2bd2..9197ed2820 100644 --- a/man/lpstat.1 +++ b/man/lpstat.1 @@ -82,7 +82,7 @@ Shows the ranking of print jobs. Specifies an alternate username. .TP 5 \fB\-W \fIwhich-jobs\fR -Specifies which jobs to show, "completed" or "not-completed" (the default). +Specifies which jobs to show, "all, "successful", "completed" or "not-completed" (the default). This option \fImust\fR appear before the \fI-o\fR option and/or any printer names, otherwise the default ("not-completed") value will be used in the request to the scheduler. .TP 5 \fB\-a \fR[\fIprinter(s)\fR] diff --git a/systemv/lpstat.c b/systemv/lpstat.c index eb1258ac95..b23f04d0df 100644 --- a/systemv/lpstat.c +++ b/systemv/lpstat.c @@ -147,16 +147,16 @@ main(int argc, /* I - Number of command-line arguments */ if (i >= argc) { - _cupsLangPrintf(stderr, _("%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" option."), argv[0]); + _cupsLangPrintf(stderr, _("%s: Error - need \"completed\", \"not-completed\", \"successful\", or \"all\" after \"-W\" option."), argv[0]); usage(); } which = argv[i]; } - if (strcmp(which, "completed") && strcmp(which, "not-completed") && strcmp(which, "all")) + if (strcmp(which, "completed") && strcmp(which, "not-completed") && strcmp(which, "all") && strcmp(which, "successful")) { - _cupsLangPrintf(stderr, _("%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" option."), argv[0]); + _cupsLangPrintf(stderr, _("%s: Error - need \"completed\", \"not-completed\", \"successful\", or \"all\" after \"-W\" option."), argv[0]); usage(); } break; @@ -1364,7 +1364,7 @@ show_jobs(const char *dests, /* I - Destinations */ NULL, cupsUser()); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "which-jobs", - NULL, which); + NULL, !strcmp(which, "successful") ? "completed" : which); /* * Do the request and get back a response... @@ -1402,6 +1402,7 @@ show_jobs(const char *dests, /* I - Destinations */ if (!strcmp(which, "aborted") || !strcmp(which, "canceled") || + !strcmp(which, "successful") || !strcmp(which, "completed")) time_at = "time-at-completed"; else @@ -1482,7 +1483,11 @@ show_jobs(const char *dests, /* I - Destinations */ if (match_list(dests, dest) && match_list(users, username)) { - snprintf(temp, sizeof(temp), "%s-%d", dest, jobid); + if (!strcmp(which, "successful") && (!reasons || (reasons && + strcmp(reasons->values[0].string.text, "job-completed-successfully")))) + continue; + + snprintf(temp, sizeof(temp), "%s-%d", dest, jobid); _cupsStrDate(date, sizeof(date), jobtime); @@ -1563,7 +1568,7 @@ show_printers(const char *printers, /* I - Destinations */ int jobid; /* Job ID of current job */ char printer_uri[HTTP_MAX_URI], /* Printer URI */ - printer_state_time[255];/* Printer state time */ + printer_state_time[255];/* Printer state time */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ static const char *pattrs[] = /* Attributes we need for printers... */ { -- 2.47.2