@@ -1,5 +1,5 @@
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2014-2016 Canonical, Ltd.
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -14,20 +14,99 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17−#include "SystemImage.h"
18#include <QDBusConnection>
17#include <QDBusConnection>
19#include <QDBusPendingCall>
18#include <QDBusPendingCall>
22+#include "SystemImage.h"
24+#define SYSTEMIMAGE_SERVICE QStringLiteral("com.canonical.SystemImage")
25+#define SYSTEMIMAGE_PATH QStringLiteral("/Service")
26+#define SYSTEMIMAGE_IFACE QStringLiteral("com.canonical.SystemImage")
21SystemImage::SystemImage(QObject *parent)
28SystemImage::SystemImage(QObject *parent)
22 : QObject(parent)
29 : QObject(parent)
31+ QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("UpdateAvailableStatus"),
32+ this, SLOT(onUpdateAvailableStatus(bool,bool,QString,int,QString,QString)));
33+ QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("UpdateDownloaded"),
34+ this, SLOT(onUpdateDownloaded(bool)));
35+ QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("UpdateFailed"),
36+ this, SLOT(onUpdateFailed(int,QString)));
37+ QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("Applied"),
38+ this, SLOT(onUpdateApplied(bool)));
41+void SystemImage::checkForUpdate()
43+ const QDBusMessage msg = QDBusMessage::createMethodCall(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE,
44+ QStringLiteral("CheckForUpdate"));
45+ QDBusConnection::systemBus().asyncCall(msg);
48+void SystemImage::applyUpdate()
50+ const QDBusMessage msg = QDBusMessage::createMethodCall(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE,
51+ QStringLiteral("ApplyUpdate"));
52+ QDBusConnection::systemBus().asyncCall(msg);
26void SystemImage::factoryReset()
55void SystemImage::factoryReset()
28− const QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("com.canonical.SystemImage"),
57+ const QDBusMessage msg = QDBusMessage::createMethodCall(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE,
29− QStringLiteral("/Service"),
30− QStringLiteral("com.canonical.SystemImage"),
31 QStringLiteral("FactoryReset"));
58 QStringLiteral("FactoryReset"));
32 QDBusConnection::systemBus().asyncCall(msg);
59 QDBusConnection::systemBus().asyncCall(msg);
62+void SystemImage::onUpdateAvailableStatus(bool is_available, bool downloading, const QString &available_version, int update_size,
63+ const QString &last_update_date, const QString &error_reason)
65+ qDebug() << Q_FUNC_INFO << "A new update is" << (is_available ? "" : "NOT") << "available";
67+ if (is_available == m_updateAvailable) {
71+ m_updateAvailable = is_available;
72+ m_downloading = downloading;
73+ m_availableVersion = available_version;
74+ m_updateSize = update_size;
75+ m_lastUpdateDate = last_update_date;
76+ m_errorReason = error_reason;
77+ Q_EMIT updateAvailableStatus();
80+void SystemImage::onUpdateDownloaded(bool downloaded)
82+ if (downloaded != m_downloaded) {
83+ m_downloaded = downloaded;
84+ Q_EMIT updateDownloadedChanged();
88+void SystemImage::onUpdateFailed(int consecutive_failure_count, const QString &last_reason)
90+ Q_UNUSED(consecutive_failure_count)
91+ qWarning() << Q_FUNC_INFO << "System Update failed:" << last_reason;
94+void SystemImage::onUpdateApplied(bool applied)
96+ qDebug() << Q_FUNC_INFO << "System Update applied with status:" << applied;
99+ Q_EMIT updateAvailableStatus();
103+void SystemImage::resetUpdateStatus()
105+ m_updateAvailable = false;
106+ m_downloading = false;
107+ m_downloaded = false;
108+ m_availableVersion.clear();
110+ m_lastUpdateDate.clear();
111+ m_errorReason.clear();