aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBramastyo Harimukti <bramastyo.harimukti.santoso@pelagicore.com>2018-05-17 15:49:07 +0200
committerLukáš Tinkl <ltinkl@luxoft.com>2018-05-23 12:52:29 +0000
commit237009f5180bfbc3bb986d94ce84ef6a6c01c68b (patch)
tree61085042104df0e0d611f13a7b84fa98270e820c
parent9e0f7e7158d23885aba2e17260a5687c0e6c10e6 (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.qml4
-rw-r--r--imports/system/models/statusbar/StatusBarModel.qml6
-rw-r--r--plugins/systeminfo/systeminfo.cpp103
-rw-r--r--plugins/systeminfo/systeminfo.h9
-rw-r--r--plugins/systeminfo/systeminfo.pro2
-rw-r--r--sysui/about/About.qml2
-rw-r--r--sysui/about/AboutPopup.qml8
-rw-r--r--sysui/display/Display.qml10
8 files changed, 57 insertions, 87 deletions
diff --git a/Main.qml b/Main.qml
index b504aab7..43a9b8ca 100644
--- a/Main.qml
+++ b/Main.qml
@@ -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 {