Merge lp:~jonas-drange/ubuntu-system-settings/lp1509022 into lp:ubuntu-system-settings

Proposed by Jonas G. Drange
Status: Merged
Approved by: Ken VanDine
Approved revision: 1637
Merged at revision: 1651
Proposed branch: lp:~jonas-drange/ubuntu-system-settings/lp1509022
Merge into: lp:ubuntu-system-settings
Diff against target: 203 lines (+48/-40)
2 files modified
plugins/system-update/system_update.cpp (+39/-37)
plugins/system-update/system_update.h (+9/-3)
To merge this branch: bzr merge lp:~jonas-drange/ubuntu-system-settings/lp1509022
Reviewer Review Type Date Requested Status
Ken VanDine Approve
PS Jenkins bot continuous-integration Needs Fixing
Review via email: mp+292794@code.launchpad.net

Commit message

add servicewatcher to system image binding

Description of the change

add servicewatcher to system image binding

To post a comment you must log in.
1637. By Jonas G. Drange

-1 to indicate uninitialized target number

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Ken VanDine (ken-vandine) wrote :

Nicely simplified, I like it!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'plugins/system-update/system_update.cpp'
2--- plugins/system-update/system_update.cpp 2016-03-02 17:26:10 +0000
3+++ plugins/system-update/system_update.cpp 2016-04-25 11:52:41 +0000
4@@ -39,11 +39,15 @@
5 SystemUpdate::SystemUpdate(QObject *parent) :
6 QObject(parent),
7 m_currentBuildNumber(-1),
8+ m_targetBuildNumber(-1),
9 m_detailedVersion(),
10 m_lastUpdateDate(),
11 m_downloadMode(-1),
12- m_systemBusConnection (QDBusConnection::systemBus()),
13- m_SystemServiceIface ("com.canonical.SystemImage",
14+ m_systemBusConnection(QDBusConnection::systemBus()),
15+ m_serviceWatcher("com.canonical.SystemImage",
16+ m_systemBusConnection,
17+ QDBusServiceWatcher::WatchForOwnerChange),
18+ m_SystemServiceIface("com.canonical.SystemImage",
19 "/Service",
20 "com.canonical.SystemImage",
21 m_systemBusConnection)
22@@ -52,6 +56,33 @@
23
24 qDBusRegisterMetaType<QMap<QString, QString> >();
25
26+ connect(&m_serviceWatcher,
27+ SIGNAL(serviceOwnerChanged(QString, QString, QString)),
28+ this,
29+ SLOT(slotNameOwnerChanged(QString, QString, QString)));
30+
31+ setUpInterface();
32+}
33+
34+SystemUpdate::~SystemUpdate() {
35+}
36+
37+
38+void SystemUpdate::slotNameOwnerChanged(const QString &name,
39+ const QString &oldOwner,
40+ const QString &newOwner) {
41+ Q_UNUSED (oldOwner);
42+ Q_UNUSED (newOwner);
43+
44+ if (name != "com.canonical.SystemImage")
45+ return;
46+ qWarning() << "got si slot name owner change, setting up...";
47+ if (m_SystemServiceIface.isValid())
48+ setUpInterface();
49+}
50+
51+void SystemUpdate::setUpInterface() {
52+ qWarning() << "setting up the si interface...";
53 connect(&m_SystemServiceIface, SIGNAL(UpdateAvailableStatus(bool, bool, QString, int, QString, QString)),
54 this, SLOT(ProcessAvailableStatus(bool, bool, QString, int, QString, QString)));
55 // signals to forward directly to QML
56@@ -71,9 +102,8 @@
57 this, SLOT(ProcessSettingChanged(QString, QString)));
58 connect(&m_SystemServiceIface, SIGNAL(Rebooting(bool)),
59 this, SIGNAL(rebooting(bool)));
60-}
61
62-SystemUpdate::~SystemUpdate() {
63+ initializeProperties();
64 }
65
66 void SystemUpdate::checkForUpdate() {
67@@ -106,7 +136,8 @@
68 Q_EMIT updateProcessFailed(_("Can't pause current request (can't contact service)"));
69 }
70
71-void SystemUpdate::setCurrentDetailedVersion() {
72+
73+void SystemUpdate::initializeProperties() {
74 QDBusPendingReply<QMap<QString, QString> > reply = m_SystemServiceIface.call("Information");
75 reply.waitForFinished();
76 if (reply.isValid()) {
77@@ -114,6 +145,7 @@
78 m_currentBuildNumber = result["current_build_number"].toInt();
79 m_deviceName = result["device_name"];
80 m_lastUpdateDate = QDateTime::fromString(result["last_update_date"], Qt::ISODate);
81+ m_targetBuildNumber = result["target_build_number"].toInt();
82
83 QMap<QString, QVariant> details;
84 QStringList keyvalue = result["version_detail"].split(",", QString::SkipEmptyParts);
85@@ -130,68 +162,37 @@
86 }
87
88 bool SystemUpdate::checkTarget() {
89- int target = 0;
90- int current = 0;
91- QDBusPendingReply<QMap<QString, QString> > reply = m_SystemServiceIface.call("Information");
92- reply.waitForFinished();
93- if (reply.isValid()) {
94- QMap<QString, QString> result = reply.argumentAt<0>();
95- target = result.value("target_build_number", "0").toInt();
96- current = result.value("current_build_number", "0").toInt();
97- } else {
98- qWarning() << "Error when retrieving version information: " << reply.error();
99- }
100-
101- return target > current;
102+ return m_targetBuildNumber > m_currentBuildNumber;
103 }
104
105 QString SystemUpdate::deviceName() {
106- if (m_deviceName.isNull())
107- setCurrentDetailedVersion();
108-
109 return m_deviceName;
110 }
111
112 QDateTime SystemUpdate::lastUpdateDate() {
113- if (!m_lastUpdateDate.isValid())
114- setCurrentDetailedVersion();
115-
116 return m_lastUpdateDate;
117 }
118
119 int SystemUpdate::currentBuildNumber() {
120- if (m_currentBuildNumber == -1)
121- setCurrentDetailedVersion();
122-
123 return m_currentBuildNumber;
124 }
125
126 QString SystemUpdate::currentUbuntuBuildNumber() {
127- if (!m_detailedVersion.contains("ubuntu"))
128- setCurrentDetailedVersion();
129 QString val = m_detailedVersion.value("ubuntu").toString();
130 return val.isEmpty() ? _("Unavailable") : val;
131 }
132
133 QString SystemUpdate::currentDeviceBuildNumber() {
134- if (!m_detailedVersion.contains("device"))
135- setCurrentDetailedVersion();
136 QString val = m_detailedVersion.value("device").toString();
137 return val.isEmpty() ? _("Unavailable") : val;
138 }
139
140 QString SystemUpdate::currentCustomBuildNumber() {
141- if (!m_detailedVersion.contains("custom"))
142- setCurrentDetailedVersion();
143 QString val = m_detailedVersion.value("custom").toString();
144 return val.isEmpty() ? _("Unavailable") : val;
145 }
146
147 QMap<QString, QVariant> SystemUpdate::detailedVersionDetails() {
148- if (m_detailedVersion.empty()) {
149- setCurrentDetailedVersion();
150- }
151-
152 return m_detailedVersion;
153 }
154
155@@ -242,6 +243,7 @@
156 QString lastUpdateDate,
157 QString errorReason)
158 {
159+ qWarning()<<"ProcessAvailableStatus";
160 update = new Update(this);
161 QString packageName(UBUNTU_PACKAGE_NAME);
162 update->initializeApplication(packageName, "Ubuntu",
163
164=== modified file 'plugins/system-update/system_update.h'
165--- plugins/system-update/system_update.h 2016-03-02 15:23:21 +0000
166+++ plugins/system-update/system_update.h 2016-04-25 11:52:41 +0000
167@@ -24,6 +24,7 @@
168
169 #include <QtDBus>
170 #include <QDBusInterface>
171+#include <QDBusServiceWatcher>
172 #include <QObject>
173 #include <QProcess>
174 #include <QUrl>
175@@ -79,20 +80,25 @@
176
177 private Q_SLOTS:
178 void updateDownloadProgress(int percentage, double eta);
179+ void slotNameOwnerChanged(const QString&, const QString&, const QString&);
180
181 private:
182+ // Synchronously initialize properties from the Information call.
183+ void initializeProperties();
184+ // Sets up connections on the DBus interface.
185+ void setUpInterface();
186+
187 int m_currentBuildNumber;
188+ int m_targetBuildNumber;
189 QMap<QString, QVariant> m_detailedVersion;
190 QDateTime m_lastUpdateDate;
191 int m_downloadMode;
192 QString m_deviceName;
193
194 QDBusConnection m_systemBusConnection;
195- QString m_objectPath;
196+ QDBusServiceWatcher m_serviceWatcher;
197 QDBusInterface m_SystemServiceIface;
198 Update *update;
199-
200- void setCurrentDetailedVersion();
201 };
202
203 }

Subscribers

People subscribed via source and target branches