Merge lp:~ahayzen/ubuntu-settings-components/model-update-printer-printerjob into lp:~phablet-team/ubuntu-settings-components/printer-components

Proposed by Andrew Hayzen
Status: Merged
Approved by: Jonas G. Drange
Approved revision: 230
Merged at revision: 226
Proposed branch: lp:~ahayzen/ubuntu-settings-components/model-update-printer-printerjob
Merge into: lp:~phablet-team/ubuntu-settings-components/printer-components
Diff against target: 262 lines (+111/-12)
8 files modified
plugins/Ubuntu/Settings/Printers/backend/backend_cups.cpp (+2/-0)
plugins/Ubuntu/Settings/Printers/models/jobmodel.cpp (+8/-1)
plugins/Ubuntu/Settings/Printers/models/printermodel.cpp (+17/-1)
plugins/Ubuntu/Settings/Printers/printer/printer.cpp (+37/-10)
plugins/Ubuntu/Settings/Printers/printer/printer.h (+3/-0)
plugins/Ubuntu/Settings/Printers/printer/printerjob.cpp (+36/-0)
plugins/Ubuntu/Settings/Printers/printer/printerjob.h (+4/-0)
plugins/Ubuntu/Settings/Printers/structs.h (+4/-0)
To merge this branch: bzr merge lp:~ahayzen/ubuntu-settings-components/model-update-printer-printerjob
Reviewer Review Type Date Requested Status
Jonas G. Drange (community) Approve
Review via email: mp+316332@code.launchpad.net

Commit message

* Add updateFrom to Printer and PrinterJob
* Call updateFrom in PrinterModel and JobModel when printers are the same
* Emit dataChanged signal in models when updateFrom returns a change
* Ensure sorting is done by name last

Description of the change

* Add updateFrom to Printer and PrinterJob
* Call updateFrom in PrinterModel and JobModel when printers are the same
* Emit dataChanged signal in models when updateFrom returns a change
* Ensure sorting is done by name last

To post a comment you must log in.
Revision history for this message
Jonas G. Drange (jonas-drange) wrote :

two minor comments

review: Needs Fixing
230. By Andrew Hayzen

* Add deepCompare to Printer and PrinterJob
* Change updateFrom to only copy values not compare
* Remove toVector as it isn't needed in dataChanged

Revision history for this message
Jonas G. Drange (jonas-drange) wrote :

awesomsauce

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/backend/backend_cups.cpp'
2--- plugins/Ubuntu/Settings/Printers/backend/backend_cups.cpp 2017-02-03 12:04:46 +0000
3+++ plugins/Ubuntu/Settings/Printers/backend/backend_cups.cpp 2017-02-03 14:43:53 +0000
4@@ -245,6 +245,8 @@
5 Q_FOREACH(auto job, jobs) {
6 auto newJob = QSharedPointer<PrinterJob>(new PrinterJob(name, this, job->id));
7
8+ // TODO: needs to extract other properties like copies/duplex etc
9+
10 newJob->setState(static_cast<PrinterEnum::JobState>(job->state));
11 newJob->setTitle(QString::fromLocal8Bit(job->title));
12
13
14=== modified file 'plugins/Ubuntu/Settings/Printers/models/jobmodel.cpp'
15--- plugins/Ubuntu/Settings/Printers/models/jobmodel.cpp 2017-02-02 17:22:55 +0000
16+++ plugins/Ubuntu/Settings/Printers/models/jobmodel.cpp 2017-02-03 14:43:53 +0000
17@@ -68,9 +68,16 @@
18 bool exists = false;
19
20 Q_FOREACH(QSharedPointer<PrinterJob> p, newJobs) {
21- // TODO: update status here
22 if (p->jobId() == m_jobs.at(i)->jobId()) {
23 exists = true;
24+
25+ // Ensure the other properties of the job are up to date
26+ if (!m_jobs.at(i)->deepCompare(p)) {
27+ m_jobs.at(i)->updateFrom(p);
28+
29+ Q_EMIT dataChanged(index(i), index(i));
30+ }
31+
32 break;
33 }
34 }
35
36=== modified file 'plugins/Ubuntu/Settings/Printers/models/printermodel.cpp'
37--- plugins/Ubuntu/Settings/Printers/models/printermodel.cpp 2017-02-03 12:04:46 +0000
38+++ plugins/Ubuntu/Settings/Printers/models/printermodel.cpp 2017-02-03 14:43:53 +0000
39@@ -80,6 +80,14 @@
40 Q_FOREACH(Printer *p, newPrinters) {
41 if (p->name() == m_printers.at(i)->name()) {
42 exists = true;
43+
44+ // Ensure the other properties of the Printer are up to date
45+ if (!m_printers.at(i)->deepCompare(p)) {
46+ m_printers.at(i)->updateFrom(p);
47+
48+ Q_EMIT dataChanged(index(i), index(i));
49+ }
50+
51 break;
52 }
53 }
54@@ -460,7 +468,15 @@
55 int leftPdf = sourceModel()->data(left, PrinterModel::IsPdfRole).toInt();
56 int rightPdf = sourceModel()->data(right, PrinterModel::IsPdfRole).toInt();
57
58- return leftPdf > rightPdf;
59+ // If Pdf is also same then sort by name
60+ if (leftPdf == rightPdf) {
61+ QString leftName = sourceModel()->data(left, PrinterModel::NameRole).toString();
62+ QString rightName = sourceModel()->data(right, PrinterModel::NameRole).toString();
63+
64+ return leftName > rightName;
65+ } else {
66+ return leftPdf > rightPdf;
67+ }
68 } else {
69 return leftData.toInt() < rightData.toInt();
70 }
71
72=== modified file 'plugins/Ubuntu/Settings/Printers/printer/printer.cpp'
73--- plugins/Ubuntu/Settings/Printers/printer/printer.cpp 2017-01-23 19:41:11 +0000
74+++ plugins/Ubuntu/Settings/Printers/printer/printer.cpp 2017-02-03 14:43:53 +0000
75@@ -185,9 +185,6 @@
76 QStringList vals({colorModel.name});
77 QString reply = m_backend->printerAddOption(name(), "ColorModel", vals);
78 Q_UNUSED(reply);
79-
80- loadColorModel();
81- Q_EMIT defaultColorModelChanged();
82 }
83
84 void Printer::setAccessControl(const PrinterEnum::AccessControl &accessControl)
85@@ -198,9 +195,6 @@
86 void Printer::setDescription(const QString &description)
87 {
88 QString answer = m_backend->printerSetInfo(name(), description);
89-
90- m_backend->refresh();
91- Q_EMIT descriptionChanged();
92 }
93
94 void Printer::setDefaultDuplexMode(const PrinterEnum::DuplexMode &duplexMode)
95@@ -216,9 +210,6 @@
96
97 QStringList vals({Utils::duplexModeToPpdChoice(duplexMode)});
98 QString reply = m_backend->printerAddOption(name(), "Duplex", vals);
99-
100- m_backend->refresh();
101- Q_EMIT defaultDuplexModeChanged();
102 }
103
104 void Printer::setEnabled(const bool enabled)
105@@ -249,7 +240,6 @@
106
107 QStringList vals({quality.name});
108 QString reply = m_backend->printerAddOption(name(), quality.originalOption, vals);
109- loadPrintQualities();
110 }
111
112 void Printer::setDefaultPageSize(const QPageSize &pageSize)
113@@ -289,3 +279,40 @@
114 {
115
116 }
117+
118+void Printer::deepCompare(Printer *other) const
119+{
120+ bool changed = false;
121+
122+ changed |= defaultColorModel() != other->defaultColorModel();
123+ changed |= defaultPrintQuality() != other->defaultPrintQuality();
124+ changed |= description() != other->description();
125+ changed |= defaultDuplexMode() != other->defaultDuplexMode();
126+ changed |= defaultPageSize() != other->defaultPageSize();
127+ changed |= state() != other->state();
128+
129+ // TODO: accessControl
130+ // TODO: enabled
131+ // TODO: errorPolicy
132+
133+ return changed;
134+}
135+
136+void Printer::updateFrom(Printer* newPrinter)
137+{
138+ m_backend->refresh();
139+
140+ loadColorModel();
141+ loadPrintQualities();
142+
143+ Q_EMIT descriptionChanged();
144+ Q_EMIT defaultColorModelChanged();
145+ Q_EMIT defaultDuplexModeChanged();
146+ Q_EMIT defaultPageSizeChanged();
147+ Q_EMIT defaultPrintQualityChanged();
148+ Q_EMIT stateChanged();
149+
150+ // TODO: accessControl
151+ // TODO: enabled
152+ // TODO: errorPolicy
153+}
154
155=== modified file 'plugins/Ubuntu/Settings/Printers/printer/printer.h'
156--- plugins/Ubuntu/Settings/Printers/printer/printer.h 2017-01-22 14:21:11 +0000
157+++ plugins/Ubuntu/Settings/Printers/printer/printer.h 2017-02-03 14:43:53 +0000
158@@ -71,6 +71,7 @@
159 void setDefaultPrintQuality(const PrintQuality &quality);
160 void setDefaultPageSize(const QPageSize &pageSize);
161
162+ bool deepCompare(Printer *other) const;
163 public Q_SLOTS:
164 // Add user that is either denied or allowed printer. See AccessControl.
165 void addUser(const QString &username);
166@@ -85,6 +86,7 @@
167 // Requests ink levels for printer.
168 void requestInkLevels(const QString &name);
169
170+ void updateFrom(Printer *newPrinter);
171 Q_SIGNALS:
172 void nameChanged();
173 void enabledChanged();
174@@ -92,6 +94,7 @@
175 void defaultPageSizeChanged();
176 void defaultDuplexModeChanged();
177 void defaultColorModelChanged();
178+ void defaultPrintQualityChanged();
179 void qualityChanged();
180 void accessControlChanged();
181 void errorPolicyChanged();
182
183=== modified file 'plugins/Ubuntu/Settings/Printers/printer/printerjob.cpp'
184--- plugins/Ubuntu/Settings/Printers/printer/printerjob.cpp 2017-02-02 16:00:55 +0000
185+++ plugins/Ubuntu/Settings/Printers/printer/printerjob.cpp 2017-02-03 14:43:53 +0000
186@@ -349,3 +349,39 @@
187 {
188 return m_title;
189 }
190+
191+bool PrinterJob::deepCompare(QSharedPointer<PrinterJob> other) const
192+{
193+ // jobId and printerName will be the same
194+
195+ bool changed = false;
196+
197+ changed |= collate() != newPrinterJob->collate();
198+ changed |= colorModel() != newPrinterJob->colorModel();
199+ changed |= copies() != newPrinterJob->copies();
200+ changed |= duplexMode() != newPrinterJob->duplexMode();
201+ changed |= landscape() != newPrinterJob->landscape();
202+ changed |= printRange() != newPrinterJob->printRange();
203+ changed |= printRangeMode() != newPrinterJob->printRangeMode();
204+ changed |= quality() != newPrinterJob->quality();
205+ changed |= reverse() != newPrinterJob->reverse();
206+ changed |= state() != newPrinterJob->state();
207+ changed |= title() != newPrinterJob->title();
208+
209+ return changed;
210+}
211+
212+void PrinterJob::updateFrom(QSharedPointer<PrinterJob> newPrinterJob)
213+{
214+ setCollate(newPrinterJob->collate());
215+ setColorModel(newPrinterJob->colorModel());
216+ setCopies(newPrinterJob->copies());
217+ setDuplexMode(newPrinterJob->duplexMode());
218+ setLandscape(newPrinterJob->landscape());
219+ setPrintRange(newPrinterJob->printRange());
220+ setPrintRangeMode(newPrinterJob->printRangeMode());
221+ setQuality(newPrinterJob->quality());
222+ setReverse(newPrinterJob->reverse());
223+ setState(newPrinterJob->state());
224+ setTitle(newPrinterJob->title());
225+}
226
227=== modified file 'plugins/Ubuntu/Settings/Printers/printer/printerjob.h'
228--- plugins/Ubuntu/Settings/Printers/printer/printerjob.h 2017-02-02 16:00:55 +0000
229+++ plugins/Ubuntu/Settings/Printers/printer/printerjob.h 2017-02-03 14:43:53 +0000
230@@ -75,6 +75,8 @@
231 bool reverse() const;
232 PrinterEnum::JobState state() const;
233 QString title() const;
234+
235+ bool deepCompare(QSharedPointer<PrinterJob> other) const;
236 public Q_SLOTS:
237 PrinterEnum::DuplexMode getDuplexMode() const;
238 ColorModel getColorModel() const;
239@@ -92,6 +94,8 @@
240 void setQuality(const int quality);
241 void setReverse(const bool reverse);
242 void setTitle(const QString &title);
243+
244+ void updateFrom(QSharedPointer<PrinterJob> newPrinterJob);
245 private Q_SLOTS:
246 void loadDefaults();
247 void setIsTwoSided(const bool isTwoSided);
248
249=== modified file 'plugins/Ubuntu/Settings/Printers/structs.h'
250--- plugins/Ubuntu/Settings/Printers/structs.h 2017-01-26 21:47:06 +0000
251+++ plugins/Ubuntu/Settings/Printers/structs.h 2017-02-03 14:43:53 +0000
252@@ -70,6 +70,10 @@
253 {
254 return (name == a.name && originalOption == a.originalOption);
255 }
256+ bool operator !=(const PrintQuality& a) const
257+ {
258+ return !(operator ==(a));
259+ }
260 };
261
262 struct PrinterDriver

Subscribers

People subscribed via source and target branches