diff options
author | Bramastyo Harimukti <bramastyo.harimukti.santoso@pelagicore.com> | 2018-05-17 15:49:07 +0200 |
---|---|---|
committer | Lukáš Tinkl <ltinkl@luxoft.com> | 2018-05-23 12:52:29 +0000 |
commit | 237009f5180bfbc3bb986d94ce84ef6a6c01c68b (patch) | |
tree | 61085042104df0e0d611f13a7b84fa98270e820c | |
parent | 9e0f7e7158d23885aba2e17260a5687c0e6c10e6 (diff) |
[sysinfo] Remove dbus dependecies
- remove dbus dependencies and use different approach to get
the online status
- use single instance of system info in the system UI
Task-number: AUTOSUITE-487
Change-Id: I20d03b9e36417c59c0f42943c06234f2d8fbebf2
Reviewed-by: Lukáš Tinkl <ltinkl@luxoft.com>
-rw-r--r-- | Main.qml | 4 | ||||
-rw-r--r-- | imports/system/models/statusbar/StatusBarModel.qml | 6 | ||||
-rw-r--r-- | plugins/systeminfo/systeminfo.cpp | 103 | ||||
-rw-r--r-- | plugins/systeminfo/systeminfo.h | 9 | ||||
-rw-r--r-- | plugins/systeminfo/systeminfo.pro | 2 | ||||
-rw-r--r-- | sysui/about/About.qml | 2 | ||||
-rw-r--r-- | sysui/about/AboutPopup.qml | 8 | ||||
-rw-r--r-- | sysui/display/Display.qml | 10 |
8 files changed, 57 insertions, 87 deletions
@@ -41,7 +41,6 @@ import models.system 1.0 import utils 1.0 import instrumentcluster 1.0 import com.pelagicore.settings 1.0 -import com.pelagicore.systeminfo 1.0 import QtQuick.Window 2.3 @@ -244,7 +243,6 @@ Window { } } - SystemInfo { id: sysinfo } Shortcut { id: screenshot sequence: "Ctrl+p" @@ -270,7 +268,7 @@ Window { }); const diagFile = tempDir + "/" + timestamp + "_neptune3_versions.txt"; - saveFile(diagFile, sysinfo.qtDiag); + saveFile(diagFile, display.sysInfo.qtDiag); notificationInterface.summary = qsTr("UI screenshot has been taken successfully"); notificationInterface.body = qsTr("UI screenshot and diagnostics information are stored in %1").arg(tempDir); diff --git a/imports/system/models/statusbar/StatusBarModel.qml b/imports/system/models/statusbar/StatusBarModel.qml index 0d30c62f..a54edf21 100644 --- a/imports/system/models/statusbar/StatusBarModel.qml +++ b/imports/system/models/statusbar/StatusBarModel.qml @@ -31,16 +31,14 @@ import QtQuick 2.0 -import com.pelagicore.systeminfo 1.0 - QtObject { id: root - readonly property SystemInfo _systemInfo: SystemInfo {} + property bool isOnline: false property var indicators: [ { id: "reception", active: true, icon: "ic-statusbar-reception" }, - { id: "wifi", active: _systemInfo.online, icon: "ic-statusbar-wifi" }, + { id: "wifi", active: root.isOnline, icon: "ic-statusbar-wifi" }, { id: "bluetooth", active: false, icon: "ic-statusbar-bluetooth" }, { id: "battery", active: true, icon: "ic-statusbar-battery" } ] diff --git a/plugins/systeminfo/systeminfo.cpp b/plugins/systeminfo/systeminfo.cpp index 1e49a3a9..5aab232d 100644 --- a/plugins/systeminfo/systeminfo.cpp +++ b/plugins/systeminfo/systeminfo.cpp @@ -30,38 +30,34 @@ ****************************************************************************/ #include <QNetworkInterface> - -#include <QDBusConnection> -#include <QDBusPendingReply> +#include <QtNetwork> #include <QStandardPaths> #include <QSysInfo> -#include <QTimer> #include "systeminfo.h" -#define NM_SERVICE QStringLiteral("org.freedesktop.NetworkManager") -#define NM_PATH QStringLiteral("/org/freedesktop/NetworkManager") -#define NM_IFACE QStringLiteral("org.freedesktop.NetworkManager") - -#define SD_SERVICE QStringLiteral("org.freedesktop.network1") -#define SD_PATH QStringLiteral("/org/freedesktop/network1") -#define SD_IFACE QStringLiteral("org.freedesktop.DBus.Properties") -#define SD_PROPPATH QStringLiteral("org.freedesktop.network1.Manager") -#define SD_PROP QStringLiteral("OperationalState") - SystemInfo::SystemInfo(QObject *parent) - : QObject(parent) + : QObject(parent), + m_online(true) { + m_networkManager = new QNetworkAccessManager(this); + connect( + m_networkManager, &QNetworkAccessManager::finished, + this, &SystemInfo::replyFinished + ); } SystemInfo::~SystemInfo() { + killTimer(m_timerId); delete m_diagProc; } void SystemInfo::init() { getAddress(); + m_timerId = startTimer(1000, Qt::VeryCoarseTimer); + } /* @@ -111,32 +107,36 @@ void SystemInfo::getQtDiagInfo() m_diagProc->start(qtdiagExe, QProcess::ReadOnly); } -void SystemInfo::updateOnlineStatusNm(quint32 state) +void SystemInfo::timerEvent(QTimerEvent *event) { - const bool online = state == 70; // NM_STATE_CONNECTED_GLOBAL - if (online != m_online) { - m_online = online; - emit onlineChanged(); - QTimer::singleShot(1000, this, &SystemInfo::getAddress); - } + Q_UNUSED(event); + auto reply = m_networkManager->get(QNetworkRequest(QUrl("https://www.google.com"))); + connect(reply, QOverload<QNetworkReply::NetworkError>::of(&QNetworkReply::error), + [=](){ updateOnlineStatus(false); + }); } -void SystemInfo::updateOnlineStatusSd(const QVariant &state) +void SystemInfo::replyFinished(QNetworkReply *reply) { - const bool online = state.toString() == QStringLiteral("routable"); - if (online != m_online) { - m_online = online; - emit onlineChanged(); - QTimer::singleShot(1000, this, &SystemInfo::getAddress); + if (reply->error()) { + qDebug() << reply->errorString(); + updateOnlineStatus(false); + } else { + if (reply->bytesAvailable()) { + updateOnlineStatus(true); + } else { + updateOnlineStatus(false); + } } + reply->deleteLater(); } -void SystemInfo::updateOnlineStatusSdPropChange(const QString &interface, const QVariantMap &changedprop, const QStringList &) +void SystemInfo::updateOnlineStatus(bool status) { - if (interface == QStringLiteral("org.freedesktop.network1.Manager")) { - if (changedprop.contains(QStringLiteral("OperationalState"))) { - updateOnlineStatusSd(changedprop[QStringLiteral("OperationalState")]); - }; + if (status != m_online) { + m_online = status; + emit onlineChanged(); + getAddress(); } } @@ -177,43 +177,6 @@ QString SystemInfo::qtDiag() const void SystemInfo::classBegin() { - //TODO: Refactoring needed. This code does not check presence of systemd-networkd or network manager - auto conn = QDBusConnection::systemBus(); - conn.connect(NM_SERVICE, NM_PATH, NM_IFACE, QStringLiteral("StateChanged"), - this, SLOT(updateOnlineStatusNm(quint32))); - conn.connect(SD_SERVICE, SD_PATH, SD_IFACE, QStringLiteral("PropertiesChanged"), - this, SLOT(updateOnlineStatusSdPropChange(QString, QVariantMap, QStringList))); - - - QDBusMessage msg = QDBusMessage::createMethodCall(NM_SERVICE, NM_PATH, NM_IFACE, QStringLiteral("state")); - QDBusPendingCall pCall1 = conn.asyncCall(msg); - QDBusPendingCallWatcher *watcher1 = new QDBusPendingCallWatcher(pCall1, this); - connect(watcher1, &QDBusPendingCallWatcher::finished, [this](QDBusPendingCallWatcher *self) { - QDBusPendingReply<quint32> reply = *self; - self->deleteLater(); - if (reply.isValid()) { - updateOnlineStatusNm(reply.value()); - } else { - qWarning() << "Error getting online status from NetworkManager" << reply.error().name() << reply.error().message(); - } - }); - - msg = QDBusMessage::createMethodCall(SD_SERVICE, SD_PATH, SD_IFACE, QStringLiteral("Get")); - QList<QVariant> arguments; - arguments << SD_PROPPATH << SD_PROP; - msg.setArguments(arguments); - QDBusPendingCall pCall2 = conn.asyncCall(msg); - QDBusPendingCallWatcher *watcher2 = new QDBusPendingCallWatcher(pCall2, this); - connect(watcher2, &QDBusPendingCallWatcher::finished, [this](QDBusPendingCallWatcher *self) { - QDBusPendingReply<QVariant> reply = *self; - self->deleteLater(); - if (reply.isValid()) { - updateOnlineStatusSd(reply.value()); - } else { - qWarning() << "Error getting online status from Systemd-Networkd" << reply.error().name() << reply.error().message(); - } - }); - getQtDiagInfo(); } diff --git a/plugins/systeminfo/systeminfo.h b/plugins/systeminfo/systeminfo.h index 298ed579..25b60357 100644 --- a/plugins/systeminfo/systeminfo.h +++ b/plugins/systeminfo/systeminfo.h @@ -37,6 +37,7 @@ #include <QtQml/QQmlParserStatus> #include <QProcess> #include <QVariant> +#include <QNetworkAccessManager> class SystemInfo : public QObject, public QQmlParserStatus { @@ -73,19 +74,21 @@ signals: protected: void classBegin() override; void componentComplete() override; + void timerEvent(QTimerEvent *event) override; private slots: - void updateOnlineStatusNm(quint32 state); - void updateOnlineStatusSd(const QVariant &state); - void updateOnlineStatusSdPropChange(const QString &interface, const QVariantMap &changedprop, const QStringList &invalidated_properties); + void updateOnlineStatus(bool status); + void replyFinished(QNetworkReply *reply); private: void getAddress(); void getQtDiagInfo(); QStringList m_addressList; + int m_timerId; bool m_online{false}; QString m_qtDiagContents; QProcess *m_diagProc{nullptr}; + QNetworkAccessManager *m_networkManager = nullptr; }; #endif // SYSTEMINFO_H diff --git a/plugins/systeminfo/systeminfo.pro b/plugins/systeminfo/systeminfo.pro index 959665be..9009f9c8 100644 --- a/plugins/systeminfo/systeminfo.pro +++ b/plugins/systeminfo/systeminfo.pro @@ -1,6 +1,6 @@ TEMPLATE = lib TARGET = systeminfoplugin -QT += qml quick dbus +QT += qml quick network CONFIG += qt plugin c++11 uri = com.pelagicore.systeminfo diff --git a/sysui/about/About.qml b/sysui/about/About.qml index 1ca391a8..fa313097 100644 --- a/sysui/about/About.qml +++ b/sysui/about/About.qml @@ -43,10 +43,12 @@ PopupItemLoader { // to be set/called from outside property var applicationModel + property var sysInfo // to be read from outside state: item ? item.state : "" readonly property string currentTabName: item ? item.currentTabName : "" Binding { target: root.item; property: "applicationModel"; value: root.applicationModel } + Binding { target: root.item; property: "sysInfo"; value: root.sysInfo } } diff --git a/sysui/about/AboutPopup.qml b/sysui/about/AboutPopup.qml index ee1f6b66..438de132 100644 --- a/sysui/about/AboutPopup.qml +++ b/sysui/about/AboutPopup.qml @@ -33,7 +33,6 @@ import QtQuick 2.8 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.3 -import com.pelagicore.systeminfo 1.0 import com.pelagicore.styles.neptune 3.0 import utils 1.0 import controls 1.0 @@ -46,6 +45,7 @@ PopupItem { height: NeptuneStyle.dp(1426) property var applicationModel + property var sysInfo headerBackgroundVisible: true headerBackgroundHeight: NeptuneStyle.dp(278) @@ -53,8 +53,6 @@ PopupItem { property string currentTabName: tabBar.currentItem.name - SystemInfo { id: info } - contentItem: ColumnLayout { id: mainLayout readonly property real contentSideMargin: NeptuneStyle.dp(68) @@ -133,7 +131,7 @@ PopupItem { Layout.bottomMargin: NeptuneStyle.dp(24) currentIndex: tabBar.currentIndex MonitorView { - sysinfo: info + sysinfo: root.sysInfo } AboutRunningApps { applicationModel: root.applicationModel @@ -142,7 +140,7 @@ PopupItem { applicationModel: root.applicationModel } AboutDiagnostics { - sysinfo: info + sysinfo: root.sysInfo } } } diff --git a/sysui/display/Display.qml b/sysui/display/Display.qml index 4296d6a7..37488ed3 100644 --- a/sysui/display/Display.qml +++ b/sysui/display/Display.qml @@ -53,6 +53,7 @@ import models.statusbar 1.0 import QtGraphicalEffects 1.0 +import com.pelagicore.systeminfo 1.0 import com.pelagicore.styles.neptune 3.0 Item { @@ -77,6 +78,10 @@ Item { property Item popupParent property var settings + property SystemInfo sysInfo: SystemInfo { + id: sysInfo + } + property var applicationModel: ApplicationModel { id: applicationModel localeCode: Style.languageLocale @@ -128,7 +133,9 @@ Item { anchors.right: parent.right uiSettings: settings z: 1 - model: StatusBarModel {} + model: StatusBarModel { + isOnline: sysInfo.online + } onScreenshotRequested: root.screenshotRequested() } @@ -214,6 +221,7 @@ Item { popupParent: root.popupParent originItem: rightIcon applicationModel: root.applicationModel + sysInfo: root.sysInfo } VirtualKeyboard { |