on xenial help sign in
fixes for the spinner
9ae5a0eLukáš Tinkl
plugins/Ubuntu/SystemImage/SystemImage.cpp+21−1
@@ -38,7 +38,8 @@ SystemImage::SystemImage(QObject *parent)
38 this, SLOT(onUpdateFailed(int,QString)));
38 this, SLOT(onUpdateFailed(int,QString)));
39 QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("Applied"),
39 QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("Applied"),
40 this, SLOT(onUpdateApplied(bool)));
40 this, SLOT(onUpdateApplied(bool)));
41−
41+ QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("Rebooting"),
42+ this, SLOT(onRebooting(bool)));
42 QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("UpdateProgress"),
43 QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("UpdateProgress"),
43 this, SLOT(onUpdateProgress(int,double)));
44 this, SLOT(onUpdateProgress(int,double)));
44}
45}
@@ -54,6 +55,8 @@ void SystemImage::checkForUpdate()
54void SystemImage::applyUpdate()
55void SystemImage::applyUpdate()
55{
56{
56 qDebug() << "!!! Applying update";
57 qDebug() << "!!! Applying update";
58+ setUpdateApplying(true);
59+
57 const QDBusMessage msg = QDBusMessage::createMethodCall(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE,
60 const QDBusMessage msg = QDBusMessage::createMethodCall(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE,
58 QStringLiteral("ApplyUpdate"));
61 QStringLiteral("ApplyUpdate"));
59 QDBusConnection::systemBus().asyncCall(msg);
62 QDBusConnection::systemBus().asyncCall(msg);
@@ -99,11 +102,13 @@ void SystemImage::onUpdateFailed(int consecutive_failure_count, const QString &l
99{
102{
100 Q_UNUSED(consecutive_failure_count)
103 Q_UNUSED(consecutive_failure_count)
101 qWarning() << Q_FUNC_INFO << "System Update failed:" << last_reason;
104 qWarning() << Q_FUNC_INFO << "System Update failed:" << last_reason;
105+ setUpdateApplying(false);
102}
106}
103
107
104void SystemImage::onUpdateApplied(bool applied)
108void SystemImage::onUpdateApplied(bool applied)
105{
109{
106 qDebug() << Q_FUNC_INFO << "System Update applied with status:" << applied;
110 qDebug() << Q_FUNC_INFO << "System Update applied with status:" << applied;
111+ setUpdateApplying(false);
107 if (applied) {
112 if (applied) {
108 resetUpdateStatus();
113 resetUpdateStatus();
109 Q_EMIT updateAvailableStatus();
114 Q_EMIT updateAvailableStatus();
@@ -115,9 +120,24 @@ void SystemImage::onUpdateProgress(int percentage, double eta)
115 qDebug() << "!!! Download progress:" << percentage << "%, ETA seconds:" << eta;
120 qDebug() << "!!! Download progress:" << percentage << "%, ETA seconds:" << eta;
116}
121}
117
122
123+void SystemImage::onRebooting(bool status)
124+{
125+ setUpdateApplying(false);
126+ qDebug() << "!!! Rebooting:" << status;
127+}
128+
129+void SystemImage::setUpdateApplying(bool status)
130+{
131+ if (status != m_updateApplying) {
132+ m_updateApplying = status;
133+ Q_EMIT updateApplyingChanged();
134+ }
135+}
136+
118void SystemImage::resetUpdateStatus()
137void SystemImage::resetUpdateStatus()
119{
138{
120 m_updateAvailable = false;
139 m_updateAvailable = false;
140+ m_updateApplying = false;
121 m_downloading = false;
141 m_downloading = false;
122 m_downloaded = false;
142 m_downloaded = false;
123 m_availableVersion.clear();
143 m_availableVersion.clear();
plugins/Ubuntu/SystemImage/SystemImage.h+8−2
@@ -29,7 +29,7 @@ class SystemImage : public QObject
29 Q_PROPERTY(bool updateDownloading READ updateDownloading NOTIFY updateAvailableStatus)
29 Q_PROPERTY(bool updateDownloading READ updateDownloading NOTIFY updateAvailableStatus)
30 Q_PROPERTY(QString availableVersion READ availableVersion NOTIFY updateAvailableStatus)
30 Q_PROPERTY(QString availableVersion READ availableVersion NOTIFY updateAvailableStatus)
31 Q_PROPERTY(QString updateSize READ updateSize NOTIFY updateAvailableStatus)
31 Q_PROPERTY(QString updateSize READ updateSize NOTIFY updateAvailableStatus)
32−
32+ Q_PROPERTY(bool updateApplying READ updateApplying NOTIFY updateApplyingChanged)
33 Q_PROPERTY(bool updateDownloaded READ updateDownloaded NOTIFY updateDownloadedChanged)
33 Q_PROPERTY(bool updateDownloaded READ updateDownloaded NOTIFY updateDownloadedChanged)
34
34
35public:
35public:
@@ -40,7 +40,7 @@ public:
40 bool updateDownloading() const { return m_downloading; }
40 bool updateDownloading() const { return m_downloading; }
41 QString availableVersion() const { return m_availableVersion; }
41 QString availableVersion() const { return m_availableVersion; }
42 QString updateSize() const { return m_updateSize; }
42 QString updateSize() const { return m_updateSize; }
43−
43+ bool updateApplying() const { return m_updateApplying; }
44 bool updateDownloaded() const { return m_downloaded; }
44 bool updateDownloaded() const { return m_downloaded; }
45
45
46public Q_SLOTS:
46public Q_SLOTS:
@@ -55,10 +55,15 @@ private Q_SLOTS:
55 void onUpdateFailed(int consecutive_failure_count, const QString & last_reason);
55 void onUpdateFailed(int consecutive_failure_count, const QString & last_reason);
56 void onUpdateApplied(bool applied);
56 void onUpdateApplied(bool applied);
57 void onUpdateProgress(int percentage, double eta);
57 void onUpdateProgress(int percentage, double eta);
58+ void onRebooting(bool status);
58
59
59Q_SIGNALS:
60Q_SIGNALS:
60 void updateAvailableStatus();
61 void updateAvailableStatus();
61 void updateDownloadedChanged();
62 void updateDownloadedChanged();
63+ void updateApplyingChanged();
64+
65+private Q_SLOTS:
66+ void setUpdateApplying(bool status);
62
67
63private:
68private:
64 void resetUpdateStatus();
69 void resetUpdateStatus();
@@ -66,6 +71,7 @@ private:
66
71
67private:
72private:
68 bool m_updateAvailable = false;
73 bool m_updateAvailable = false;
74+ bool m_updateApplying = false;
69 bool m_downloading = false;
75 bool m_downloading = false;
70 bool m_downloaded = false;
76 bool m_downloaded = false;
71 QString m_availableVersion;
77 QString m_availableVersion;
qml/Wizard/Pages/77-system-update.qml+1−2
@@ -122,7 +122,6 @@ LocalComponents.Page {
122 objectName: "installButton"
122 objectName: "installButton"
123 anchors.fill: parent
123 anchors.fill: parent
124 onClicked: {
124 onClicked: {
125− spinner.running = true;
126 SystemImage.applyUpdate(); // TODO mark the wizard to skip until the finished page for the next boot
125 SystemImage.applyUpdate(); // TODO mark the wizard to skip until the finished page for the next boot
127 }
126 }
128 }
127 }
@@ -141,7 +140,7 @@ LocalComponents.Page {
141 ActivityIndicator {
140 ActivityIndicator {
142 id: spinner
141 id: spinner
143 anchors.centerIn: systemUpdatePage
142 anchors.centerIn: systemUpdatePage
144− running: false
143+ running: SystemImage.updateApplying
145 visible: running
144 visible: running
146 }
145 }
147
146
tests/mocks/Ubuntu/SystemImage/MockSystemImage.cpp+11
@@ -15,6 +15,7 @@
15 */
15 */
16
16
17#include <QDebug>
17#include <QDebug>
18+#include <QTimer>
18
19
19#include "MockSystemImage.h"
20#include "MockSystemImage.h"
20
21
@@ -31,9 +32,19 @@ void MockSystemImage::checkForUpdate()
31void MockSystemImage::applyUpdate()
32void MockSystemImage::applyUpdate()
32{
33{
33 qDebug() << "Applying a fake system update";
34 qDebug() << "Applying a fake system update";
35+ setUpdateApplying(true);
36+ QTimer::singleShot(5000, [this] {setUpdateApplying(false);});
34}
37}
35
38
36void MockSystemImage::factoryReset()
39void MockSystemImage::factoryReset()
37{
40{
38 Q_EMIT resettingDevice();
41 Q_EMIT resettingDevice();
39}
42}
43+
44+void MockSystemImage::setUpdateApplying(bool status)
45+{
46+ if (status != m_updateApplying) {
47+ m_updateApplying = status;
48+ Q_EMIT updateApplyingChanged();
49+ }
50+}
tests/mocks/Ubuntu/SystemImage/MockSystemImage.h+9
@@ -27,6 +27,7 @@ class MockSystemImage : public QObject
27 Q_PROPERTY(bool updateDownloaded READ updateDownloaded CONSTANT)
27 Q_PROPERTY(bool updateDownloaded READ updateDownloaded CONSTANT)
28 Q_PROPERTY(QString availableVersion READ availableVersion CONSTANT)
28 Q_PROPERTY(QString availableVersion READ availableVersion CONSTANT)
29 Q_PROPERTY(QString updateSize READ updateSize CONSTANT)
29 Q_PROPERTY(QString updateSize READ updateSize CONSTANT)
30+ Q_PROPERTY(bool updateApplying READ updateApplying NOTIFY updateApplyingChanged)
30
31
31public:
32public:
32 explicit MockSystemImage(QObject *parent = nullptr);
33 explicit MockSystemImage(QObject *parent = nullptr);
@@ -35,6 +36,7 @@ public:
35 Q_INVOKABLE void applyUpdate();
36 Q_INVOKABLE void applyUpdate();
36 Q_INVOKABLE void factoryReset();
37 Q_INVOKABLE void factoryReset();
37
38
39+ bool updateApplying() const { return m_updateApplying; }
38 // these are const only in mock
40 // these are const only in mock
39 bool updateDownloaded() const { return true; }
41 bool updateDownloaded() const { return true; }
40 QString availableVersion() const { return QStringLiteral("42"); }
42 QString availableVersion() const { return QStringLiteral("42"); }
@@ -42,6 +44,13 @@ public:
42
44
43Q_SIGNALS:
45Q_SIGNALS:
44 void resettingDevice(); // only for mock
46 void resettingDevice(); // only for mock
47+ void updateApplyingChanged();
48+
49+private Q_SLOTS:
50+ void setUpdateApplying(bool status);
51+
52+private:
53+ bool m_updateApplying = false;
45};
54};
46
55
47#endif // MOCK_SYSTEMIMAGE_H
56#endif // MOCK_SYSTEMIMAGE_H