]>
Commit | Line | Data |
---|---|---|
fa73b229 | 1 | /* |
503b54c9 | 2 | * Notification routines for CUPS. |
fa73b229 | 3 | * |
503b54c9 MS |
4 | * Copyright 2007-2013 by Apple Inc. |
5 | * Copyright 2005-2006 by Easy Software Products. | |
fa73b229 | 6 | * |
e3101897 | 7 | * Licensed under Apache License v2.0. See the file "LICENSE" for more information. |
fa73b229 | 8 | */ |
9 | ||
10 | /* | |
11 | * Include necessary headers... | |
12 | */ | |
13 | ||
71e16022 | 14 | #include "cups-private.h" |
fa73b229 | 15 | |
16 | ||
17 | /* | |
18 | * 'cupsNotifySubject()' - Return the subject for the given notification message. | |
19 | * | |
568fa3fa | 20 | * The returned string must be freed by the caller using @code free@. |
fa73b229 | 21 | * |
8072030b | 22 | * @since CUPS 1.2/macOS 10.5@ |
fa73b229 | 23 | */ |
24 | ||
5a738aea | 25 | char * /* O - Subject string or @code NULL@ */ |
fa73b229 | 26 | cupsNotifySubject(cups_lang_t *lang, /* I - Language data */ |
27 | ipp_t *event) /* I - Event data */ | |
28 | { | |
29 | char buffer[1024]; /* Subject buffer */ | |
30 | const char *prefix, /* Prefix on subject */ | |
31 | *state; /* Printer/job state string */ | |
32 | ipp_attribute_t *job_id, /* notify-job-id */ | |
33 | *job_name, /* job-name */ | |
34 | *job_state, /* job-state */ | |
35 | *printer_name, /* printer-name */ | |
36 | *printer_state, /* printer-state */ | |
37 | *printer_uri, /* notify-printer-uri */ | |
38 | *subscribed; /* notify-subscribed-event */ | |
39 | ||
40 | ||
41 | /* | |
42 | * Range check input... | |
43 | */ | |
44 | ||
45 | if (!event || !lang) | |
46 | return (NULL); | |
47 | ||
48 | /* | |
49 | * Get the required attributes... | |
50 | */ | |
51 | ||
52 | job_id = ippFindAttribute(event, "notify-job-id", IPP_TAG_INTEGER); | |
53 | job_name = ippFindAttribute(event, "job-name", IPP_TAG_NAME); | |
54 | job_state = ippFindAttribute(event, "job-state", IPP_TAG_ENUM); | |
55 | printer_name = ippFindAttribute(event, "printer-name", IPP_TAG_NAME); | |
56 | printer_state = ippFindAttribute(event, "printer-state", IPP_TAG_ENUM); | |
57 | printer_uri = ippFindAttribute(event, "notify-printer-uri", IPP_TAG_URI); | |
58 | subscribed = ippFindAttribute(event, "notify-subscribed-event", | |
59 | IPP_TAG_KEYWORD); | |
60 | ||
61 | ||
62 | if (job_id && printer_name && printer_uri && job_state) | |
63 | { | |
64 | /* | |
65 | * Job event... | |
66 | */ | |
67 | ||
68 | prefix = _cupsLangString(lang, _("Print Job:")); | |
69 | ||
70 | switch (job_state->values[0].integer) | |
71 | { | |
cb7f98ee | 72 | case IPP_JSTATE_PENDING : |
fa73b229 | 73 | state = _cupsLangString(lang, _("pending")); |
74 | break; | |
cb7f98ee | 75 | case IPP_JSTATE_HELD : |
fa73b229 | 76 | state = _cupsLangString(lang, _("held")); |
77 | break; | |
cb7f98ee | 78 | case IPP_JSTATE_PROCESSING : |
fa73b229 | 79 | state = _cupsLangString(lang, _("processing")); |
80 | break; | |
cb7f98ee | 81 | case IPP_JSTATE_STOPPED : |
fa73b229 | 82 | state = _cupsLangString(lang, _("stopped")); |
83 | break; | |
cb7f98ee | 84 | case IPP_JSTATE_CANCELED : |
fa73b229 | 85 | state = _cupsLangString(lang, _("canceled")); |
86 | break; | |
cb7f98ee | 87 | case IPP_JSTATE_ABORTED : |
fa73b229 | 88 | state = _cupsLangString(lang, _("aborted")); |
89 | break; | |
cb7f98ee | 90 | case IPP_JSTATE_COMPLETED : |
fa73b229 | 91 | state = _cupsLangString(lang, _("completed")); |
92 | break; | |
93 | default : | |
94 | state = _cupsLangString(lang, _("unknown")); | |
95 | break; | |
96 | } | |
97 | ||
98 | snprintf(buffer, sizeof(buffer), "%s %s-%d (%s) %s", | |
99 | prefix, | |
100 | printer_name->values[0].string.text, | |
101 | job_id->values[0].integer, | |
102 | job_name ? job_name->values[0].string.text : | |
103 | _cupsLangString(lang, _("untitled")), | |
104 | state); | |
105 | } | |
106 | else if (printer_uri && printer_name && printer_state) | |
107 | { | |
108 | /* | |
109 | * Printer event... | |
110 | */ | |
111 | ||
112 | prefix = _cupsLangString(lang, _("Printer:")); | |
113 | ||
114 | switch (printer_state->values[0].integer) | |
115 | { | |
cb7f98ee | 116 | case IPP_PSTATE_IDLE : |
fa73b229 | 117 | state = _cupsLangString(lang, _("idle")); |
118 | break; | |
cb7f98ee | 119 | case IPP_PSTATE_PROCESSING : |
fa73b229 | 120 | state = _cupsLangString(lang, _("processing")); |
121 | break; | |
cb7f98ee | 122 | case IPP_PSTATE_STOPPED : |
fa73b229 | 123 | state = _cupsLangString(lang, _("stopped")); |
124 | break; | |
125 | default : | |
126 | state = _cupsLangString(lang, _("unknown")); | |
127 | break; | |
128 | } | |
129 | ||
130 | snprintf(buffer, sizeof(buffer), "%s %s %s", | |
131 | prefix, | |
132 | printer_name->values[0].string.text, | |
133 | state); | |
134 | } | |
135 | else if (subscribed) | |
136 | strlcpy(buffer, subscribed->values[0].string.text, sizeof(buffer)); | |
137 | else | |
138 | return (NULL); | |
139 | ||
140 | /* | |
141 | * Duplicate and return the subject string... | |
142 | */ | |
143 | ||
144 | return (strdup(buffer)); | |
145 | } | |
146 | ||
147 | ||
148 | /* | |
149 | * 'cupsNotifyText()' - Return the text for the given notification message. | |
150 | * | |
5a738aea | 151 | * The returned string must be freed by the caller using @code free@. |
fa73b229 | 152 | * |
8072030b | 153 | * @since CUPS 1.2/macOS 10.5@ |
fa73b229 | 154 | */ |
155 | ||
5a738aea | 156 | char * /* O - Message text or @code NULL@ */ |
fa73b229 | 157 | cupsNotifyText(cups_lang_t *lang, /* I - Language data */ |
158 | ipp_t *event) /* I - Event data */ | |
159 | { | |
160 | ipp_attribute_t *notify_text; /* notify-text */ | |
161 | ||
162 | ||
163 | /* | |
164 | * Range check input... | |
165 | */ | |
166 | ||
167 | if (!event || !lang) | |
168 | return (NULL); | |
169 | ||
170 | /* | |
171 | * Get the notify-text attribute from the server... | |
172 | */ | |
173 | ||
174 | if ((notify_text = ippFindAttribute(event, "notify-text", | |
175 | IPP_TAG_TEXT)) == NULL) | |
176 | return (NULL); | |
177 | ||
178 | /* | |
179 | * Return a copy... | |
180 | */ | |
181 | ||
182 | return (strdup(notify_text->values[0].string.text)); | |
183 | } |