Merge lp:~townsend/libertine/refactor-package-operation-details into lp:libertine

Proposed by Christopher Townsend
Status: Merged
Approved by: Christopher Townsend
Approved revision: 428
Merged at revision: 424
Proposed branch: lp:~townsend/libertine/refactor-package-operation-details
Merge into: lp:libertine
Diff against target: 867 lines (+137/-186)
20 files modified
common/CMakeLists.txt (+1/-1)
common/ContainerManager.cpp (+12/-12)
common/ContainerManager.h (+4/-4)
common/ContainerOperationDetails.cpp (+25/-57)
common/ContainerOperationDetails.h (+9/-9)
common/ContainersConfig.cpp (+10/-8)
libertine/libertine.cpp (+5/-5)
libertine/libertine.h (+3/-3)
qml/common/ContainerEditView.qml (+4/-4)
qml/common/ContainerInfoView.qml (+25/-7)
qml/common/ContainerOptionsDialog.qml (+4/-4)
qml/common/ContainersList.qml (+8/-5)
qml/common/ExtraArchivesView.qml (+1/-1)
qml/common/ExtraBindMountsView.qml (+2/-2)
qml/common/ManageContainer.qml (+7/-7)
qml/common/PackageInfoView.qml (+4/-50)
qml/common/SearchResultsView.qml (+1/-1)
qml/gui/libertine.qml (+1/-1)
system-settings-plugin/plugin.cpp (+5/-5)
tools/libertine-container-manager (+6/-0)
To merge this branch: bzr merge lp:~townsend/libertine/refactor-package-operation-details
Reviewer Review Type Date Requested Status
Libertine CI Bot continuous-integration Approve
Larry Price Approve
Review via email: mp+318538@code.launchpad.net

Commit message

Refactor package operation details into container operation details.

To post a comment you must log in.
Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:424
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/423/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/794
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/655
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=zesty,testname=default/655
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/655
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=zesty,testname=default/655
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/804
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/785
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/785/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/785
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/785/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/785
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/785/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/785
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/785/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/423/rebuild

review: Approve (continuous-integration)
Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:425
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/424/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/795
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/657
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=zesty,testname=default/657
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/657
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=zesty,testname=default/657
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/805
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/787
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/787/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/787
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/787/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/787
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/787/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/787
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/787/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/424/rebuild

review: Approve (continuous-integration)
Revision history for this message
Larry Price (larryprice) wrote :

some minor inlines - i'll test it out soon.

review: Needs Information
Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:426
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/426/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/798
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/659
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=zesty,testname=default/659
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/659
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=zesty,testname=default/659
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/808
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/789
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/789/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/789
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/789/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/789
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/789/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/789
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/789/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/426/rebuild

review: Approve (continuous-integration)
Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:427
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/427/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/799
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/660
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=zesty,testname=default/660
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/660
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=zesty,testname=default/660
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/809
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/790
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/790/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/790
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/790/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/790
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/790/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/790
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/790/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/427/rebuild

review: Approve (continuous-integration)
Revision history for this message
Larry Price (larryprice) wrote :

lgtm

review: Approve
Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:428
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/428/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/800
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/661
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=zesty,testname=default/661
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/661
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=zesty,testname=default/661
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/810
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/791
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/791/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/791
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/791/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/791
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/791/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/791
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/791/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/428/rebuild

review: Approve (continuous-integration)
Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Libertine CI Bot (libertine-ci-bot) :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'common/CMakeLists.txt'
2--- common/CMakeLists.txt 2017-02-16 17:32:48 +0000
3+++ common/CMakeLists.txt 2017-03-01 18:38:22 +0000
4@@ -6,7 +6,7 @@
5 ContainerConfigList.cpp
6 ContainerManager.cpp
7 LibertineConfig.cpp
8- PackageOperationDetails.cpp
9+ ContainerOperationDetails.cpp
10 )
11
12 target_link_libraries(${LIBERTINE_COMMON} ${LIBERTINE_CORE} Qt5::Core)
13
14=== modified file 'common/ContainerManager.cpp'
15--- common/ContainerManager.cpp 2016-10-03 20:30:29 +0000
16+++ common/ContainerManager.cpp 2017-03-01 18:38:22 +0000
17@@ -3,7 +3,7 @@
18 * @brief Threaded Libertine container manager
19 */
20 /*
21- * Copyright 2015-2016 Canonical Ltd
22+ * Copyright 2015-2017 Canonical Ltd
23 *
24 * Libertine is free software: you can redistribute it and/or modify it under
25 * the terms of the GNU General Public License, version 3, as published by the
26@@ -98,7 +98,7 @@
27 auto output = process_.readAllStandardOutput();
28 if (!output.isEmpty())
29 {
30- emit updateOperationDetails(id, "", output);
31+ emit updateOperationDetails(id, output);
32 }
33 });
34 connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
35@@ -107,7 +107,7 @@
36 {
37 emit error(CONTAINER_CREATE_FAILED.arg(id), process_.readAllStandardError());
38 }
39- emit operationFinished(id, "");
40+ emit operationFinished(id);
41 });
42 connect(&process_, &QProcess::started, [=]() {
43 process_.write(password.toUtf8());
44@@ -140,7 +140,7 @@
45
46
47 void ContainerManagerWorker::
48-packageOperationInteraction(const QString& input)
49+containerOperationInteraction(const QString& input)
50 {
51 if (process_.state() == QProcess::Running)
52 {
53@@ -156,7 +156,7 @@
54 auto output = process_.readAllStandardOutput();
55 if (!output.isEmpty())
56 {
57- emit updateOperationDetails(container_id, package_name, output);
58+ emit updateOperationDetails(container_id, output);
59 process_output_ += output;
60 }
61 });
62@@ -167,7 +167,7 @@
63 auto stderr = process_.readAllStandardError();
64 emit error(PACKAGE_INSTALLATION_FAILED.arg(package_name), stderr.isEmpty() ? process_output_ : stderr);
65 }
66- emit operationFinished(container_id, package_name);
67+ emit operationFinished(container_id);
68 });
69
70 process_.start(libertine_container_manager_tool, QStringList{"install-package", "-i", container_id, "-p", package_name, "--no-dialog"});
71@@ -181,7 +181,7 @@
72 auto output = process_.readAllStandardOutput();
73 if (!output.isEmpty())
74 {
75- emit updateOperationDetails(container_id, package_name, output);
76+ emit updateOperationDetails(container_id, output);
77 process_output_ += output;
78 }
79 });
80@@ -191,7 +191,7 @@
81 {
82 emit error(PACKAGE_INSTALLATION_FAILED.arg(package_name), readAllStdOutOrStdErr(process_, process_output_));
83 }
84- emit operationFinished(container_id, package_name);
85+ emit operationFinished(container_id);
86 });
87
88 process_.start(libertine_container_manager_tool, QStringList{"remove-package", "-i", container_id, "-p", package_name, "--no-dialog"});
89@@ -239,7 +239,7 @@
90 auto output = process_.readAllStandardOutput();
91 if (!output.isEmpty())
92 {
93- emit updateOperationDetails(container_id, "", output);
94+ emit updateOperationDetails(container_id, output);
95 }
96 });
97 connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
98@@ -248,7 +248,7 @@
99 {
100 emit error(CONTAINER_UPDATE_FAILED.arg(container_name), readAllStdOutOrStdErr(process_));
101 }
102- emit operationFinished(container_id, "");
103+ emit operationFinished(container_id);
104 });
105
106 process_.start(libertine_container_manager_tool, QStringList{"update", "-i", container_id});
107@@ -281,7 +281,7 @@
108 auto output = process_.readAllStandardOutput();
109 if (!output.isEmpty())
110 {
111- emit updateOperationDetails(container_id, "", output);
112+ emit updateOperationDetails(container_id, output);
113 process_output_ += output;
114 }
115 });
116@@ -295,7 +295,7 @@
117 {
118 emit finishedConfigure();
119 }
120- emit operationFinished(container_id, "");
121+ emit operationFinished(container_id);
122 });
123
124 QStringList args{"configure", "-i", container_id};
125
126=== modified file 'common/ContainerManager.h'
127--- common/ContainerManager.h 2016-09-26 18:17:07 +0000
128+++ common/ContainerManager.h 2017-03-01 18:38:22 +0000
129@@ -3,7 +3,7 @@
130 * @brief Threaded Libertine container manager
131 */
132 /*
133- * Copyright 2015-2016 Canonical Ltd
134+ * Copyright 2015-2017 Canonical Ltd
135 *
136 * Libertine is free software: you can redistribute it and/or modify it under
137 * the terms of the GNU General Public License, version 3, as published by the
138@@ -47,7 +47,7 @@
139 Q_INVOKABLE void setDefaultContainer(const QString& container_id, bool should_clear);
140
141 public slots:
142- void packageOperationInteraction(const QString& input);
143+ void containerOperationInteraction(const QString& input);
144
145 private:
146 QProcess process_;
147@@ -67,8 +67,8 @@
148 void finishedSearch(QList<QString> packageList);
149 void finishedCommand(QString const& command_output);
150 void finishedConfigure();
151- void updateOperationDetails(const QString& container_id, const QString& package_name, const QString& details);
152- void operationFinished(const QString& container_id, const QString& package_name);
153+ void updateOperationDetails(const QString& container_id, const QString& details);
154+ void operationFinished(const QString& container_id);
155
156 void error(const QString& short_description, const QString& details);
157 };
158
159=== renamed file 'common/PackageOperationDetails.cpp' => 'common/ContainerOperationDetails.cpp'
160--- common/PackageOperationDetails.cpp 2016-09-26 18:17:07 +0000
161+++ common/ContainerOperationDetails.cpp 2017-03-01 18:38:22 +0000
162@@ -1,5 +1,5 @@
163 /*
164- * Copyright 2016 Canonical Ltd
165+ * Copyright 2016-2017 Canonical Ltd
166 *
167 * Libertine is free software: you can redistribute it and/or modify it under
168 * the terms of the GNU General Public License, version 3, as published by the
169@@ -14,65 +14,33 @@
170 */
171
172
173-#include "PackageOperationDetails.h"
174-
175-namespace
176-{
177-static bool has_key(QMap<QString, QMap<QString, QString> > details,
178- QString const& container_id, QString const& package_id)
179-{
180- return details.constFind(container_id) != details.constEnd() &&
181- details[container_id].constFind(package_id) != details[container_id].constEnd();
182-}
183-}
184-
185-
186-PackageOperationDetails::
187-PackageOperationDetails(QObject* parent)
188+#include "ContainerOperationDetails.h"
189+
190+ContainerOperationDetails::
191+ContainerOperationDetails(QObject* parent)
192 : QObject(parent)
193 {
194 }
195
196
197-QString PackageOperationDetails::
198-details(QString const& container_id, QString const& package_id) const
199-{
200- if (has_key(details_, container_id, package_id))
201- {
202- return details_[container_id][package_id];
203- }
204- return "";
205-}
206-
207-
208-void PackageOperationDetails::
209-clear(QString const& container_id, QString const& package_id)
210-{
211- if (has_key(details_, container_id, package_id))
212- {
213- details_[container_id].remove(package_id);
214- if (details_[container_id].empty())
215- {
216- details_.remove(container_id);
217- }
218- }
219-}
220-
221-
222-void PackageOperationDetails::
223-update(QString const& container_id, QString const& package_id, QString const& new_details)
224-{
225- if (has_key(details_, container_id, package_id))
226- {
227- details_[container_id][package_id] += new_details;
228- }
229- else
230- {
231- if (details_.constFind(container_id) == details_.constEnd())
232- {
233- details_[container_id] = QMap<QString, QString>{{package_id, new_details}};
234- }
235- }
236-
237- emit updated(container_id, package_id, new_details);
238+QString ContainerOperationDetails::
239+details(QString const& container_id) const
240+{
241+ return details_.value(container_id);
242+}
243+
244+
245+void ContainerOperationDetails::
246+clear(QString const& container_id)
247+{
248+ details_.remove(container_id);
249+}
250+
251+
252+void ContainerOperationDetails::
253+update(QString const& container_id, QString const& new_details)
254+{
255+ details_[container_id] += new_details;
256+
257+ emit updated(container_id, new_details);
258 }
259
260=== renamed file 'common/PackageOperationDetails.h' => 'common/ContainerOperationDetails.h'
261--- common/PackageOperationDetails.h 2016-09-26 18:17:07 +0000
262+++ common/ContainerOperationDetails.h 2017-03-01 18:38:22 +0000
263@@ -1,5 +1,5 @@
264 /*
265- * Copyright 2016 Canonical Ltd
266+ * Copyright 2016-2017 Canonical Ltd
267 *
268 * Libertine is free software: you can redistribute it and/or modify it under
269 * the terms of the GNU General Public License, version 3, as published by the
270@@ -19,25 +19,25 @@
271 #include <QMap>
272
273
274-class PackageOperationDetails : public QObject
275+class ContainerOperationDetails : public QObject
276 {
277 Q_OBJECT
278
279 public:
280- explicit PackageOperationDetails(QObject* parent = nullptr);
281- virtual ~PackageOperationDetails() = default;
282+ explicit ContainerOperationDetails(QObject* parent = nullptr);
283+ virtual ~ContainerOperationDetails() = default;
284
285- Q_INVOKABLE QString details(QString const& container_id, QString const& package_id) const;
286- Q_INVOKABLE void clear(QString const& container_id, QString const& package_id);
287+ Q_INVOKABLE QString details(QString const& container_id) const;
288+ Q_INVOKABLE void clear(QString const& container_id);
289
290 public slots:
291- void update(QString const& container_id, QString const& package_id, QString const& new_details);
292+ void update(QString const& container_id, QString const& new_details);
293
294 signals:
295- void updated(QString const& container_id, QString const& package_id, QString const& new_details);
296+ void updated(QString const& container_id, QString const& new_details);
297 void send(QString const& input);
298 void error(QString const& short_description, QString const& details);
299
300 private:
301- QMap<QString, QMap<QString, QString> > details_;
302+ QMap<QString, QString> details_;
303 };
304
305=== modified file 'common/ContainersConfig.cpp'
306--- common/ContainersConfig.cpp 2017-02-16 22:00:46 +0000
307+++ common/ContainersConfig.cpp 2017-03-01 18:38:22 +0000
308@@ -22,14 +22,16 @@
309 QString translate_status(QString const& original)
310 {
311 static const QMap<QString, QString> translations{
312- {"new", QObject::tr("new")},
313- {"installing", QObject::tr("installing")},
314- {"installed", QObject::tr("installed")},
315- {"ready", QObject::tr("ready")},
316- {"updating", QObject::tr("updating")},
317- {"removing", QObject::tr("removing")},
318- {"removed", QObject::tr("removed")},
319- {"unknown", QObject::tr("unknown")}
320+ {"new", QObject::tr("new")},
321+ {"installing", QObject::tr("installing")},
322+ {"installed", QObject::tr("installed")},
323+ {"installing packages", QObject::tr("installing packages")},
324+ {"removing packages", QObject::tr("removing packages")},
325+ {"ready", QObject::tr("ready")},
326+ {"updating", QObject::tr("updating")},
327+ {"removing", QObject::tr("removing")},
328+ {"removed", QObject::tr("removed")},
329+ {"unknown", QObject::tr("unknown")}
330 };
331
332 return translations.value(original, "");
333
334=== modified file 'libertine/libertine.cpp'
335--- libertine/libertine.cpp 2017-02-16 17:32:48 +0000
336+++ libertine/libertine.cpp 2017-03-01 18:38:22 +0000
337@@ -3,7 +3,7 @@
338 * @brief Libertine app wrapper
339 */
340 /*
341- * Copyright 2015-2016 Canonical Ltd
342+ * Copyright 2015-2017 Canonical Ltd
343 *
344 * Libertine is free software: you can redistribute it and/or modify it under
345 * the terms of the GNU General Public License, version 3, as published by the
346@@ -24,7 +24,7 @@
347 #include "common/ContainerBindMountsList.h"
348 #include "common/ContainerConfigList.h"
349 #include "common/LibertineConfig.h"
350-#include "common/PackageOperationDetails.h"
351+#include "common/ContainerOperationDetails.h"
352 #include "libertine/config.h"
353 #include <cstdlib>
354 #include <QtCore/QCommandLineParser>
355@@ -91,7 +91,7 @@
356 , main_qml_source_file_(find_main_qml_source_file())
357 {
358 qmlRegisterType<ContainerManagerWorker>("Libertine", 1, 0, "ContainerManagerWorker");
359- qmlRegisterType<PackageOperationDetails>("Libertine", 1, 0, "PackageOperationDetails");
360+ qmlRegisterType<ContainerOperationDetails>("Libertine", 1, 0, "ContainerOperationDetails");
361
362 setApplicationName(LIBERTINE_APPLICATION_NAME);
363 setApplicationVersion(LIBERTINE_VERSION);
364@@ -116,7 +116,7 @@
365 container_apps_ = new ContainerAppsList(containers_, this);
366 container_archives_ = new ContainerArchivesList(containers_, this);
367 container_bind_mounts_ = new ContainerBindMountsList(containers_, this);
368- package_operation_details_ = new PackageOperationDetails(this);
369+ container_operation_details_ = new ContainerOperationDetails(this);
370
371 initialize_view();
372 view_.show();
373@@ -144,7 +144,7 @@
374 ctxt->setContextProperty("containerAppsList", container_apps_);
375 ctxt->setContextProperty("containerArchivesList", container_archives_);
376 ctxt->setContextProperty("containerBindMountsList", container_bind_mounts_);
377- ctxt->setContextProperty("packageOperationDetails", package_operation_details_);
378+ ctxt->setContextProperty("containerOperationDetails", container_operation_details_);
379
380 view_.setSource(QUrl::fromLocalFile(main_qml_source_file_));
381 connect(view_.engine(), SIGNAL(quit()), SLOT(quit()));
382
383=== modified file 'libertine/libertine.h'
384--- libertine/libertine.h 2017-02-16 17:32:48 +0000
385+++ libertine/libertine.h 2017-03-01 18:38:22 +0000
386@@ -3,7 +3,7 @@
387 * @brief Libertine app wrapper
388 */
389 /*
390- * Copyright 2015 Canonical Ltd
391+ * Copyright 2015-2017 Canonical Ltd
392 *
393 * Libertine is free software: you can redistribute it and/or modify it under
394 * the terms of the GNU General Public License, version 3, as published by the
395@@ -31,7 +31,7 @@
396 class ContainerAppsList;
397 class ContainerArchivesList;
398 class ContainerBindMountsList;
399-class PackageOperationDetails;
400+class ContainerOperationDetails;
401
402
403 class Libertine
404@@ -59,7 +59,7 @@
405 ContainerAppsList* container_apps_;
406 ContainerArchivesList* container_archives_;
407 ContainerBindMountsList* container_bind_mounts_;
408- PackageOperationDetails* package_operation_details_;
409+ ContainerOperationDetails* container_operation_details_;
410 QQuickView view_;
411 };
412
413
414=== modified file 'qml/common/ContainerEditView.qml'
415--- qml/common/ContainerEditView.qml 2017-02-14 19:53:13 +0000
416+++ qml/common/ContainerEditView.qml 2017-03-01 18:38:22 +0000
417@@ -260,10 +260,10 @@
418
419 function operationSetup() {
420 var worker = Qt.createComponent("ContainerManager.qml").createObject(parent)
421- worker.error.connect(packageOperationDetails.error)
422- worker.updateOperationDetails.connect(packageOperationDetails.update)
423- packageOperationDetails.send.connect(worker.packageOperationInteraction)
424- worker.operationFinished.connect(packageOperationDetails.clear)
425+ worker.error.connect(containerOperationDetails.error)
426+ worker.updateOperationDetails.connect(containerOperationDetails.update)
427+ containerOperationDetails.send.connect(worker.containerOperationInteraction)
428+ worker.operationFinished.connect(containerOperationDetails.clear)
429 return worker
430 }
431
432
433=== modified file 'qml/common/ContainerInfoView.qml'
434--- qml/common/ContainerInfoView.qml 2016-09-27 14:20:23 +0000
435+++ qml/common/ContainerInfoView.qml 2017-03-01 18:38:22 +0000
436@@ -3,7 +3,7 @@
437 * @brief Container info view
438 */
439 /*
440- * Copyright 2016 Canonical Ltd
441+ * Copyright 2016-2017 Canonical Ltd
442 *
443 * Libertine is free software: you can redistribute it and/or modify it under
444 * the terms of the GNU General Public License, version 3, as published by the
445@@ -38,6 +38,8 @@
446 property bool showDetails: false
447 property string operationDetails: ""
448
449+ signal sendOperationInteraction(string text)
450+
451 Flickable {
452 anchors {
453 topMargin: pageHeader.height
454@@ -103,11 +105,25 @@
455 anchors.left: parent.left
456 anchors.right: parent.right
457 height: Math.max(containerInfoView.height - pageHeader.height - idView.height - nameView.height - distroView.height
458- - statusView.height - showDetailsView.height,
459- units.gu(35))
460+ - statusView.height - showDetailsView.height - operationInputField.height,
461+ units.gu(30))
462 readOnly: true
463 text: operationDetails
464 }
465+
466+ TextField {
467+ id: operationInputField
468+ visible: showDetails && (statusText === "installing packages" ||
469+ statusText === "removing packages" ||
470+ statusText === "updating")
471+ anchors.left: parent.left
472+ anchors.right: parent.right
473+ text: ""
474+ onAccepted: {
475+ sendOperationInteraction(text)
476+ text = ""
477+ }
478+ }
479 }
480 }
481
482@@ -115,21 +131,23 @@
483 containerConfigList.configChanged.connect(reloadStatus)
484
485 var worker = Qt.createComponent("ContainerManager.qml").createObject(parent)
486- operationDetails = packageOperationDetails.details(currentContainer, "")
487- packageOperationDetails.updated.connect(updateDetails)
488+ operationDetails = containerOperationDetails.details(currentContainer)
489+ containerOperationDetails.updated.connect(updateDetails)
490
491 operationDetailsView.cursorPosition = operationDetailsView.length
492 if (operationDetails !== "") {
493 showDetails = !showDetails
494 }
495+ sendOperationInteraction.connect(containerOperationDetails.send)
496 }
497
498 Component.onDestruction: {
499 containerConfigList.configChanged.disconnect(reloadStatus)
500+ sendOperationInteraction.disconnect(containerOperationDetails.send)
501 }
502
503- function updateDetails(container_id, package_name, details) {
504- if (container_id === currentContainer && package_name === "") {
505+ function updateDetails(container_id, details) {
506+ if (container_id === currentContainer) {
507 operationDetails += details
508 operationDetailsView.cursorPosition = operationDetailsView.length
509 }
510
511=== modified file 'qml/common/ContainerOptionsDialog.qml'
512--- qml/common/ContainerOptionsDialog.qml 2016-09-27 14:20:23 +0000
513+++ qml/common/ContainerOptionsDialog.qml 2017-03-01 18:38:22 +0000
514@@ -3,7 +3,7 @@
515 * @brief Libertine container options dialog
516 */
517 /*
518- * Copyright 2016 Canonical Ltd
519+ * Copyright 2016-2017 Canonical Ltd
520 *
521 * Libertine is free software: you can redistribute it and/or modify it under
522 * the terms of the GNU General Public License, version 3, as published by the
523@@ -99,9 +99,9 @@
524 var container_id = containerConfigList.addNewContainer("lxc", containerNameInput.text)
525 var worker = Qt.createComponent("ContainerManager.qml").createObject(parent)
526
527- worker.updateOperationDetails.connect(packageOperationDetails.update)
528- worker.operationFinished.connect(packageOperationDetails.clear)
529- worker.error.connect(packageOperationDetails.error)
530+ worker.updateOperationDetails.connect(containerOperationDetails.update)
531+ worker.operationFinished.connect(containerOperationDetails.clear)
532+ worker.error.connect(containerOperationDetails.error)
533
534 worker.createContainer(container_id,
535 containerConfigList.getContainerName(container_id),
536
537=== modified file 'qml/common/ContainersList.qml'
538--- qml/common/ContainersList.qml 2017-02-07 09:21:41 +0000
539+++ qml/common/ContainersList.qml 2017-03-01 18:38:22 +0000
540@@ -40,7 +40,7 @@
541
542 function edit(id, status) {
543 if (status === "removing") {
544- packageOperationDetails.error(i18n.tr("Container Unavailable"), i18n.tr("Container is being destroyed and is no longer editable."))
545+ containerOperationDetails.error(i18n.tr("Container Unavailable"), i18n.tr("Container is being destroyed and is no longer editable."))
546 return
547 }
548 currentContainer = id
549@@ -65,7 +65,10 @@
550 rightMargin: units.gu(2)
551 }
552 visible: installStatus === i18n.tr("installing") ||
553- installStatus === i18n.tr("removing")
554+ installStatus === i18n.tr("removing") ||
555+ installStatus === i18n.tr("installing packages") ||
556+ installStatus === i18n.tr("removing packages") ||
557+ installStatus === i18n.tr("updating")
558 running: containerActivity.visible
559 }
560
561@@ -79,7 +82,7 @@
562 description: i18n.tr("Delete Container")
563 onTriggered: {
564 var worker = Qt.createComponent("../common/ContainerManager.qml").createObject(parent)
565- worker.error.connect(packageOperationDetails.error)
566+ worker.error.connect(containerOperationDetails.error)
567 worker.destroyContainer(containerId)
568 }
569 }
570@@ -164,8 +167,8 @@
571
572 if (currentContainer && !containerConfigList.getContainerStatus(currentContainer)) {
573 currentContainer = ""
574- packageOperationDetails.error(i18n.tr("Container Unavailable"),
575- i18n.tr("This container has been destroyed and is no longer valid. You have been returned to the containers overview."))
576+ containerOperationDetails.error(i18n.tr("Container Unavailable"),
577+ i18n.tr("This container has been destroyed and is no longer valid. You have been returned to the containers overview."))
578 }
579 }
580 }
581
582=== modified file 'qml/common/ExtraArchivesView.qml'
583--- qml/common/ExtraArchivesView.qml 2017-02-13 20:28:16 +0000
584+++ qml/common/ExtraArchivesView.qml 2017-03-01 18:38:22 +0000
585@@ -97,7 +97,7 @@
586 function deleteArchive(archive) {
587 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)
588 worker.finishedConfigure.connect(finishedConfigure)
589- worker.error.connect(packageOperationDetails.error)
590+ worker.error.connect(containerOperationDetails.error)
591 worker.configureContainer(currentContainer, containerConfigList.getContainerName(currentContainer), ["--archive", "remove", "--archive-name", "\"" + archive + "\""])
592 }
593
594
595=== modified file 'qml/common/ExtraBindMountsView.qml'
596--- qml/common/ExtraBindMountsView.qml 2017-02-22 20:19:22 +0000
597+++ qml/common/ExtraBindMountsView.qml 2017-03-01 18:38:22 +0000
598@@ -85,13 +85,13 @@
599
600 function deleteBindMount(mount) {
601 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)
602- worker.error.connect(packageOperationDetails.error)
603+ worker.error.connect(containerOperationDetails.error)
604 worker.configureContainer(currentContainer, containerConfigList.getContainerName(currentContainer), ["--bind-mount", "remove", "--mount-path", "\"" + mount + "\""])
605 }
606
607 function addBindMount(mount) {
608 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)
609- worker.error.connect(packageOperationDetails.error)
610+ worker.error.connect(containerOperationDetails.error)
611 worker.configureContainer(currentContainer, containerConfigList.getContainerName(currentContainer), ["--bind-mount", "add", "--mount-path", "\"" + mount + "\""])
612 }
613
614
615=== modified file 'qml/common/ManageContainer.qml'
616--- qml/common/ManageContainer.qml 2017-02-16 19:57:39 +0000
617+++ qml/common/ManageContainer.qml 2017-03-01 18:38:22 +0000
618@@ -3,7 +3,7 @@
619 * @brief Libertine manage container view
620 */
621 /*
622- * Copyright 2016 Canonical Ltd
623+ * Copyright 2016-2017 Canonical Ltd
624 *
625 * Libertine is free software: you can redistribute it and/or modify it under
626 * the terms of the GNU General Public License, version 3, as published by the
627@@ -52,8 +52,8 @@
628 onClicked: {
629 var worker = Qt.createComponent("ContainerManager.qml").createObject(parent)
630
631- worker.updateOperationDetails.connect(packageOperationDetails.update)
632- worker.operationFinished.connect(packageOperationDetails.clear)
633+ worker.updateOperationDetails.connect(containerOperationDetails.update)
634+ worker.operationFinished.connect(containerOperationDetails.clear)
635
636 if (checked) {
637 worker.configureContainer(currentContainer,
638@@ -115,7 +115,7 @@
639 checked: isDefaultContainer
640 onClicked: {
641 var worker = Qt.createComponent("ContainerManager.qml").createObject(parent)
642- worker.error.connect(packageOperationDetails.error)
643+ worker.error.connect(containerOperationDetails.error)
644
645 var fallback = checked
646 worker.error.connect(function() {
647@@ -141,10 +141,10 @@
648
649 function updateContainer() {
650 var worker = Qt.createComponent("ContainerManager.qml").createObject(parent)
651- worker.error.connect(packageOperationDetails.error);
652+ worker.error.connect(containerOperationDetails.error);
653
654- worker.updateOperationDetails.connect(packageOperationDetails.update)
655- worker.operationFinished.connect(packageOperationDetails.clear)
656+ worker.updateOperationDetails.connect(containerOperationDetails.update)
657+ worker.operationFinished.connect(containerOperationDetails.clear)
658
659 worker.updateContainer(currentContainer, containerConfigList.getContainerName(currentContainer))
660 }
661
662=== modified file 'qml/common/PackageInfoView.qml'
663--- qml/common/PackageInfoView.qml 2016-10-17 14:14:22 +0000
664+++ qml/common/PackageInfoView.qml 2017-03-01 18:38:22 +0000
665@@ -3,7 +3,7 @@
666 * @brief Container package info view
667 */
668 /*
669- * Copyright 2016 Canonical Ltd
670+ * Copyright 2016-2017 Canonical Ltd
671 *
672 * Libertine is free software: you can redistribute it and/or modify it under
673 * the terms of the GNU General Public License, version 3, as published by the
674@@ -33,11 +33,7 @@
675 property var currentPackage: null
676 property var statusText: containerConfigList.getAppStatus(currentContainer, currentPackage)
677 property var packageVersionText: i18n.tr("Obtaining package version…")
678- property string currentDetails: ""
679 property var worker: null
680- property bool showDetails: false
681-
682- signal sendOperationInteraction(string text)
683
684 Flickable {
685 anchors {
686@@ -74,37 +70,15 @@
687 id: showDetailsView
688 control: Button {
689 text: enabled ?
690- showDetails ? i18n.tr('Hide') : i18n.tr('Show')
691+ i18n.tr('View')
692 : i18n.tr('None')
693- enabled: currentDetails != ""
694+ enabled: statusText === 'installing' || statusText === 'removing'
695 onClicked: {
696- showDetails = !showDetails
697+ pageStack.addPageToNextColumn(packageInfoView, Qt.resolvedUrl("ContainerInfoView.qml"), {currentContainer: currentContainer})
698 }
699 }
700 text: i18n.tr("Operation details")
701 }
702-
703- TextArea {
704- id: packageDetailsView
705- visible: showDetails
706- anchors.left: parent.left
707- anchors.right: parent.right
708- height: Math.max(packageInfoView.height - pageHeader.height - packageListItem.height - showDetailsView.height - statusListItem.height - 35, units.gu(35))
709- readOnly: true
710- text: currentDetails
711- }
712-
713- TextField {
714- id: packageInputField
715- visible: showDetails && (statusText === "installing" || statusText === "removing")
716- anchors.left: parent.left
717- anchors.right: parent.right
718- text: ""
719- onAccepted: {
720- sendOperationInteraction(text)
721- text = ""
722- }
723- }
724 }
725 }
726
727@@ -113,32 +87,12 @@
728 var command = "apt-cache policy " + currentPackage
729 var worker = Qt.createComponent("ContainerManager.qml").createObject(parent)
730 worker.finishedCommand.connect(getPackageVersion)
731-
732- currentDetails = packageOperationDetails.details(currentContainer, currentPackage)
733- packageDetailsView.cursorPosition = packageDetailsView.length
734- if (currentDetails != "") {
735- showDetails = !showDetails
736- }
737-
738- packageOperationDetails.updated.connect(updatePackageDetails)
739- sendOperationInteraction.connect(packageOperationDetails.send)
740-
741 worker.error.connect(onError)
742- worker.error.connect(packageOperationDetails.error)
743 worker.runCommand(currentContainer, containerConfigList.getContainerName(currentContainer), command)
744 }
745
746 Component.onDestruction: {
747 containerConfigList.configChanged.disconnect(reloadStatus)
748- packageOperationDetails.updated.disconnect(updatePackageDetails)
749- sendOperationInteraction.disconnect(packageOperationDetails.send)
750- }
751-
752- function updatePackageDetails(container_id, package_name, details) {
753- if (container_id === currentContainer && package_name === currentPackage) {
754- currentDetails += details
755- packageDetailsView.cursorPosition = packageDetailsView.length
756- }
757 }
758
759 function reloadStatus() {
760
761=== modified file 'qml/common/SearchResultsView.qml'
762--- qml/common/SearchResultsView.qml 2017-02-07 10:57:50 +0000
763+++ qml/common/SearchResultsView.qml 2017-03-01 18:38:22 +0000
764@@ -122,7 +122,7 @@
765
766 var worker = Qt.createComponent("ContainerManager.qml").createObject(parent)
767 worker.finishedSearch.connect(finishedSearch)
768- worker.error.connect(packageOperationDetails.error)
769+ worker.error.connect(containerOperationDetails.error)
770
771 worker.searchPackageCache(currentContainer, query)
772 }
773
774=== modified file 'qml/gui/libertine.qml'
775--- qml/gui/libertine.qml 2017-02-07 09:21:41 +0000
776+++ qml/gui/libertine.qml 2017-03-01 18:38:22 +0000
777@@ -32,7 +32,7 @@
778 signal error(string short_description, string details)
779
780 Component.onCompleted: {
781- packageOperationDetails.error.connect(error)
782+ containerOperationDetails.error.connect(error)
783 Qt.createComponent("../common/ContainerManager.qml").createObject(mainView).fixIntegrity()
784 }
785
786
787=== modified file 'system-settings-plugin/plugin.cpp'
788--- system-settings-plugin/plugin.cpp 2017-02-08 14:57:34 +0000
789+++ system-settings-plugin/plugin.cpp 2017-03-01 18:38:22 +0000
790@@ -21,8 +21,8 @@
791 #include "common/ContainerAppsList.h"
792 #include "common/ContainerArchivesList.h"
793 #include "common/ContainerConfigList.h"
794+#include "common/ContainerOperationDetails.h"
795 #include "common/LibertineConfig.h"
796-#include "common/PackageOperationDetails.h"
797 #include <memory>
798 #include <QQmlEngine>
799 #include <QQmlContext>
800@@ -47,7 +47,7 @@
801 ContainerConfigList* containers_;
802 ContainerAppsList* container_apps_;
803 ContainerArchivesList* container_archives_;
804- PackageOperationDetails* package_operation_details_;
805+ ContainerOperationDetails* container_operation_details_;
806 QFileSystemWatcher watcher_;
807
808 private slots:
809@@ -61,11 +61,11 @@
810 , containers_(new ContainerConfigList(config_.get(), this))
811 , container_apps_(new ContainerAppsList(containers_, this))
812 , container_archives_(new ContainerArchivesList(containers_, this))
813- , package_operation_details_(new PackageOperationDetails(this))
814+ , container_operation_details_(new ContainerOperationDetails(this))
815 , watcher_({config_->containers_config_file_name()})
816 {
817 qmlRegisterType<ContainerManagerWorker>("Libertine", 1, 0, "ContainerManagerWorker");
818- qmlRegisterType<PackageOperationDetails>("Libertine", 1, 0, "PackageOperationDetails");
819+ qmlRegisterType<ContainerOperationDetails>("Libertine", 1, 0, "ContainerOperationDetails");
820
821 connect(&watcher_, &QFileSystemWatcher::fileChanged, this, &LibertineItem::reload_config);
822 }
823@@ -77,7 +77,7 @@
824 ctxt->setContextProperty("containerConfigList", containers_);
825 ctxt->setContextProperty("containerAppsList", container_apps_);
826 ctxt->setContextProperty("containerArchivesList", container_archives_);
827- ctxt->setContextProperty("packageOperationDetails", package_operation_details_);
828+ ctxt->setContextProperty("containerOperationDetails", container_operation_details_);
829
830 auto component = new QQmlComponent(engine,
831 QUrl(LIBERTINE_PLUGIN_QML_DIR "/MainSettingsPage.qml"),
832
833=== modified file 'tools/libertine-container-manager'
834--- tools/libertine-container-manager 2017-02-27 21:38:56 +0000
835+++ tools/libertine-container-manager 2017-03-01 18:38:22 +0000
836@@ -160,13 +160,16 @@
837 container = LibertineContainer(container_id, self.containers_config)
838
839 self.containers_config.update_package_install_status(container_id, package, "installing")
840+ self.containers_config.update_container_install_status(container_id, "installing packages")
841 if not container.install_package(args.package, args.no_dialog):
842 libertine.utils.get_logger().error("Package '{}' failed to install in container '{}'"
843 .format(package, container_id))
844 self.containers_config.delete_package(container_id, package)
845+ self.containers_config.update_container_install_status(args.id, "ready")
846 sys.exit(1)
847
848 self.containers_config.update_package_install_status(container_id, package, "installed")
849+ self.containers_config.update_container_install_status(args.id, "ready")
850
851 libertine.utils.refresh_libertine_scope()
852
853@@ -191,11 +194,14 @@
854 libertine.utils.get_logger().error("Package \'%s\' is not installed." % args.package)
855 sys.exit(1)
856
857+ self.containers_config.update_container_install_status(container_id, "removing packages")
858 if not self.remove_package_by_name(container_id, args.package, args.no_dialog):
859 libertine.utils.get_logger().error("Package '{}' failed to be removed from container '{}'"
860 .format(args.package, container_id))
861+ self.containers_config.update_container_install_status(args.id, "ready")
862 sys.exit(1)
863
864+ self.containers_config.update_container_install_status(args.id, "ready")
865 libertine.utils.refresh_libertine_scope()
866
867 def search_cache(self, args):

Subscribers

People subscribed via source and target branches