Merge lp:~jonas-drange/ubuntu-settings-components/cups-notifications into lp:~phablet-team/ubuntu-settings-components/printer-components
- cups-notifications
- Merge into printer-components
Proposed by
Jonas G. Drange
Status: | Merged |
---|---|
Approved by: | Andrew Hayzen |
Approved revision: | 227 |
Merged at revision: | 225 |
Proposed branch: | lp:~jonas-drange/ubuntu-settings-components/cups-notifications |
Merge into: | lp:~phablet-team/ubuntu-settings-components/printer-components |
Diff against target: |
880 lines (+417/-79) 17 files modified
plugins/Ubuntu/Settings/Printers/CMakeLists.txt (+9/-1) plugins/Ubuntu/Settings/Printers/backend/backend.h (+25/-5) plugins/Ubuntu/Settings/Printers/backend/backend_cups.cpp (+46/-9) plugins/Ubuntu/Settings/Printers/backend/backend_cups.h (+8/-0) plugins/Ubuntu/Settings/Printers/cups/cupsfacade.cpp (+10/-0) plugins/Ubuntu/Settings/Printers/cups/cupsfacade.h (+2/-0) plugins/Ubuntu/Settings/Printers/cups/cupspkhelper.cpp (+61/-0) plugins/Ubuntu/Settings/Printers/cups/cupspkhelper.h (+2/-0) plugins/Ubuntu/Settings/Printers/models/printermodel.cpp (+21/-11) plugins/Ubuntu/Settings/Printers/models/printermodel.h (+5/-5) plugins/Ubuntu/Settings/Printers/org.cups.cupsd.Notifier.xml (+146/-0) plugins/Ubuntu/Settings/Printers/printers/printers.cpp (+7/-5) plugins/Ubuntu/Settings/Printers/printers/printers.h (+2/-4) tests/unittests/Printers/mockbackend.h (+35/-20) tests/unittests/Printers/tst_printerfilter.cpp (+8/-6) tests/unittests/Printers/tst_printermodel.cpp (+28/-11) tests/unittests/Printers/tst_printers.cpp (+2/-2) |
To merge this branch: | bzr merge lp:~jonas-drange/ubuntu-settings-components/cups-notifications |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Andrew Hayzen (community) | Approve | ||
Review via email: mp+316253@code.launchpad.net |
Commit message
* Deprecate QTimer based update()
* Replace with cups subscription based update()
* Fixes tests.
Description of the change
To post a comment you must log in.
Revision history for this message
Jonas G. Drange (jonas-drange) wrote : | # |
- 224. By Jonas G. Drange
-
implements fewer signals
- 225. By Jonas G. Drange
-
removes unused stuff
Revision history for this message
Andrew Hayzen (ahayzen) wrote : | # |
This looks good, can you do a pull of trunk. Then this can be approved. We can link the JobModel in a separate branch :-)
- 226. By Jonas G. Drange
-
merges trunk
- 227. By Jonas G. Drange
-
mock backend returns an empty job list for now
Revision history for this message
Andrew Hayzen (ahayzen) wrote : | # |
LGTM, and the tests pass now :-)
100% tests passed, 0 tests failed out of 7
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'plugins/Ubuntu/Settings/Printers/CMakeLists.txt' | |||
2 | --- plugins/Ubuntu/Settings/Printers/CMakeLists.txt 2017-02-02 16:00:55 +0000 | |||
3 | +++ plugins/Ubuntu/Settings/Printers/CMakeLists.txt 2017-02-03 12:26:13 +0000 | |||
4 | @@ -2,14 +2,21 @@ | |||
5 | 2 | 2 | ||
6 | 3 | add_definitions(-DUBUNTUSETTINGSPRINTERS_LIBRARY) | 3 | add_definitions(-DUBUNTUSETTINGSPRINTERS_LIBRARY) |
7 | 4 | 4 | ||
9 | 5 | include_directories(${CUPS_INCLUDE_DIR}) | 5 | include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CUPS_INCLUDE_DIR}) |
10 | 6 | 6 | ||
11 | 7 | find_package(Qt5Gui REQUIRED) | 7 | find_package(Qt5Gui REQUIRED) |
12 | 8 | find_package(Qt5PrintSupport REQUIRED) | 8 | find_package(Qt5PrintSupport REQUIRED) |
13 | 9 | find_package(Qt5Qml REQUIRED) | 9 | find_package(Qt5Qml REQUIRED) |
14 | 10 | find_package(Qt5DBus REQUIRED) | ||
15 | 10 | find_package(Qt5Concurrent REQUIRED) | 11 | find_package(Qt5Concurrent REQUIRED) |
16 | 11 | 12 | ||
17 | 13 | qt5_add_dbus_interface( | ||
18 | 14 | GEN_SOURCES | ||
19 | 15 | ${CMAKE_CURRENT_SOURCE_DIR}/org.cups.cupsd.Notifier.xml | ||
20 | 16 | cupsdnotifier) | ||
21 | 17 | |||
22 | 12 | add_library(UbuntuSettingsPrintersQml SHARED | 18 | add_library(UbuntuSettingsPrintersQml SHARED |
23 | 19 | ${GEN_SOURCES} | ||
24 | 13 | backend/backend.cpp | 20 | backend/backend.cpp |
25 | 14 | backend/backend_cups.cpp | 21 | backend/backend_cups.cpp |
26 | 15 | backend/backend_pdf.cpp | 22 | backend/backend_pdf.cpp |
27 | @@ -29,6 +36,7 @@ | |||
28 | 29 | ) | 36 | ) |
29 | 30 | 37 | ||
30 | 31 | target_link_libraries(UbuntuSettingsPrintersQml | 38 | target_link_libraries(UbuntuSettingsPrintersQml |
31 | 39 | Qt5::DBus | ||
32 | 32 | Qt5::Gui | 40 | Qt5::Gui |
33 | 33 | Qt5::PrintSupport | 41 | Qt5::PrintSupport |
34 | 34 | Qt5::Qml | 42 | Qt5::Qml |
35 | 35 | 43 | ||
36 | === modified file 'plugins/Ubuntu/Settings/Printers/backend/backend.h' | |||
37 | --- plugins/Ubuntu/Settings/Printers/backend/backend.h 2017-02-02 17:22:55 +0000 | |||
38 | +++ plugins/Ubuntu/Settings/Printers/backend/backend.h 2017-02-03 12:26:13 +0000 | |||
39 | @@ -149,14 +149,34 @@ | |||
40 | 149 | virtual void refresh(); | 149 | virtual void refresh(); |
41 | 150 | 150 | ||
42 | 151 | Q_SIGNALS: | 151 | Q_SIGNALS: |
43 | 152 | void printerAdded(const QString &name); | ||
44 | 153 | void printerModified(const QString &name, const bool ppdChanged); | ||
45 | 154 | void printerDeleted(const QString &name); | ||
46 | 155 | void printerStateChanged(const QString &name); | ||
47 | 156 | |||
48 | 157 | void printerDriversLoaded(const QList<PrinterDriver> &drivers); | 152 | void printerDriversLoaded(const QList<PrinterDriver> &drivers); |
49 | 158 | void printerDriversFailedToLoad(const QString &errorMessage); | 153 | void printerDriversFailedToLoad(const QString &errorMessage); |
50 | 159 | 154 | ||
51 | 155 | void printerAdded( | ||
52 | 156 | const QString &text, | ||
53 | 157 | const QString &printerUri, | ||
54 | 158 | const QString &printerName, | ||
55 | 159 | uint printerState, | ||
56 | 160 | const QString &printerStateReason, | ||
57 | 161 | bool acceptingJobs | ||
58 | 162 | ); | ||
59 | 163 | void printerDeleted( | ||
60 | 164 | const QString &text, | ||
61 | 165 | const QString &printerUri, | ||
62 | 166 | const QString &printerName, | ||
63 | 167 | uint printerState, | ||
64 | 168 | const QString &printerStateReason, | ||
65 | 169 | bool acceptingJobs | ||
66 | 170 | ); | ||
67 | 171 | void printerModified( | ||
68 | 172 | const QString &text, | ||
69 | 173 | const QString &printerUri, | ||
70 | 174 | const QString &printerName, | ||
71 | 175 | uint printerState, | ||
72 | 176 | const QString &printerStateReason, | ||
73 | 177 | bool acceptingJobs | ||
74 | 178 | ); | ||
75 | 179 | |||
76 | 160 | protected: | 180 | protected: |
77 | 161 | const QString m_printerName; | 181 | const QString m_printerName; |
78 | 162 | }; | 182 | }; |
79 | 163 | 183 | ||
80 | === modified file 'plugins/Ubuntu/Settings/Printers/backend/backend_cups.cpp' | |||
81 | --- plugins/Ubuntu/Settings/Printers/backend/backend_cups.cpp 2017-02-02 17:22:55 +0000 | |||
82 | +++ plugins/Ubuntu/Settings/Printers/backend/backend_cups.cpp 2017-02-03 12:26:13 +0000 | |||
83 | @@ -19,29 +19,56 @@ | |||
84 | 19 | #include "i18n.h" | 19 | #include "i18n.h" |
85 | 20 | #include "utils.h" | 20 | #include "utils.h" |
86 | 21 | 21 | ||
87 | 22 | #include <QDBusConnection> | ||
88 | 22 | 23 | ||
89 | 23 | PrinterCupsBackend::PrinterCupsBackend(QObject *parent) | 24 | PrinterCupsBackend::PrinterCupsBackend(QObject *parent) |
91 | 24 | : PrinterCupsBackend(new CupsFacade(), QPrinterInfo(), parent) | 25 | : PrinterCupsBackend(new CupsFacade(), QPrinterInfo(), |
92 | 26 | new OrgCupsCupsdNotifierInterface("", | ||
93 | 27 | CUPSD_NOTIFIER_DBUS_PATH, | ||
94 | 28 | QDBusConnection::systemBus()), | ||
95 | 29 | parent) | ||
96 | 25 | { | 30 | { |
98 | 26 | // If we create the CupsFacade, we're in charge of RAII. | 31 | // Use proper RAII of things we create: |
99 | 27 | m_cups->setParent(this); | 32 | m_cups->setParent(this); |
105 | 28 | 33 | m_notifier->setParent(this); | |
101 | 29 | connect(m_cups, SIGNAL(printerDriversLoaded(const QList<PrinterDriver>&)), | ||
102 | 30 | this, SIGNAL(printerDriversLoaded(const QList<PrinterDriver>&))); | ||
103 | 31 | connect(m_cups, SIGNAL(printerDriversFailedToLoad(const QString&)), | ||
104 | 32 | this, SIGNAL(printerDriversFailedToLoad(const QString&))); | ||
106 | 33 | } | 34 | } |
107 | 34 | 35 | ||
108 | 35 | PrinterCupsBackend::PrinterCupsBackend(CupsFacade *cups, QPrinterInfo info, | 36 | PrinterCupsBackend::PrinterCupsBackend(CupsFacade *cups, QPrinterInfo info, |
109 | 37 | OrgCupsCupsdNotifierInterface *notifier, | ||
110 | 36 | QObject *parent) | 38 | QObject *parent) |
111 | 37 | : PrinterBackend(info.printerName(), parent) | 39 | : PrinterBackend(info.printerName(), parent) |
112 | 38 | , m_cups(cups) | 40 | , m_cups(cups) |
113 | 39 | , m_info(info) | 41 | , m_info(info) |
114 | 42 | , m_notifier(notifier) | ||
115 | 40 | { | 43 | { |
116 | 44 | connect(m_cups, SIGNAL(printerDriversLoaded(const QList<PrinterDriver>&)), | ||
117 | 45 | this, SIGNAL(printerDriversLoaded(const QList<PrinterDriver>&))); | ||
118 | 46 | connect(m_cups, SIGNAL(printerDriversFailedToLoad(const QString&)), | ||
119 | 47 | this, SIGNAL(printerDriversFailedToLoad(const QString&))); | ||
120 | 48 | |||
121 | 49 | connect(m_notifier, SIGNAL(PrinterAdded(const QString&, const QString&, | ||
122 | 50 | const QString&, uint, | ||
123 | 51 | const QString&, bool)), | ||
124 | 52 | this, SIGNAL(printerAdded(const QString&, const QString&, | ||
125 | 53 | const QString&, uint, | ||
126 | 54 | const QString&, bool))); | ||
127 | 55 | connect(m_notifier, SIGNAL(PrinterDeleted(const QString&, const QString&, | ||
128 | 56 | const QString&, uint, | ||
129 | 57 | const QString&, bool)), | ||
130 | 58 | this, SIGNAL(printerDeleted(const QString&, const QString&, | ||
131 | 59 | const QString&, uint, | ||
132 | 60 | const QString&, bool))); | ||
133 | 61 | connect(m_notifier, SIGNAL(PrinterModified(const QString&, const QString&, | ||
134 | 62 | const QString&, uint, | ||
135 | 63 | const QString&, bool)), | ||
136 | 64 | this, SIGNAL(printerModified(const QString&, const QString&, | ||
137 | 65 | const QString&, uint, | ||
138 | 66 | const QString&, bool))); | ||
139 | 41 | } | 67 | } |
140 | 42 | 68 | ||
141 | 43 | PrinterCupsBackend::~PrinterCupsBackend() | 69 | PrinterCupsBackend::~PrinterCupsBackend() |
142 | 44 | { | 70 | { |
143 | 71 | cancelSubscription(); | ||
144 | 45 | } | 72 | } |
145 | 46 | 73 | ||
146 | 47 | QString PrinterCupsBackend::printerAdd(const QString &name, | 74 | QString PrinterCupsBackend::printerAdd(const QString &name, |
147 | @@ -316,14 +343,13 @@ | |||
148 | 316 | QPrinterInfo info = QPrinterInfo::printerInfo(name); | 343 | QPrinterInfo info = QPrinterInfo::printerInfo(name); |
149 | 317 | 344 | ||
150 | 318 | if (!info.isNull()) { | 345 | if (!info.isNull()) { |
152 | 319 | list.append(new Printer(new PrinterCupsBackend(m_cups, info))); | 346 | list.append(new Printer(new PrinterCupsBackend(m_cups, info, m_notifier))); |
153 | 320 | } else { | 347 | } else { |
154 | 321 | qWarning() << "Printer is null so skipping (" << name << ")"; | 348 | qWarning() << "Printer is null so skipping (" << name << ")"; |
155 | 322 | } | 349 | } |
156 | 323 | } | 350 | } |
157 | 324 | 351 | ||
158 | 325 | // Cups allows a faux PDF printer. | 352 | // Cups allows a faux PDF printer. |
159 | 326 | // TODO: Translate. | ||
160 | 327 | list.append(new Printer(new PrinterPdfBackend(__("Create PDF")))); | 353 | list.append(new Printer(new PrinterPdfBackend(__("Create PDF")))); |
161 | 328 | 354 | ||
162 | 329 | return list; | 355 | return list; |
163 | @@ -362,3 +388,14 @@ | |||
164 | 362 | m_info = QPrinterInfo::printerInfo(m_printerName); | 388 | m_info = QPrinterInfo::printerInfo(m_printerName); |
165 | 363 | } | 389 | } |
166 | 364 | } | 390 | } |
167 | 391 | |||
168 | 392 | void PrinterCupsBackend::createSubscription() | ||
169 | 393 | { | ||
170 | 394 | m_cupsSubscriptionId = m_cups->createSubscription(); | ||
171 | 395 | } | ||
172 | 396 | |||
173 | 397 | void PrinterCupsBackend::cancelSubscription() | ||
174 | 398 | { | ||
175 | 399 | if (m_cupsSubscriptionId > 0) | ||
176 | 400 | m_cups->cancelSubscription(m_cupsSubscriptionId); | ||
177 | 401 | } | ||
178 | 365 | 402 | ||
179 | === modified file 'plugins/Ubuntu/Settings/Printers/backend/backend_cups.h' | |||
180 | --- plugins/Ubuntu/Settings/Printers/backend/backend_cups.h 2017-02-02 17:22:55 +0000 | |||
181 | +++ plugins/Ubuntu/Settings/Printers/backend/backend_cups.h 2017-02-03 12:26:13 +0000 | |||
182 | @@ -19,14 +19,18 @@ | |||
183 | 19 | 19 | ||
184 | 20 | #include "backend/backend.h" | 20 | #include "backend/backend.h" |
185 | 21 | #include "cups/cupsfacade.h" | 21 | #include "cups/cupsfacade.h" |
186 | 22 | #include "cupsdnotifier.h" // Note: this file was generated. | ||
187 | 22 | 23 | ||
188 | 23 | #include <QPrinterInfo> | 24 | #include <QPrinterInfo> |
189 | 24 | 25 | ||
190 | 26 | #define CUPSD_NOTIFIER_DBUS_PATH "/org/cups/cupsd/Notifier" | ||
191 | 27 | |||
192 | 25 | class PRINTERS_DECL_EXPORT PrinterCupsBackend : public PrinterBackend | 28 | class PRINTERS_DECL_EXPORT PrinterCupsBackend : public PrinterBackend |
193 | 26 | { | 29 | { |
194 | 27 | public: | 30 | public: |
195 | 28 | explicit PrinterCupsBackend(QObject *parent = Q_NULLPTR); | 31 | explicit PrinterCupsBackend(QObject *parent = Q_NULLPTR); |
196 | 29 | explicit PrinterCupsBackend(CupsFacade *cups, QPrinterInfo info, | 32 | explicit PrinterCupsBackend(CupsFacade *cups, QPrinterInfo info, |
197 | 33 | OrgCupsCupsdNotifierInterface* notifier, | ||
198 | 30 | QObject *parent = Q_NULLPTR); | 34 | QObject *parent = Q_NULLPTR); |
199 | 31 | virtual ~PrinterCupsBackend() override; | 35 | virtual ~PrinterCupsBackend() override; |
200 | 32 | 36 | ||
201 | @@ -125,10 +129,14 @@ | |||
202 | 125 | 129 | ||
203 | 126 | public Q_SLOTS: | 130 | public Q_SLOTS: |
204 | 127 | virtual void refresh() override; | 131 | virtual void refresh() override; |
205 | 132 | void createSubscription(); | ||
206 | 128 | 133 | ||
207 | 129 | private: | 134 | private: |
208 | 135 | void cancelSubscription(); | ||
209 | 130 | CupsFacade *m_cups; | 136 | CupsFacade *m_cups; |
210 | 131 | QPrinterInfo m_info; | 137 | QPrinterInfo m_info; |
211 | 138 | OrgCupsCupsdNotifierInterface *m_notifier; | ||
212 | 139 | int m_cupsSubscriptionId = -1; | ||
213 | 132 | }; | 140 | }; |
214 | 133 | 141 | ||
215 | 134 | #endif // USC_PRINTERS_CUPS_BACKEND_H | 142 | #endif // USC_PRINTERS_CUPS_BACKEND_H |
216 | 135 | 143 | ||
217 | === modified file 'plugins/Ubuntu/Settings/Printers/cups/cupsfacade.cpp' | |||
218 | --- plugins/Ubuntu/Settings/Printers/cups/cupsfacade.cpp 2017-02-02 16:00:55 +0000 | |||
219 | +++ plugins/Ubuntu/Settings/Printers/cups/cupsfacade.cpp 2017-02-03 12:26:13 +0000 | |||
220 | @@ -433,6 +433,16 @@ | |||
221 | 433 | Q_EMIT requestPrinterDriverCancel(); | 433 | Q_EMIT requestPrinterDriverCancel(); |
222 | 434 | } | 434 | } |
223 | 435 | 435 | ||
224 | 436 | int CupsFacade::createSubscription() | ||
225 | 437 | { | ||
226 | 438 | return helper.createSubscription(); | ||
227 | 439 | } | ||
228 | 440 | |||
229 | 441 | void CupsFacade::cancelSubscription(const int &subscriptionId) | ||
230 | 442 | { | ||
231 | 443 | helper.cancelSubscription(subscriptionId); | ||
232 | 444 | } | ||
233 | 445 | |||
234 | 436 | PrinterDriverLoader::PrinterDriverLoader( | 446 | PrinterDriverLoader::PrinterDriverLoader( |
235 | 437 | const QString &deviceId, const QString &language, | 447 | const QString &deviceId, const QString &language, |
236 | 438 | const QString &makeModel, const QString &product, | 448 | const QString &makeModel, const QString &product, |
237 | 439 | 449 | ||
238 | === modified file 'plugins/Ubuntu/Settings/Printers/cups/cupsfacade.h' | |||
239 | --- plugins/Ubuntu/Settings/Printers/cups/cupsfacade.h 2017-02-02 16:00:55 +0000 | |||
240 | +++ plugins/Ubuntu/Settings/Printers/cups/cupsfacade.h 2017-02-03 12:26:13 +0000 | |||
241 | @@ -92,6 +92,8 @@ | |||
242 | 92 | QList<cups_job_t *> printerGetJobs(const QString &name); | 92 | QList<cups_job_t *> printerGetJobs(const QString &name); |
243 | 93 | int printFileToDest(const QString &filepath, const QString &title, | 93 | int printFileToDest(const QString &filepath, const QString &title, |
244 | 94 | const cups_dest_t *dest); | 94 | const cups_dest_t *dest); |
245 | 95 | int createSubscription(); | ||
246 | 96 | void cancelSubscription(const int &subscriptionId); | ||
247 | 95 | 97 | ||
248 | 96 | public Q_SLOTS: | 98 | public Q_SLOTS: |
249 | 97 | void requestPrinterDrivers( | 99 | void requestPrinterDrivers( |
250 | 98 | 100 | ||
251 | === modified file 'plugins/Ubuntu/Settings/Printers/cups/cupspkhelper.cpp' | |||
252 | --- plugins/Ubuntu/Settings/Printers/cups/cupspkhelper.cpp 2017-01-30 11:37:07 +0000 | |||
253 | +++ plugins/Ubuntu/Settings/Printers/cups/cupspkhelper.cpp 2017-02-03 12:26:13 +0000 | |||
254 | @@ -735,3 +735,64 @@ | |||
255 | 735 | return cupsDoRequest(m_connection, request, | 735 | return cupsDoRequest(m_connection, request, |
256 | 736 | resourceChar.toUtf8()); | 736 | resourceChar.toUtf8()); |
257 | 737 | } | 737 | } |
258 | 738 | |||
259 | 739 | int CupsPkHelper::createSubscription() | ||
260 | 740 | { | ||
261 | 741 | ipp_t *req; | ||
262 | 742 | ipp_t *resp; | ||
263 | 743 | ipp_attribute_t *attr; | ||
264 | 744 | int subscriptionId = -1; | ||
265 | 745 | |||
266 | 746 | req = ippNewRequest(IPP_CREATE_PRINTER_SUBSCRIPTION); | ||
267 | 747 | ippAddString(req, IPP_TAG_OPERATION, IPP_TAG_URI, | ||
268 | 748 | "printer-uri", NULL, "/"); | ||
269 | 749 | ippAddString(req, IPP_TAG_SUBSCRIPTION, IPP_TAG_KEYWORD, | ||
270 | 750 | "notify-events", NULL, "all"); | ||
271 | 751 | ippAddString(req, IPP_TAG_SUBSCRIPTION, IPP_TAG_URI, | ||
272 | 752 | "notify-recipient-uri", NULL, "dbus://"); | ||
273 | 753 | ippAddInteger(req, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, | ||
274 | 754 | "notify-lease-duration", 0); | ||
275 | 755 | |||
276 | 756 | resp = cupsDoRequest(m_connection, req, | ||
277 | 757 | getResource(CphResourceRoot).toUtf8()); | ||
278 | 758 | if (!isReplyOk(resp, true)) { | ||
279 | 759 | return subscriptionId; | ||
280 | 760 | } | ||
281 | 761 | |||
282 | 762 | attr = ippFindAttribute(resp, "notify-subscription-id", IPP_TAG_INTEGER); | ||
283 | 763 | |||
284 | 764 | if (!attr) { | ||
285 | 765 | qWarning() << "ipp-create-printer-subscription response doesn't" | ||
286 | 766 | " contain subscription id."; | ||
287 | 767 | } else { | ||
288 | 768 | subscriptionId = ippGetInteger(attr, 0); | ||
289 | 769 | } | ||
290 | 770 | |||
291 | 771 | ippDelete (resp); | ||
292 | 772 | |||
293 | 773 | return subscriptionId; | ||
294 | 774 | } | ||
295 | 775 | |||
296 | 776 | void CupsPkHelper::cancelSubscription(const int &subscriptionId) | ||
297 | 777 | { | ||
298 | 778 | ipp_t *req; | ||
299 | 779 | ipp_t *resp; | ||
300 | 780 | |||
301 | 781 | if (subscriptionId <= 0) { | ||
302 | 782 | return; | ||
303 | 783 | } | ||
304 | 784 | |||
305 | 785 | req = ippNewRequest(IPP_CANCEL_SUBSCRIPTION); | ||
306 | 786 | ippAddString(req, IPP_TAG_OPERATION, IPP_TAG_URI, | ||
307 | 787 | "printer-uri", NULL, "/"); | ||
308 | 788 | ippAddInteger(req, IPP_TAG_OPERATION, IPP_TAG_INTEGER, | ||
309 | 789 | "notify-subscription-id", subscriptionId); | ||
310 | 790 | |||
311 | 791 | resp = cupsDoRequest(m_connection, req, | ||
312 | 792 | getResource(CphResourceRoot).toUtf8()); | ||
313 | 793 | if (!isReplyOk(resp, true)) { | ||
314 | 794 | return; | ||
315 | 795 | } | ||
316 | 796 | |||
317 | 797 | ippDelete(resp); | ||
318 | 798 | } | ||
319 | 738 | 799 | ||
320 | === modified file 'plugins/Ubuntu/Settings/Printers/cups/cupspkhelper.h' | |||
321 | --- plugins/Ubuntu/Settings/Printers/cups/cupspkhelper.h 2017-01-26 16:14:55 +0000 | |||
322 | +++ plugins/Ubuntu/Settings/Printers/cups/cupspkhelper.h 2017-02-03 12:26:13 +0000 | |||
323 | @@ -73,6 +73,8 @@ | |||
324 | 73 | const QStringList &includeSchemes = QStringList(), | 73 | const QStringList &includeSchemes = QStringList(), |
325 | 74 | const QStringList &excludeSchemes = QStringList() | 74 | const QStringList &excludeSchemes = QStringList() |
326 | 75 | ); | 75 | ); |
327 | 76 | int createSubscription(); | ||
328 | 77 | void cancelSubscription(const int &subscriptionId); | ||
329 | 76 | 78 | ||
330 | 77 | private: | 79 | private: |
331 | 78 | enum CphResource | 80 | enum CphResource |
332 | 79 | 81 | ||
333 | === modified file 'plugins/Ubuntu/Settings/Printers/models/printermodel.cpp' | |||
334 | --- plugins/Ubuntu/Settings/Printers/models/printermodel.cpp 2017-02-02 16:00:55 +0000 | |||
335 | +++ plugins/Ubuntu/Settings/Printers/models/printermodel.cpp 2017-02-03 12:26:13 +0000 | |||
336 | @@ -24,31 +24,41 @@ | |||
337 | 24 | #include <QDebug> | 24 | #include <QDebug> |
338 | 25 | #include <QQmlEngine> | 25 | #include <QQmlEngine> |
339 | 26 | 26 | ||
342 | 27 | PrinterModel::PrinterModel(const int updateIntervalMSecs, QObject *parent) | 27 | PrinterModel::PrinterModel(QObject *parent) |
343 | 28 | : PrinterModel(new PrinterCupsBackend, updateIntervalMSecs, parent) | 28 | : PrinterModel(new PrinterCupsBackend, parent) |
344 | 29 | { | 29 | { |
345 | 30 | } | 30 | } |
346 | 31 | 31 | ||
350 | 32 | PrinterModel::PrinterModel(PrinterBackend *backend, | 32 | PrinterModel::PrinterModel(PrinterBackend *backend, QObject *parent) |
348 | 33 | const int updateIntervalMSecs, | ||
349 | 34 | QObject *parent) | ||
351 | 35 | : QAbstractListModel(parent) | 33 | : QAbstractListModel(parent) |
352 | 36 | , m_backend(backend) | 34 | , m_backend(backend) |
353 | 37 | { | 35 | { |
354 | 38 | update(); | 36 | update(); |
356 | 39 | startUpdateTimer(updateIntervalMSecs); | 37 | |
357 | 38 | QObject::connect(m_backend, &PrinterBackend::printerAdded, | ||
358 | 39 | this, &PrinterModel::printerSignalCatchall); | ||
359 | 40 | QObject::connect(m_backend, &PrinterBackend::printerModified, | ||
360 | 41 | this, &PrinterModel::printerSignalCatchall); | ||
361 | 42 | QObject::connect(m_backend, &PrinterBackend::printerDeleted, | ||
362 | 43 | this, &PrinterModel::printerSignalCatchall); | ||
363 | 40 | } | 44 | } |
364 | 41 | 45 | ||
365 | 42 | PrinterModel::~PrinterModel() | 46 | PrinterModel::~PrinterModel() |
366 | 43 | { | 47 | { |
367 | 44 | } | 48 | } |
368 | 45 | 49 | ||
370 | 46 | void PrinterModel::startUpdateTimer(const int &msecs) | 50 | void PrinterModel::printerSignalCatchall( |
371 | 51 | const QString &text, const QString &printerUri, | ||
372 | 52 | const QString &printerName, uint printerState, | ||
373 | 53 | const QString &printerStateReason, bool acceptingJobs) | ||
374 | 47 | { | 54 | { |
379 | 48 | // Start a timer to poll for changes in the printers | 55 | Q_UNUSED(text); |
380 | 49 | m_update_timer.setParent(this); | 56 | Q_UNUSED(printerUri); |
381 | 50 | connect(&m_update_timer, SIGNAL(timeout()), this, SLOT(update())); | 57 | Q_UNUSED(printerName); |
382 | 51 | m_update_timer.start(msecs); | 58 | Q_UNUSED(printerState); |
383 | 59 | Q_UNUSED(printerStateReason); | ||
384 | 60 | Q_UNUSED(acceptingJobs); | ||
385 | 61 | update(); | ||
386 | 52 | } | 62 | } |
387 | 53 | 63 | ||
388 | 54 | void PrinterModel::update() | 64 | void PrinterModel::update() |
389 | 55 | 65 | ||
390 | === modified file 'plugins/Ubuntu/Settings/Printers/models/printermodel.h' | |||
391 | --- plugins/Ubuntu/Settings/Printers/models/printermodel.h 2017-02-02 16:00:55 +0000 | |||
392 | +++ plugins/Ubuntu/Settings/Printers/models/printermodel.h 2017-02-03 12:26:13 +0000 | |||
393 | @@ -35,9 +35,8 @@ | |||
394 | 35 | Q_OBJECT | 35 | Q_OBJECT |
395 | 36 | Q_PROPERTY(int count READ count NOTIFY countChanged) | 36 | Q_PROPERTY(int count READ count NOTIFY countChanged) |
396 | 37 | public: | 37 | public: |
400 | 38 | explicit PrinterModel(const int updateIntervalMSecs=5000, QObject *parent = Q_NULLPTR); | 38 | explicit PrinterModel(QObject *parent = Q_NULLPTR); |
401 | 39 | explicit PrinterModel(PrinterBackend *backend, const int updateIntervalMSecs=5000, | 39 | explicit PrinterModel(PrinterBackend *backend, QObject *parent = Q_NULLPTR); |
399 | 40 | QObject *parent = Q_NULLPTR); | ||
402 | 41 | ~PrinterModel(); | 40 | ~PrinterModel(); |
403 | 42 | 41 | ||
404 | 43 | enum Roles | 42 | enum Roles |
405 | @@ -80,7 +79,6 @@ | |||
406 | 80 | 79 | ||
407 | 81 | Q_INVOKABLE QVariantMap get(const int row) const; | 80 | Q_INVOKABLE QVariantMap get(const int row) const; |
408 | 82 | private: | 81 | private: |
409 | 83 | QTimer m_update_timer; | ||
410 | 84 | PrinterBackend *m_backend; | 82 | PrinterBackend *m_backend; |
411 | 85 | 83 | ||
412 | 86 | /* FIXME: there's currently no need to share the Printer obj with QML, so | 84 | /* FIXME: there's currently no need to share the Printer obj with QML, so |
413 | @@ -89,8 +87,10 @@ | |||
414 | 89 | QMap<QString, JobModel *> m_job_models; | 87 | QMap<QString, JobModel *> m_job_models; |
415 | 90 | 88 | ||
416 | 91 | private Q_SLOTS: | 89 | private Q_SLOTS: |
417 | 92 | void startUpdateTimer(const int &msecs); | ||
418 | 93 | void update(); | 90 | void update(); |
419 | 91 | void printerSignalCatchall(const QString &text, const QString &printerUri, | ||
420 | 92 | const QString &printerName, uint printerState, | ||
421 | 93 | const QString &printerStateReason, bool acceptingJobs); | ||
422 | 94 | 94 | ||
423 | 95 | Q_SIGNALS: | 95 | Q_SIGNALS: |
424 | 96 | void countChanged(); | 96 | void countChanged(); |
425 | 97 | 97 | ||
426 | === added file 'plugins/Ubuntu/Settings/Printers/org.cups.cupsd.Notifier.xml' | |||
427 | --- plugins/Ubuntu/Settings/Printers/org.cups.cupsd.Notifier.xml 1970-01-01 00:00:00 +0000 | |||
428 | +++ plugins/Ubuntu/Settings/Printers/org.cups.cupsd.Notifier.xml 2017-02-03 12:26:13 +0000 | |||
429 | @@ -0,0 +1,146 @@ | |||
430 | 1 | <node> | ||
431 | 2 | |||
432 | 3 | <interface name="org.cups.cupsd.Notifier"> | ||
433 | 4 | |||
434 | 5 | <signal name="ServerStarted"> | ||
435 | 6 | <arg type="s" name="text" /> | ||
436 | 7 | </signal> | ||
437 | 8 | |||
438 | 9 | <signal name="ServerRestarted"> | ||
439 | 10 | <arg type="s" name="text" /> | ||
440 | 11 | </signal> | ||
441 | 12 | |||
442 | 13 | <signal name="ServerStopped"> | ||
443 | 14 | <arg type="s" name="text" /> | ||
444 | 15 | </signal> | ||
445 | 16 | |||
446 | 17 | <signal name="ServerAudit"> | ||
447 | 18 | <arg type="s" name="text" /> | ||
448 | 19 | </signal> | ||
449 | 20 | |||
450 | 21 | <signal name="PrinterAdded"> | ||
451 | 22 | <arg type="s" name="text" /> | ||
452 | 23 | <arg type="s" name="printer_uri" /> | ||
453 | 24 | <arg type="s" name="printer_name" /> | ||
454 | 25 | <arg type="u" name="printer_state" /> | ||
455 | 26 | <arg type="s" name="printer_state_reasons" /> | ||
456 | 27 | <arg type="b" name="printer_is_accepting_jobs" /> | ||
457 | 28 | </signal> | ||
458 | 29 | |||
459 | 30 | <signal name="PrinterDeleted"> | ||
460 | 31 | <arg type="s" name="text" /> | ||
461 | 32 | <arg type="s" name="printer_uri" /> | ||
462 | 33 | <arg type="s" name="printer_name" /> | ||
463 | 34 | <arg type="u" name="printer_state" /> | ||
464 | 35 | <arg type="s" name="printer_state_reasons" /> | ||
465 | 36 | <arg type="b" name="printer_is_accepting_jobs" /> | ||
466 | 37 | </signal> | ||
467 | 38 | |||
468 | 39 | <signal name="PrinterModified"> | ||
469 | 40 | <arg type="s" name="text" /> | ||
470 | 41 | <arg type="s" name="printer_uri" /> | ||
471 | 42 | <arg type="s" name="printer_name" /> | ||
472 | 43 | <arg type="u" name="printer_state" /> | ||
473 | 44 | <arg type="s" name="printer_state_reasons" /> | ||
474 | 45 | <arg type="b" name="printer_is_accepting_jobs" /> | ||
475 | 46 | </signal> | ||
476 | 47 | |||
477 | 48 | <signal name="PrinterRestarted"> | ||
478 | 49 | <arg type="s" name="text" /> | ||
479 | 50 | <arg type="s" name="printer_uri" /> | ||
480 | 51 | <arg type="s" name="printer_name" /> | ||
481 | 52 | <arg type="u" name="printer_state" /> | ||
482 | 53 | <arg type="s" name="printer_state_reasons" /> | ||
483 | 54 | <arg type="b" name="printer_is_accepting_jobs" /> | ||
484 | 55 | </signal> | ||
485 | 56 | |||
486 | 57 | <signal name="PrinterStopped"> | ||
487 | 58 | <arg type="s" name="text" /> | ||
488 | 59 | <arg type="s" name="printer_uri" /> | ||
489 | 60 | <arg type="s" name="printer_name" /> | ||
490 | 61 | <arg type="u" name="printer_state" /> | ||
491 | 62 | <arg type="s" name="printer_state_reasons" /> | ||
492 | 63 | <arg type="b" name="printer_is_accepting_jobs" /> | ||
493 | 64 | </signal> | ||
494 | 65 | |||
495 | 66 | <signal name="PrinterShutdown"> | ||
496 | 67 | <arg type="s" name="text" /> | ||
497 | 68 | <arg type="s" name="printer_uri" /> | ||
498 | 69 | <arg type="s" name="printer_name" /> | ||
499 | 70 | <arg type="u" name="printer_state" /> | ||
500 | 71 | <arg type="s" name="printer_state_reasons" /> | ||
501 | 72 | <arg type="b" name="printer_is_accepting_jobs" /> | ||
502 | 73 | </signal> | ||
503 | 74 | |||
504 | 75 | <signal name="PrinterStateChanged"> | ||
505 | 76 | <arg type="s" name="text" /> | ||
506 | 77 | <arg type="s" name="printer_uri" /> | ||
507 | 78 | <arg type="s" name="printer_name" /> | ||
508 | 79 | <arg type="u" name="printer_state" /> | ||
509 | 80 | <arg type="s" name="printer_state_reasons" /> | ||
510 | 81 | <arg type="b" name="printer_is_accepting_jobs" /> | ||
511 | 82 | </signal> | ||
512 | 83 | |||
513 | 84 | <signal name="PrinterFinishingsChanged"> | ||
514 | 85 | <arg type="s" name="text" /> | ||
515 | 86 | <arg type="s" name="printer_uri" /> | ||
516 | 87 | <arg type="s" name="printer_name" /> | ||
517 | 88 | <arg type="u" name="printer_state" /> | ||
518 | 89 | <arg type="s" name="printer_state_reasons" /> | ||
519 | 90 | <arg type="b" name="printer_is_accepting_jobs" /> | ||
520 | 91 | </signal> | ||
521 | 92 | |||
522 | 93 | <signal name="PrinterMediaChanged"> | ||
523 | 94 | <arg type="s" name="text" /> | ||
524 | 95 | <arg type="s" name="printer_uri" /> | ||
525 | 96 | <arg type="s" name="printer_name" /> | ||
526 | 97 | <arg type="u" name="printer_state" /> | ||
527 | 98 | <arg type="s" name="printer_state_reasons" /> | ||
528 | 99 | <arg type="b" name="printer_is_accepting_jobs" /> | ||
529 | 100 | </signal> | ||
530 | 101 | |||
531 | 102 | <signal name="JobCreated"> | ||
532 | 103 | <arg type="s" name="text" /> | ||
533 | 104 | <arg type="s" name="printer_uri" /> | ||
534 | 105 | <arg type="s" name="printer_name" /> | ||
535 | 106 | <arg type="u" name="printer_state" /> | ||
536 | 107 | <arg type="s" name="printer_state_reasons" /> | ||
537 | 108 | <arg type="b" name="printer_is_accepting_jobs" /> | ||
538 | 109 | <arg type="u" name="job_id" /> | ||
539 | 110 | <arg type="u" name="job_state" /> | ||
540 | 111 | <arg type="s" name="job_state_reasons" /> | ||
541 | 112 | <arg type="s" name="job_name" /> | ||
542 | 113 | <arg type="u" name="job_impressions_completed" /> | ||
543 | 114 | </signal> | ||
544 | 115 | |||
545 | 116 | <signal name="JobCompleted"> | ||
546 | 117 | <arg type="s" name="text" /> | ||
547 | 118 | <arg type="s" name="printer_uri" /> | ||
548 | 119 | <arg type="s" name="printer_name" /> | ||
549 | 120 | <arg type="u" name="printer_state" /> | ||
550 | 121 | <arg type="s" name="printer_state_reasons" /> | ||
551 | 122 | <arg type="b" name="printer_is_accepting_jobs" /> | ||
552 | 123 | <arg type="u" name="job_id" /> | ||
553 | 124 | <arg type="u" name="job_state" /> | ||
554 | 125 | <arg type="s" name="job_state_reasons" /> | ||
555 | 126 | <arg type="s" name="job_name" /> | ||
556 | 127 | <arg type="u" name="job_impressions_completed" /> | ||
557 | 128 | </signal> | ||
558 | 129 | |||
559 | 130 | <signal name="JobState"> | ||
560 | 131 | <arg type="s" name="text" /> | ||
561 | 132 | <arg type="s" name="printer_uri" /> | ||
562 | 133 | <arg type="s" name="printer_name" /> | ||
563 | 134 | <arg type="u" name="printer_state" /> | ||
564 | 135 | <arg type="s" name="printer_state_reasons" /> | ||
565 | 136 | <arg type="b" name="printer_is_accepting_jobs" /> | ||
566 | 137 | <arg type="u" name="job_id" /> | ||
567 | 138 | <arg type="u" name="job_state" /> | ||
568 | 139 | <arg type="s" name="job_state_reasons" /> | ||
569 | 140 | <arg type="s" name="job_name" /> | ||
570 | 141 | <arg type="u" name="job_impressions_completed" /> | ||
571 | 142 | </signal> | ||
572 | 143 | |||
573 | 144 | </interface> | ||
574 | 145 | |||
575 | 146 | </node> | ||
576 | 0 | 147 | ||
577 | === modified file 'plugins/Ubuntu/Settings/Printers/printers/printers.cpp' | |||
578 | --- plugins/Ubuntu/Settings/Printers/printers/printers.cpp 2017-02-01 14:56:58 +0000 | |||
579 | +++ plugins/Ubuntu/Settings/Printers/printers/printers.cpp 2017-02-03 12:26:13 +0000 | |||
580 | @@ -19,17 +19,15 @@ | |||
581 | 19 | 19 | ||
582 | 20 | #include <QQmlEngine> | 20 | #include <QQmlEngine> |
583 | 21 | 21 | ||
586 | 22 | Printers::Printers(int printerUpdateIntervalMSecs, QObject *parent) | 22 | Printers::Printers(QObject *parent) : Printers(new PrinterCupsBackend, parent) |
585 | 23 | : Printers(new PrinterCupsBackend, printerUpdateIntervalMSecs, parent) | ||
587 | 24 | { | 23 | { |
588 | 25 | } | 24 | } |
589 | 26 | 25 | ||
592 | 27 | Printers::Printers(PrinterBackend *backend, int printerUpdateIntervalMSecs, | 26 | Printers::Printers(PrinterBackend *backend, QObject *parent) |
591 | 28 | QObject *parent) | ||
593 | 29 | : QObject(parent) | 27 | : QObject(parent) |
594 | 30 | , m_backend(backend) | 28 | , m_backend(backend) |
595 | 31 | , m_drivers(backend) | 29 | , m_drivers(backend) |
597 | 32 | , m_model(backend, printerUpdateIntervalMSecs) | 30 | , m_model(backend) |
598 | 33 | { | 31 | { |
599 | 34 | m_allPrinters.setSourceModel(&m_model); | 32 | m_allPrinters.setSourceModel(&m_model); |
600 | 35 | m_allPrinters.setSortRole(PrinterModel::Roles::DefaultPrinterRole); | 33 | m_allPrinters.setSortRole(PrinterModel::Roles::DefaultPrinterRole); |
601 | @@ -45,6 +43,10 @@ | |||
602 | 45 | 43 | ||
603 | 46 | connect(&m_drivers, SIGNAL(filterComplete()), | 44 | connect(&m_drivers, SIGNAL(filterComplete()), |
604 | 47 | this, SIGNAL(driverFilterChanged())); | 45 | this, SIGNAL(driverFilterChanged())); |
605 | 46 | |||
606 | 47 | if (m_backend->backendType() == PrinterBackend::BackendType::CupsType) { | ||
607 | 48 | ((PrinterCupsBackend*) m_backend)->createSubscription(); | ||
608 | 49 | } | ||
609 | 48 | } | 50 | } |
610 | 49 | 51 | ||
611 | 50 | Printers::~Printers() | 52 | Printers::~Printers() |
612 | 51 | 53 | ||
613 | === modified file 'plugins/Ubuntu/Settings/Printers/printers/printers.h' | |||
614 | --- plugins/Ubuntu/Settings/Printers/printers/printers.h 2017-02-01 14:56:58 +0000 | |||
615 | +++ plugins/Ubuntu/Settings/Printers/printers/printers.h 2017-02-03 12:26:13 +0000 | |||
616 | @@ -43,12 +43,10 @@ | |||
617 | 43 | Q_PROPERTY(QString lastMessage READ lastMessage CONSTANT) | 43 | Q_PROPERTY(QString lastMessage READ lastMessage CONSTANT) |
618 | 44 | 44 | ||
619 | 45 | public: | 45 | public: |
621 | 46 | explicit Printers(int printerUpdateIntervalMSecs = 5000, QObject *parent = nullptr); | 46 | explicit Printers(QObject *parent = Q_NULLPTR); |
622 | 47 | 47 | ||
623 | 48 | // Note: Printers takes ownership of backend. | 48 | // Note: Printers takes ownership of backend. |
627 | 49 | explicit Printers(PrinterBackend *backend, | 49 | explicit Printers(PrinterBackend *backend, QObject *parent = Q_NULLPTR); |
625 | 50 | int printerUpdateIntervalMSecs = 5000, | ||
626 | 51 | QObject *parent = nullptr); | ||
628 | 52 | ~Printers(); | 50 | ~Printers(); |
629 | 53 | 51 | ||
630 | 54 | QAbstractItemModel* allPrinters(); | 52 | QAbstractItemModel* allPrinters(); |
631 | 55 | 53 | ||
632 | === modified file 'tests/unittests/Printers/mockbackend.h' | |||
633 | --- tests/unittests/Printers/mockbackend.h 2017-02-02 17:22:55 +0000 | |||
634 | +++ tests/unittests/Printers/mockbackend.h 2017-02-03 12:26:13 +0000 | |||
635 | @@ -224,10 +224,9 @@ | |||
636 | 224 | 224 | ||
637 | 225 | virtual QList<QSharedPointer<PrinterJob>> printerGetJobs(const QString &name) override | 225 | virtual QList<QSharedPointer<PrinterJob>> printerGetJobs(const QString &name) override |
638 | 226 | { | 226 | { |
640 | 227 | 227 | return QList<QSharedPointer<PrinterJob>>(); | |
641 | 228 | } | 228 | } |
642 | 229 | 229 | ||
643 | 230 | |||
644 | 231 | virtual QString printerName() const override | 230 | virtual QString printerName() const override |
645 | 232 | { | 231 | { |
646 | 233 | return m_printerName; | 232 | return m_printerName; |
647 | @@ -329,24 +328,40 @@ | |||
648 | 329 | } | 328 | } |
649 | 330 | 329 | ||
650 | 331 | 330 | ||
669 | 332 | void mockPrinterAdded(const QString &name) | 331 | void mockPrinterAdded( |
670 | 333 | { | 332 | const QString &text, |
671 | 334 | Q_EMIT printerAdded(name); | 333 | const QString &printerUri, |
672 | 335 | } | 334 | const QString &printerName, |
673 | 336 | 335 | uint printerState, | |
674 | 337 | void mockPrinterModified(const QString &name, const bool ppdChanged) | 336 | const QString &printerStateReason, |
675 | 338 | { | 337 | bool acceptingJobs |
676 | 339 | Q_EMIT printerModified(name, ppdChanged); | 338 | ) |
677 | 340 | } | 339 | { |
678 | 341 | 340 | Q_EMIT printerAdded(text, printerUri, printerName, printerState, printerStateReason, acceptingJobs); | |
679 | 342 | void mockPrinterDeleted(const QString &name) | 341 | } |
680 | 343 | { | 342 | |
681 | 344 | Q_EMIT printerDeleted(name); | 343 | void mockPrinterModified( |
682 | 345 | } | 344 | const QString &text, |
683 | 346 | 345 | const QString &printerUri, | |
684 | 347 | void mockPrinterStateChanged(const QString &name) | 346 | const QString &printerName, |
685 | 348 | { | 347 | uint printerState, |
686 | 349 | Q_EMIT printerStateChanged(name); | 348 | const QString &printerStateReason, |
687 | 349 | bool acceptingJobs | ||
688 | 350 | ) | ||
689 | 351 | { | ||
690 | 352 | Q_EMIT printerModified(text, printerUri, printerName, printerState, printerStateReason, acceptingJobs); | ||
691 | 353 | } | ||
692 | 354 | |||
693 | 355 | void mockPrinterDeleted( | ||
694 | 356 | const QString &text, | ||
695 | 357 | const QString &printerUri, | ||
696 | 358 | const QString &printerName, | ||
697 | 359 | uint printerState, | ||
698 | 360 | const QString &printerStateReason, | ||
699 | 361 | bool acceptingJobs | ||
700 | 362 | ) | ||
701 | 363 | { | ||
702 | 364 | Q_EMIT printerDeleted(text, printerUri, printerName, printerState, printerStateReason, acceptingJobs); | ||
703 | 350 | } | 365 | } |
704 | 351 | 366 | ||
705 | 352 | void mockDriversLoaded(const QList<PrinterDriver> &drivers) | 367 | void mockDriversLoaded(const QList<PrinterDriver> &drivers) |
706 | 353 | 368 | ||
707 | === modified file 'tests/unittests/Printers/tst_printerfilter.cpp' | |||
708 | --- tests/unittests/Printers/tst_printerfilter.cpp 2017-01-22 14:21:11 +0000 | |||
709 | +++ tests/unittests/Printers/tst_printerfilter.cpp 2017-02-03 12:26:13 +0000 | |||
710 | @@ -33,7 +33,7 @@ | |||
711 | 33 | void testEmptyCount() | 33 | void testEmptyCount() |
712 | 34 | { | 34 | { |
713 | 35 | QScopedPointer<PrinterBackend> backend(new MockPrinterBackend); | 35 | QScopedPointer<PrinterBackend> backend(new MockPrinterBackend); |
715 | 36 | PrinterModel model(backend.data(), 100); | 36 | PrinterModel model(backend.data()); |
716 | 37 | 37 | ||
717 | 38 | PrinterFilter filter; | 38 | PrinterFilter filter; |
718 | 39 | filter.setSourceModel(&model); | 39 | filter.setSourceModel(&model); |
719 | @@ -42,7 +42,7 @@ | |||
720 | 42 | void testNonEmptyCount() | 42 | void testNonEmptyCount() |
721 | 43 | { | 43 | { |
722 | 44 | QScopedPointer<PrinterBackend> backend(new MockPrinterBackend); | 44 | QScopedPointer<PrinterBackend> backend(new MockPrinterBackend); |
724 | 45 | PrinterModel model(backend.data(), 100); | 45 | PrinterModel model(backend.data()); |
725 | 46 | 46 | ||
726 | 47 | PrinterBackend* printerABackend = new MockPrinterBackend("a-printer"); | 47 | PrinterBackend* printerABackend = new MockPrinterBackend("a-printer"); |
727 | 48 | PrinterBackend* printerBBackend = new MockPrinterBackend("b-printer"); | 48 | PrinterBackend* printerBBackend = new MockPrinterBackend("b-printer"); |
728 | @@ -53,13 +53,14 @@ | |||
729 | 53 | 53 | ||
730 | 54 | PrinterFilter filter; | 54 | PrinterFilter filter; |
731 | 55 | filter.setSourceModel(&model); | 55 | filter.setSourceModel(&model); |
732 | 56 | ((MockPrinterBackend*) backend.data())->mockPrinterAdded("Test added printer", "", printerA.name(), 0, "", true); | ||
733 | 56 | 57 | ||
735 | 57 | QTRY_COMPARE_WITH_TIMEOUT(filter.count(), 2, 101); | 58 | QCOMPARE(filter.count(), 2); |
736 | 58 | } | 59 | } |
737 | 59 | void testCountChanged() | 60 | void testCountChanged() |
738 | 60 | { | 61 | { |
739 | 61 | QScopedPointer<PrinterBackend> backend(new MockPrinterBackend); | 62 | QScopedPointer<PrinterBackend> backend(new MockPrinterBackend); |
741 | 62 | PrinterModel model(backend.data(), 100); | 63 | PrinterModel model(backend.data()); |
742 | 63 | 64 | ||
743 | 64 | PrinterBackend* printerABackend = new MockPrinterBackend("a-printer"); | 65 | PrinterBackend* printerABackend = new MockPrinterBackend("a-printer"); |
744 | 65 | PrinterBackend* printerBBackend = new MockPrinterBackend("b-printer"); | 66 | PrinterBackend* printerBBackend = new MockPrinterBackend("b-printer"); |
745 | @@ -73,8 +74,9 @@ | |||
746 | 73 | 74 | ||
747 | 74 | QSignalSpy modelCountSpy(&model, SIGNAL(countChanged())); | 75 | QSignalSpy modelCountSpy(&model, SIGNAL(countChanged())); |
748 | 75 | QSignalSpy filterCountSpy(&filter, SIGNAL(countChanged())); | 76 | QSignalSpy filterCountSpy(&filter, SIGNAL(countChanged())); |
751 | 76 | QTRY_COMPARE_WITH_TIMEOUT(modelCountSpy.count(), 1, 101); | 77 | ((MockPrinterBackend*) backend.data())->mockPrinterAdded("Test added printer", "", printerA.name(), 0, "", true); |
752 | 77 | QTRY_COMPARE_WITH_TIMEOUT(filterCountSpy.count(), 1, 101); | 78 | QCOMPARE(modelCountSpy.count(), 1); |
753 | 79 | QCOMPARE(filterCountSpy.count(), 1); | ||
754 | 78 | } | 80 | } |
755 | 79 | }; | 81 | }; |
756 | 80 | 82 | ||
757 | 81 | 83 | ||
758 | === modified file 'tests/unittests/Printers/tst_printermodel.cpp' | |||
759 | --- tests/unittests/Printers/tst_printermodel.cpp 2017-01-22 14:21:11 +0000 | |||
760 | +++ tests/unittests/Printers/tst_printermodel.cpp 2017-02-03 12:26:13 +0000 | |||
761 | @@ -36,7 +36,7 @@ | |||
762 | 36 | void init() | 36 | void init() |
763 | 37 | { | 37 | { |
764 | 38 | m_backend = new MockPrinterBackend; | 38 | m_backend = new MockPrinterBackend; |
766 | 39 | m_model = new PrinterModel(m_backend, 100); | 39 | m_model = new PrinterModel(m_backend); |
767 | 40 | } | 40 | } |
768 | 41 | void cleanup() | 41 | void cleanup() |
769 | 42 | { | 42 | { |
770 | @@ -80,9 +80,10 @@ | |||
771 | 80 | 80 | ||
772 | 81 | PrinterBackend* printerABackend = new MockPrinterBackend("a-printer"); | 81 | PrinterBackend* printerABackend = new MockPrinterBackend("a-printer"); |
773 | 82 | Printer* printerA = new Printer(printerABackend); | 82 | Printer* printerA = new Printer(printerABackend); |
775 | 83 | ((MockPrinterBackend*) m_backend)->m_availablePrinters << printerA; | 83 | getBackend()->m_availablePrinters << printerA; |
776 | 84 | getBackend()->mockPrinterAdded("Test added printer", "", printerA->name(), 0, "", true); | ||
777 | 84 | 85 | ||
779 | 85 | QTRY_COMPARE_WITH_TIMEOUT(m_model->count(), 1, 500); | 86 | QCOMPARE(m_model->count(), 1); |
780 | 86 | QCOMPARE(countSpy.count(), 1); | 87 | QCOMPARE(countSpy.count(), 1); |
781 | 87 | QCOMPARE(insertSpy.count(), 1); | 88 | QCOMPARE(insertSpy.count(), 1); |
782 | 88 | 89 | ||
783 | @@ -99,8 +100,10 @@ | |||
784 | 99 | PrinterBackend* printerBBackend = new MockPrinterBackend("b-printer"); | 100 | PrinterBackend* printerBBackend = new MockPrinterBackend("b-printer"); |
785 | 100 | Printer* printerB = new Printer(printerBBackend); | 101 | Printer* printerB = new Printer(printerBBackend); |
786 | 101 | ((MockPrinterBackend*) m_backend)->m_availablePrinters << printerA << printerB; | 102 | ((MockPrinterBackend*) m_backend)->m_availablePrinters << printerA << printerB; |
787 | 103 | getBackend()->mockPrinterAdded("Test added printer", "", printerA->name(), 0, "", true); | ||
788 | 104 | getBackend()->mockPrinterAdded("Test added printer", "", printerB->name(), 0, "", true); | ||
789 | 102 | 105 | ||
791 | 103 | QTRY_COMPARE_WITH_TIMEOUT(m_model->count(), 2, 500); | 106 | QCOMPARE(m_model->count(), 2); |
792 | 104 | 107 | ||
793 | 105 | // Setup spy and move a printer | 108 | // Setup spy and move a printer |
794 | 106 | int from = 1; | 109 | int from = 1; |
795 | @@ -109,7 +112,10 @@ | |||
796 | 109 | 112 | ||
797 | 110 | // Check signals were fired | 113 | // Check signals were fired |
798 | 111 | QSignalSpy moveSpy(m_model, SIGNAL(rowsMoved(const QModelIndex&, int, int, const QModelIndex&, int))); | 114 | QSignalSpy moveSpy(m_model, SIGNAL(rowsMoved(const QModelIndex&, int, int, const QModelIndex&, int))); |
800 | 112 | QTRY_COMPARE_WITH_TIMEOUT(moveSpy.count(), 1, 500); | 115 | |
801 | 116 | getBackend()->mockPrinterModified("Test e.g. renamed printer", "", printerA->name(), 0, "", true); | ||
802 | 117 | |||
803 | 118 | QCOMPARE(moveSpy.count(), 1); | ||
804 | 113 | QCOMPARE(m_model->count(), 2); | 119 | QCOMPARE(m_model->count(), 2); |
805 | 114 | 120 | ||
806 | 115 | // Check item was moved from -> to | 121 | // Check item was moved from -> to |
807 | @@ -127,14 +133,18 @@ | |||
808 | 127 | Printer* printerB = new Printer(printerBBackend); | 133 | Printer* printerB = new Printer(printerBBackend); |
809 | 128 | ((MockPrinterBackend*) m_backend)->m_availablePrinters << printerA << printerB; | 134 | ((MockPrinterBackend*) m_backend)->m_availablePrinters << printerA << printerB; |
810 | 129 | 135 | ||
812 | 130 | QTRY_COMPARE_WITH_TIMEOUT(m_model->count(), 2, 500); | 136 | getBackend()->mockPrinterAdded("Test added printer", "", printerA->name(), 0, "", true); |
813 | 137 | getBackend()->mockPrinterAdded("Test added printer", "", printerB->name(), 0, "", true); | ||
814 | 138 | |||
815 | 139 | QCOMPARE(m_model->count(), 2); | ||
816 | 131 | 140 | ||
817 | 132 | // Setup spy and remove a printer | 141 | // Setup spy and remove a printer |
818 | 133 | QSignalSpy countSpy(m_model, SIGNAL(countChanged())); | 142 | QSignalSpy countSpy(m_model, SIGNAL(countChanged())); |
819 | 134 | QSignalSpy removeSpy(m_model, SIGNAL(rowsRemoved(const QModelIndex&, int, int))); | 143 | QSignalSpy removeSpy(m_model, SIGNAL(rowsRemoved(const QModelIndex&, int, int))); |
820 | 135 | ((MockPrinterBackend*) m_backend)->m_availablePrinters.removeLast(); | 144 | ((MockPrinterBackend*) m_backend)->m_availablePrinters.removeLast(); |
821 | 145 | getBackend()->mockPrinterDeleted("Test deleted printer", "", printerB->name(), 0, "", false); | ||
822 | 136 | 146 | ||
824 | 137 | QTRY_COMPARE_WITH_TIMEOUT(m_model->count(), 1, 500); | 147 | QCOMPARE(m_model->count(), 1); |
825 | 138 | QCOMPARE(countSpy.count(), 1); | 148 | QCOMPARE(countSpy.count(), 1); |
826 | 139 | QCOMPARE(removeSpy.count(), 1); | 149 | QCOMPARE(removeSpy.count(), 1); |
827 | 140 | 150 | ||
828 | @@ -156,17 +166,20 @@ | |||
829 | 156 | Printer* printerD = new Printer(printerDBackend); | 166 | Printer* printerD = new Printer(printerDBackend); |
830 | 157 | ((MockPrinterBackend*) m_backend)->m_availablePrinters << printerA << printerB << printerC << printerD; | 167 | ((MockPrinterBackend*) m_backend)->m_availablePrinters << printerA << printerB << printerC << printerD; |
831 | 158 | 168 | ||
833 | 159 | QTRY_COMPARE_WITH_TIMEOUT(m_model->count(), 4, 500); | 169 | getBackend()->mockPrinterAdded("Test added printer", "", printerA->name(), 0, "", true); |
834 | 170 | |||
835 | 171 | QCOMPARE(m_model->count(), 4); | ||
836 | 160 | 172 | ||
837 | 161 | // Setup spy and remove middle two printers | 173 | // Setup spy and remove middle two printers |
838 | 162 | QSignalSpy countSpy(m_model, SIGNAL(countChanged())); | 174 | QSignalSpy countSpy(m_model, SIGNAL(countChanged())); |
839 | 163 | QSignalSpy removeSpy(m_model, SIGNAL(rowsRemoved(const QModelIndex&, int, int))); | 175 | QSignalSpy removeSpy(m_model, SIGNAL(rowsRemoved(const QModelIndex&, int, int))); |
840 | 176 | |||
841 | 164 | ((MockPrinterBackend*) m_backend)->m_availablePrinters.removeAt(2); | 177 | ((MockPrinterBackend*) m_backend)->m_availablePrinters.removeAt(2); |
842 | 165 | ((MockPrinterBackend*) m_backend)->m_availablePrinters.removeAt(1); | 178 | ((MockPrinterBackend*) m_backend)->m_availablePrinters.removeAt(1); |
843 | 166 | 179 | ||
847 | 167 | // Wait until one count signal has been fired | 180 | getBackend()->mockPrinterDeleted("Test deleted printer", "", printerB->name(), 0, "", false); |
848 | 168 | // (to ensure this is only one iteration of update) | 181 | |
849 | 169 | QTRY_COMPARE_WITH_TIMEOUT(countSpy.count(), 1, 500); | 182 | QCOMPARE(countSpy.count(), 1); |
850 | 170 | QCOMPARE(m_model->count(), 2); | 183 | QCOMPARE(m_model->count(), 2); |
851 | 171 | QCOMPARE(removeSpy.count(), 2); | 184 | QCOMPARE(removeSpy.count(), 2); |
852 | 172 | 185 | ||
853 | @@ -181,6 +194,10 @@ | |||
854 | 181 | QCOMPARE(args.at(2).toInt(), 1); | 194 | QCOMPARE(args.at(2).toInt(), 1); |
855 | 182 | } | 195 | } |
856 | 183 | private: | 196 | private: |
857 | 197 | MockPrinterBackend* getBackend() | ||
858 | 198 | { | ||
859 | 199 | return (MockPrinterBackend*) m_backend; | ||
860 | 200 | } | ||
861 | 184 | PrinterBackend *m_backend; | 201 | PrinterBackend *m_backend; |
862 | 185 | PrinterModel *m_model; | 202 | PrinterModel *m_model; |
863 | 186 | }; | 203 | }; |
864 | 187 | 204 | ||
865 | === modified file 'tests/unittests/Printers/tst_printers.cpp' | |||
866 | --- tests/unittests/Printers/tst_printers.cpp 2017-01-27 13:52:47 +0000 | |||
867 | +++ tests/unittests/Printers/tst_printers.cpp 2017-02-03 12:26:13 +0000 | |||
868 | @@ -88,10 +88,10 @@ | |||
869 | 88 | PrinterBackend* backend = new MockPrinterBackend; | 88 | PrinterBackend* backend = new MockPrinterBackend; |
870 | 89 | ((MockPrinterBackend*) backend)->m_availablePrinters = in; | 89 | ((MockPrinterBackend*) backend)->m_availablePrinters = in; |
871 | 90 | 90 | ||
873 | 91 | Printers printers(backend, 100); | 91 | Printers printers(backend); |
874 | 92 | auto all = printers.allPrinters(); | 92 | auto all = printers.allPrinters(); |
875 | 93 | 93 | ||
877 | 94 | QTRY_COMPARE_WITH_TIMEOUT(all->rowCount(), out.size(), 101); | 94 | QCOMPARE(all->rowCount(), out.size()); |
878 | 95 | for (int i = 0; i < all->rowCount(); i++) { | 95 | for (int i = 0; i < all->rowCount(); i++) { |
879 | 96 | QCOMPARE( | 96 | QCOMPARE( |
880 | 97 | all->data(all->index(i, 0)).toString(), | 97 | all->data(all->index(i, 0)).toString(), |
http:// bazaar. launchpad. net/~jonas- drange/ ubuntu- settings- components/ cups-notificati ons/revision/ 223 is the revision where ALL signals are in PrinterBackend.