From: Zdenek Dohnal
-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)]
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 f4a35e4e5a..4dae7358bc 100644
--- a/systemv/lpstat.c
+++ b/systemv/lpstat.c
@@ -141,16 +141,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;
@@ -1358,7 +1358,7 @@ show_jobs(const char *dests, /* I - Destinations */
NULL, cupsGetUser());
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...
@@ -1396,6 +1396,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
@@ -1476,7 +1477,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->name, "job-completed-successfully"))))
+ continue;
+
+ snprintf(temp, sizeof(temp), "%s-%d", dest, jobid);
_cupsStrDate(date, sizeof(date), jobtime);
@@ -1557,7 +1562,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... */
{