From 0ecd391912f6338d5aef6105600fc8c321c83bd8 Mon Sep 17 00:00:00 2001 From: Ville Voutilainen Date: Thu, 30 Aug 2018 18:52:51 +0300 Subject: Fix ip address tracking and display MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTBUG-69814 Change-Id: Ifc90871c11aeddd1d07c5f1feb2a4292f0d36463 Reviewed-by: Pasi Petäjäjärvi (cherry picked from commit 65b663a9be5d27cbb77b48f9e392c9463416383a) --- .../connman/qnetworksettingsmanager_p.cpp | 5 +-- .../connman/qnetworksettingsmanager_p.h | 3 ++ .../connman/qnetworksettingsservice_p.cpp | 8 ++--- src/networksettings/qnetworksettingsmanager.cpp | 42 ++++++++++++++++------ src/networksettings/qnetworksettingsmanager.h | 7 ++-- src/settingsui/settingsuiplugin/SettingsHeader.qml | 41 ++++----------------- 6 files changed, 53 insertions(+), 53 deletions(-) diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.cpp b/src/networksettings/connman/qnetworksettingsmanager_p.cpp index cadcf6b..bd656c6 100644 --- a/src/networksettings/connman/qnetworksettingsmanager_p.cpp +++ b/src/networksettings/connman/qnetworksettingsmanager_p.cpp @@ -48,6 +48,7 @@ QNetworkSettingsManagerPrivate::QNetworkSettingsManagerPrivate(QNetworkSettingsM , m_agent(Q_NULLPTR) , m_serviceWatcher(Q_NULLPTR) , m_currentWifiConnection(Q_NULLPTR) + , m_currentWiredConnection(Q_NULLPTR) , m_initialized(false) { qDBusRegisterMetaType(); @@ -230,9 +231,9 @@ void QNetworkSettingsManagerPrivate::handleNewService(const QString &servicePath q, &QNetworkSettingsManager::clearConnectionState); connect(service, &QNetworkSettingsService::serviceConnected, - q, &QNetworkSettingsManager::setCurrentWifiConnection); + q, &QNetworkSettingsManager::setCurrentConnection); connect(service, &QNetworkSettingsService::serviceDisconnected, - q, &QNetworkSettingsManager::clearCurrentWifiConnection); + q, &QNetworkSettingsManager::clearCurrentConnection); if (service->name().length() > 0 && service->type() != QNetworkSettingsType::Unknown) { m_serviceModel->append(service); diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.h b/src/networksettings/connman/qnetworksettingsmanager_p.h index d2146a9..b9133ab 100644 --- a/src/networksettings/connman/qnetworksettingsmanager_p.h +++ b/src/networksettings/connman/qnetworksettingsmanager_p.h @@ -72,6 +72,8 @@ public: void tryNextConnection(); void setCurrentWifiConnection(QNetworkSettingsService *connection) {m_currentWifiConnection = connection;} QNetworkSettingsService* currentWifiConnection() const {return m_currentWifiConnection;} + void setCurrentWiredConnection(QNetworkSettingsService *connection) {m_currentWiredConnection = connection;} + QNetworkSettingsService* currentWiredConnection() const {return m_currentWiredConnection;} public slots: void getServicesFinished(QDBusPendingCallWatcher *watcher); @@ -95,6 +97,7 @@ private: QDBusServiceWatcher *m_serviceWatcher; QString m_currentSsid; QNetworkSettingsService *m_currentWifiConnection; + QNetworkSettingsService *m_currentWiredConnection; bool m_initialized; }; diff --git a/src/networksettings/connman/qnetworksettingsservice_p.cpp b/src/networksettings/connman/qnetworksettingsservice_p.cpp index 65653aa..ec53956 100644 --- a/src/networksettings/connman/qnetworksettingsservice_p.cpp +++ b/src/networksettings/connman/qnetworksettingsservice_p.cpp @@ -400,9 +400,9 @@ void QNetworkSettingsServicePrivate::updateProperty(const QString& key, const QV oldState.setState(m_state.state()); value >> m_state; emit q->stateChanged(); - if (m_state.state() == QNetworkSettingsState::Ready && m_type.type() == QNetworkSettingsType::Wifi) + if (m_state.state() == QNetworkSettingsState::Ready || m_state.state() == QNetworkSettingsState::Online) emit q->serviceConnected(q); - if (m_state.state() == QNetworkSettingsState::Disconnect && m_type.type() == QNetworkSettingsType::Wifi) + if (m_state.state() == QNetworkSettingsState::Disconnect) emit q->serviceDisconnected(q); } else if (key == PropertyName) { @@ -413,9 +413,9 @@ void QNetworkSettingsServicePrivate::updateProperty(const QString& key, const QV QString value = qdbus_cast(val); value >> m_type; emit q->typeChanged(); - if (m_state.state() == QNetworkSettingsState::Ready && m_type.type() == QNetworkSettingsType::Wifi) + if (m_state.state() == QNetworkSettingsState::Ready || m_state.state() == QNetworkSettingsState::Online) emit q->serviceConnected(q); - if (m_state.state() == QNetworkSettingsState::Disconnect && m_type.type() == QNetworkSettingsType::Wifi) + if (m_state.state() == QNetworkSettingsState::Disconnect) emit q->serviceDisconnected(q); } else if (key == PropertyStrength) { diff --git a/src/networksettings/qnetworksettingsmanager.cpp b/src/networksettings/qnetworksettingsmanager.cpp index cda66e7..e3f8e50 100644 --- a/src/networksettings/qnetworksettingsmanager.cpp +++ b/src/networksettings/qnetworksettingsmanager.cpp @@ -91,23 +91,38 @@ void QNetworkSettingsManager::tryNextConnection() d->tryNextConnection(); } -void QNetworkSettingsManager::clearCurrentWifiConnection(QNetworkSettingsService* service) +void QNetworkSettingsManager::clearCurrentConnection(QNetworkSettingsService* service) { Q_D(QNetworkSettingsManager); - QNetworkSettingsService *currentService = d->currentWifiConnection(); - if (service == currentService) { - d->setCurrentWifiConnection(nullptr); - emit currentWifiConnectionChanged(); + if (service->type() == QNetworkSettingsType::Wifi) { + QNetworkSettingsService *currentService = d->currentWifiConnection(); + if (service == currentService) { + d->setCurrentWifiConnection(nullptr); + emit currentWifiConnectionChanged(); + } + } else if (service->type() == QNetworkSettingsType::Wired) { + QNetworkSettingsService *currentService = d->currentWiredConnection(); + if (service == currentService) { + d->setCurrentWiredConnection(nullptr); + emit currentWiredConnectionChanged(); + } } } -void QNetworkSettingsManager::setCurrentWifiConnection(QNetworkSettingsService* service) +void QNetworkSettingsManager::setCurrentConnection(QNetworkSettingsService* service) { Q_D(QNetworkSettingsManager); - QNetworkSettingsService *currentService = d->currentWifiConnection(); - d->setCurrentWifiConnection(service); - if (service != currentService) - emit currentWifiConnectionChanged(); + if (service->type() == QNetworkSettingsType::Wifi) { + QNetworkSettingsService *currentService = d->currentWifiConnection(); + d->setCurrentWifiConnection(service); + if (service != currentService) + emit currentWifiConnectionChanged(); + } else if (service->type() == QNetworkSettingsType::Wired) { + QNetworkSettingsService *currentService = d->currentWiredConnection(); + d->setCurrentWiredConnection(service); + if (service != currentService) + emit currentWiredConnectionChanged(); + } } QNetworkSettingsService* QNetworkSettingsManager::currentWifiConnection() @@ -116,6 +131,13 @@ QNetworkSettingsService* QNetworkSettingsManager::currentWifiConnection() return d->currentWifiConnection(); } + +QNetworkSettingsService* QNetworkSettingsManager::currentWiredConnection() +{ + Q_D(QNetworkSettingsManager); + return d->currentWiredConnection(); +} + QNetworkSettingsInterface* QNetworkSettingsManager::interface(int type, int instance) { Q_D(QNetworkSettingsManager); diff --git a/src/networksettings/qnetworksettingsmanager.h b/src/networksettings/qnetworksettingsmanager.h index 103bc77..17a3082 100644 --- a/src/networksettings/qnetworksettingsmanager.h +++ b/src/networksettings/qnetworksettingsmanager.h @@ -51,6 +51,7 @@ class Q_DECL_EXPORT QNetworkSettingsManager : public QObject Q_PROPERTY(QNetworkSettingsInterfaceModel* interfaces READ interfaces NOTIFY interfacesChanged) Q_PROPERTY(QNetworkSettingsUserAgent* userAgent READ userAgent CONSTANT) Q_PROPERTY(QNetworkSettingsService* currentWifiConnection READ currentWifiConnection NOTIFY currentWifiConnectionChanged) + Q_PROPERTY(QNetworkSettingsService* currentWiredConnection READ currentWiredConnection NOTIFY currentWiredConnectionChanged) public: explicit QNetworkSettingsManager(QObject* parent = Q_NULLPTR); @@ -63,15 +64,17 @@ public: Q_INVOKABLE void connectBySsid(const QString& name, const QString &passphrase); void clearConnectionState(); void tryNextConnection(); - void clearCurrentWifiConnection(QNetworkSettingsService* service); - void setCurrentWifiConnection(QNetworkSettingsService* service); + void clearCurrentConnection(QNetworkSettingsService* service); + void setCurrentConnection(QNetworkSettingsService* service); QNetworkSettingsService* currentWifiConnection(); + QNetworkSettingsService* currentWiredConnection(); Q_INVOKABLE QNetworkSettingsInterface* interface(int type, int instance); Q_SIGNALS: void servicesChanged(); void interfacesChanged(); void currentWifiConnectionChanged(); + void currentWiredConnectionChanged(); protected: QNetworkSettingsManagerPrivate *d_ptr; diff --git a/src/settingsui/settingsuiplugin/SettingsHeader.qml b/src/settingsui/settingsuiplugin/SettingsHeader.qml index 37469e2..24192c9 100644 --- a/src/settingsui/settingsuiplugin/SettingsHeader.qml +++ b/src/settingsui/settingsuiplugin/SettingsHeader.qml @@ -39,24 +39,6 @@ Item { signal clicked() - function refreshIP() { - var networkCount = NetworkSettingsManager.services.sourceModel.rowCount(); - var ipAddress = "Not Found"; - for (var i = 0; i < networkCount; ++i) { - var networkService = NetworkSettingsManager.services.itemFromRow(i); - var tmp = NetworkSettingsManager.services.itemFromRow(i).ipv4.address; - if (tmp !== "" && ipAddress === "Not Found") - ipAddress = tmp; - - if (networkService.type === NetworkSettingsType.Wired && - (networkService.status === NetworkSettingsState.Ready || - networkService.status === NetworkSettingsState.Online)) { - break; - } - } - ipItem.text = qsTr("Wired IP: ") + ipAddress; - } - Image { id: backButton anchors.left: parent.left @@ -100,12 +82,9 @@ Item { color: "white" font.family: appFont font.styleName: "SemiBold" - text: qsTr("Wired IP: ") - - MouseArea { - anchors.fill: parent - onClicked: header.refreshIP() - } + text: NetworkSettingsManager.currentWiredConnection ? + qsTr("Wired IP: ") + + NetworkSettingsManager.currentWiredConnection.ipv4.address : "" } Text { @@ -121,16 +100,8 @@ Item { color: "white" font.family: appFont font.styleName: "SemiBold" - text: qsTr((NetworkSettingsManager.currentWifiConnection ? - "Wireless IP: " + - NetworkSettingsManager.currentWifiConnection.ipv4.address : "")) - } - - Component.onCompleted: { - var networkCount = NetworkSettingsManager.services.sourceModel.rowCount(); - for (var i = 0; i < networkCount; ++i) { - NetworkSettingsManager.services.itemFromRow(i).ipv4Changed.connect(refreshIP); - } - header.refreshIP() + text: NetworkSettingsManager.currentWifiConnection ? + qsTr("Wireless IP: ") + + NetworkSettingsManager.currentWifiConnection.ipv4.address : "" } } -- cgit v1.2.3