Merge lp:~jonas-drange/ubuntu-settings-components/printer-remove into lp:~phablet-team/ubuntu-settings-components/printer-components

Proposed by Jonas G. Drange
Status: Rejected
Rejected by: Jonas G. Drange
Proposed branch: lp:~jonas-drange/ubuntu-settings-components/printer-remove
Merge into: lp:~phablet-team/ubuntu-settings-components/printer-components
Prerequisite: lp:~jonas-drange/ubuntu-settings-components/cups-notifications
Diff against target: 168 lines (+68/-3)
8 files modified
examples/Printers.qml (+12/-0)
plugins/Ubuntu/Settings/Printers/backend/backend_cups.cpp (+1/-1)
plugins/Ubuntu/Settings/Printers/cups/cupsfacade.cpp (+3/-1)
plugins/Ubuntu/Settings/Printers/cups/cupspkhelper.cpp (+22/-0)
plugins/Ubuntu/Settings/Printers/cups/cupspkhelper.h (+4/-0)
plugins/Ubuntu/Settings/Printers/printers/printers.cpp (+6/-0)
tests/unittests/Printers/mockbackend.h (+6/-1)
tests/unittests/Printers/tst_printers.cpp (+14/-0)
To merge this branch: bzr merge lp:~jonas-drange/ubuntu-settings-components/printer-remove
Reviewer Review Type Date Requested Status
Andrew Hayzen (community) Needs Fixing
Review via email: mp+316293@code.launchpad.net

Commit message

adds removal of printer

Description of the change

adds removal of printer

To post a comment you must log in.
Revision history for this message
Andrew Hayzen (ahayzen) wrote :

After deleting a printer from the QML UI, the listview of printers freezes for me. I'm able to click add new printer, but not able to click on any printer delegates or right click on them - I have to restart the app.

review: Needs Fixing
227. By Jonas G. Drange

syncs with prereq branch

Unmerged revisions

227. By Jonas G. Drange

syncs with prereq branch

226. By Jonas G. Drange

adds removal of printer

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'examples/Printers.qml'
2--- examples/Printers.qml 2017-01-27 14:07:29 +0000
3+++ examples/Printers.qml 2017-02-03 12:27:16 +0000
4@@ -171,6 +171,18 @@
5 model: Printers.allPrintersWithPdf
6 delegate: ListItem {
7 height: modelLayout.height + (divider.visible ? divider.height : 0)
8+ trailingActions: ListItemActions {
9+ actions: [
10+ Action {
11+ iconName: "delete"
12+ onTriggered: {
13+ if (!Printers.removePrinter(model.name)) {
14+ console.error('failed to remove printer', Printers.lastMessage);
15+ }
16+ }
17+ }
18+ ]
19+ }
20 ListItemLayout {
21 id: modelLayout
22 title.text: displayName
23
24=== modified file 'plugins/Ubuntu/Settings/Printers/backend/backend_cups.cpp'
25--- plugins/Ubuntu/Settings/Printers/backend/backend_cups.cpp 2017-02-03 12:27:16 +0000
26+++ plugins/Ubuntu/Settings/Printers/backend/backend_cups.cpp 2017-02-03 12:27:16 +0000
27@@ -96,7 +96,7 @@
28
29 QString PrinterCupsBackend::printerDelete(const QString &name)
30 {
31-
32+ return m_cups->printerDelete(name);
33 }
34
35 QString PrinterCupsBackend::printerSetEnabled(const QString &name,
36
37=== modified file 'plugins/Ubuntu/Settings/Printers/cups/cupsfacade.cpp'
38--- plugins/Ubuntu/Settings/Printers/cups/cupsfacade.cpp 2017-02-03 12:27:16 +0000
39+++ plugins/Ubuntu/Settings/Printers/cups/cupsfacade.cpp 2017-02-03 12:27:16 +0000
40@@ -63,7 +63,9 @@
41
42 QString CupsFacade::printerDelete(const QString &name)
43 {
44- Q_UNUSED(name);
45+ if (!helper.printerDelete(name)) {
46+ return helper.getLastError();
47+ }
48 return QString();
49 }
50
51
52=== modified file 'plugins/Ubuntu/Settings/Printers/cups/cupspkhelper.cpp'
53--- plugins/Ubuntu/Settings/Printers/cups/cupspkhelper.cpp 2017-02-03 12:27:16 +0000
54+++ plugins/Ubuntu/Settings/Printers/cups/cupspkhelper.cpp 2017-02-03 12:27:16 +0000
55@@ -44,6 +44,12 @@
56 httpClose(m_connection);
57 }
58
59+bool CupsPkHelper::printerDelete(const QString &printerName)
60+{
61+ return sendNewSimpleRequest(CUPS_DELETE_PRINTER, printerName.toUtf8(),
62+ CphResource::CphResourceAdmin);
63+}
64+
65 bool CupsPkHelper::printerAdd(const QString &printerName,
66 const QString &printerUri,
67 const QString &ppdFile,
68@@ -796,3 +802,19 @@
69
70 ippDelete(resp);
71 }
72+
73+bool CupsPkHelper::sendNewSimpleRequest(
74+ ipp_op_t op, const QString &printerName,
75+ const CupsPkHelper::CphResource &resource)
76+{
77+ ipp_t *request;
78+
79+ if (!isPrinterNameValid(printerName))
80+ return false;
81+
82+ request = ippNewRequest(op);
83+ addPrinterUri(request, printerName);
84+ addRequestingUsername(request, NULL);
85+
86+ return sendRequest(request, resource);
87+}
88
89=== modified file 'plugins/Ubuntu/Settings/Printers/cups/cupspkhelper.h'
90--- plugins/Ubuntu/Settings/Printers/cups/cupspkhelper.h 2017-02-03 12:27:16 +0000
91+++ plugins/Ubuntu/Settings/Printers/cups/cupspkhelper.h 2017-02-03 12:27:16 +0000
92@@ -46,6 +46,7 @@
93 explicit CupsPkHelper();
94 ~CupsPkHelper();
95
96+ bool printerDelete(const QString &printerName);
97 bool printerAdd(const QString &printerName,
98 const QString &printerUri,
99 const QString &ppdFile,
100@@ -89,6 +90,9 @@
101 ipp_tag_t type,
102 const QString &name,
103 const QString &value);
104+ bool sendNewSimpleRequest(ipp_op_t op, const QString &printerName,
105+ const CupsPkHelper::CphResource &resource);
106+
107 static void addPrinterUri(ipp_t *request, const QString &name);
108 static void addRequestingUsername(ipp_t *request, const QString &username);
109 static const QString getResource(const CphResource &resource);
110
111=== modified file 'plugins/Ubuntu/Settings/Printers/printers/printers.cpp'
112--- plugins/Ubuntu/Settings/Printers/printers/printers.cpp 2017-02-03 12:27:16 +0000
113+++ plugins/Ubuntu/Settings/Printers/printers/printers.cpp 2017-02-03 12:27:16 +0000
114@@ -158,5 +158,11 @@
115
116 bool Printers::removePrinter(const QString &name)
117 {
118+ QString reply = m_backend->printerDelete(name);
119
120+ if (!reply.isEmpty()) {
121+ m_lastMessage = reply;
122+ return false;
123+ }
124+ return true;
125 }
126
127=== modified file 'tests/unittests/Printers/mockbackend.h'
128--- tests/unittests/Printers/mockbackend.h 2017-02-03 12:27:16 +0000
129+++ tests/unittests/Printers/mockbackend.h 2017-02-03 12:27:16 +0000
130@@ -64,7 +64,12 @@
131
132 virtual QString printerDelete(const QString &name) override
133 {
134- Q_UNUSED(name);
135+ Q_FOREACH(Printer *p, m_availablePrinters) {
136+ if (p->name() == name) {
137+ m_availablePrinters.removeOne(p);
138+ break;
139+ }
140+ }
141 return returnValue;
142 }
143
144
145=== modified file 'tests/unittests/Printers/tst_printers.cpp'
146--- tests/unittests/Printers/tst_printers.cpp 2017-02-03 12:27:16 +0000
147+++ tests/unittests/Printers/tst_printers.cpp 2017-02-03 12:27:16 +0000
148@@ -108,6 +108,20 @@
149 DriverModel *drivers = (DriverModel*) printers.drivers();
150 QCOMPARE(drivers->filter(), targetFilter);
151 }
152+ void testPrinterRemove()
153+ {
154+ auto aBackend = new MockPrinterBackend("printer-a");
155+ auto a = new Printer(aBackend);
156+
157+ QList<Printer*> list({a});
158+
159+ MockPrinterBackend* backend = new MockPrinterBackend;
160+ backend->m_availablePrinters = list;
161+
162+ Printers printers(backend);
163+ printers.removePrinter(a->name());
164+ QCOMPARE(backend->m_availablePrinters.size(), 0);
165+ }
166 };
167
168 QTEST_GUILESS_MAIN(TestPrinters)

Subscribers

People subscribed via source and target branches