17 #include <QDBusConnection> 18 #include <QDBusPendingCall> 24 #include "SystemImage.h" 26 #define SYSTEMIMAGE_SERVICE QStringLiteral("com.canonical.SystemImage") 27 #define SYSTEMIMAGE_PATH QStringLiteral("/Service") 28 #define SYSTEMIMAGE_IFACE QStringLiteral("com.canonical.SystemImage") 30 Q_LOGGING_CATEGORY(SYSTEMIMAGEPLUGIN,
"unity8.systemimage", QtWarningMsg)
32 #define DEBUG_MSG qCDebug(SYSTEMIMAGEPLUGIN).nospace().noquote() << Q_FUNC_INFO 33 #define WARNING_MSG qCWarning(SYSTEMIMAGEPLUGIN).nospace().noquote() << Q_FUNC_INFO 35 SystemImage::SystemImage(QObject *parent)
38 QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral(
"UpdateAvailableStatus"),
39 this, SLOT(onUpdateAvailableStatus(
bool,
bool,QString,
int,QString,QString)));
40 QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral(
"UpdateDownloaded"),
41 this, SLOT(onUpdateDownloaded()));
42 QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral(
"UpdateFailed"),
43 this, SLOT(onUpdateFailed(
int,QString)));
44 QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral(
"Applied"),
45 this, SLOT(onUpdateApplied(
bool)));
46 QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral(
"Rebooting"),
47 this, SLOT(onRebooting(
bool)));
50 void SystemImage::checkForUpdate()
52 DEBUG_MSG <<
"Checking for update";
53 const QDBusMessage msg = QDBusMessage::createMethodCall(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE,
54 QStringLiteral(
"CheckForUpdate"));
55 QDBusConnection::systemBus().asyncCall(msg);
58 void SystemImage::applyUpdate()
60 DEBUG_MSG <<
"Applying update";
61 setUpdateApplying(
true);
63 const QDBusMessage msg = QDBusMessage::createMethodCall(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE,
64 QStringLiteral(
"ApplyUpdate"));
65 QDBusConnection::systemBus().asyncCall(msg);
68 void SystemImage::factoryReset()
70 const QDBusMessage msg = QDBusMessage::createMethodCall(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE,
71 QStringLiteral(
"FactoryReset"));
72 QDBusConnection::systemBus().asyncCall(msg);
75 void SystemImage::onUpdateAvailableStatus(
bool is_available,
bool downloading,
const QString &available_version,
int update_size,
76 const QString &last_update_date,
const QString &error_reason)
78 DEBUG_MSG <<
"A new update is " << (is_available ?
"" :
"NOT") <<
"available";
80 if (is_available == m_updateAvailable) {
84 m_updateAvailable = is_available;
85 m_downloading = downloading;
86 m_availableVersion = available_version;
87 m_updateSize = formatSize(update_size);
88 m_lastUpdateDate = last_update_date;
89 m_errorReason = error_reason;
90 Q_EMIT updateAvailableStatus();
92 DEBUG_MSG <<
"Downloading: " << downloading <<
", version: " << available_version <<
", last update: " << last_update_date <<
93 ", size: " << m_updateSize;
96 void SystemImage::onUpdateDownloaded()
98 DEBUG_MSG <<
"Update downloaded";
101 Q_EMIT updateDownloadedChanged();
104 void SystemImage::onUpdateFailed(
int ,
const QString &last_reason)
106 WARNING_MSG <<
"System Update failed: " << last_reason;
107 setUpdateApplying(
false);
110 void SystemImage::onUpdateApplied(
bool applied)
112 DEBUG_MSG <<
"System Update applied with status: " << applied;
113 setUpdateApplying(
false);
116 Q_EMIT updateAvailableStatus();
120 void SystemImage::onRebooting(
bool status)
122 setUpdateApplying(
false);
123 DEBUG_MSG <<
"Rebooting: " << status;
126 void SystemImage::setUpdateApplying(
bool status)
128 if (status != m_updateApplying) {
129 m_updateApplying = status;
130 Q_EMIT updateApplyingChanged();
134 void SystemImage::resetUpdateStatus()
136 m_updateAvailable =
false;
137 m_updateApplying =
false;
138 m_downloading =
false;
139 m_downloaded =
false;
140 m_availableVersion.clear();
141 m_updateSize.clear();
142 m_lastUpdateDate.clear();
143 m_errorReason.clear();
146 QString SystemImage::formatSize(quint64 size)
const 148 guint64 g_size = size;
150 gchar * formatted_size = g_format_size(g_size);
151 QString q_formatted_size = QString::fromLocal8Bit(formatted_size);
152 g_free(formatted_size);
154 return q_formatted_size;