From 14cb9d9e977ac2921443b1bae4b89e39ffdeb070 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Tue, 25 Oct 2022 23:06:49 +0200 Subject: [PATCH] Make it work with older NetworkManager versions --- .../wirelessnetworkdevice.cpp | 27 ++++++++++++------- .../wirelessnetworkdevice.h | 1 + 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/libnymea-networkmanager/wirelessnetworkdevice.cpp b/libnymea-networkmanager/wirelessnetworkdevice.cpp index 9018ef4..983f8a4 100644 --- a/libnymea-networkmanager/wirelessnetworkdevice.cpp +++ b/libnymea-networkmanager/wirelessnetworkdevice.cpp @@ -82,7 +82,10 @@ WirelessNetworkDevice::WirelessNetworkDevice(const QDBusObjectPath &objectPath, QDBusConnection::systemBus().connect(NetworkManagerUtils::networkManagerServiceString(), this->objectPath().path(), NetworkManagerUtils::wirelessInterfaceString(), "AccessPointAdded", this, SLOT(accessPointAdded(QDBusObjectPath))); QDBusConnection::systemBus().connect(NetworkManagerUtils::networkManagerServiceString(), this->objectPath().path(), NetworkManagerUtils::wirelessInterfaceString(), "AccessPointRemoved", this, SLOT(accessPointRemoved(QDBusObjectPath))); + // org.freedesktop.NetworkManager.Device.Wireless.PropertiesChanged(QVariantMap) is used in older versions of NetworkManager instead of the standard D-Bus properties changed signal QDBusConnection::systemBus().connect(NetworkManagerUtils::networkManagerServiceString(), this->objectPath().path(), NetworkManagerUtils::wirelessInterfaceString(), "PropertiesChanged", this, SLOT(propertiesChanged(QVariantMap))); + // Newer versions of NetworkManager dropped the other and switched to the D-Bus standard PropertiesChanged + QDBusConnection::systemBus().connect(NetworkManagerUtils::networkManagerServiceString(), this->objectPath().path(), "org.freedesktop.DBus.Properties", "PropertiesChanged", this, SLOT(propertiesChanged(QString, QVariantMap, QStringList))); readAccessPoints(); @@ -219,36 +222,40 @@ void WirelessNetworkDevice::accessPointRemoved(const QDBusObjectPath &objectPath accessPoint->deleteLater(); } -void WirelessNetworkDevice::propertiesChanged(const QString &interface_name, const QVariantMap &changed_properties, const QStringList &invalidated_properties) +void WirelessNetworkDevice::propertiesChanged(const QVariantMap &properties) { - Q_UNUSED(interface_name) - Q_UNUSED(invalidated_properties) - //qCDebug(dcNetworkManager()) << "WirelessNetworkDevice: Property changed" << properties; - if (changed_properties.contains("Bitrate")) { - m_bitRate = changed_properties.value("Bitrate").toInt() / 1000; + if (properties.contains("Bitrate")) { + m_bitRate = properties.value("Bitrate").toInt() / 1000; emit bitRateChanged(m_bitRate); } - if (changed_properties.contains("Mode")) { + if (properties.contains("Mode")) { m_wirelessMode = static_cast(m_wirelessInterface->property("Mode").toUInt()); emit wirelessModeChanged(m_wirelessMode); } // Note: available since 1.12 (-1 means never scanned) - if (changed_properties.contains("LastScan")) { + if (properties.contains("LastScan")) { m_lastScan = m_wirelessInterface->property("LastScan").toInt(); emit lastScanChanged(m_lastScan); } - if (changed_properties.contains("ActiveAccessPoint")) { - setActiveAccessPoint(qdbus_cast(changed_properties.value("ActiveAccessPoint"))); + if (properties.contains("ActiveAccessPoint")) { + setActiveAccessPoint(qdbus_cast(properties.value("ActiveAccessPoint"))); } emit deviceChanged(); } +void WirelessNetworkDevice::propertiesChanged(const QString &interface_name, const QVariantMap &changed_properties, const QStringList &invalidated_properties) +{ + Q_UNUSED(interface_name) + Q_UNUSED(invalidated_properties) + propertiesChanged(changed_properties); +} + /*! Writes the given \a device to the given to \a debug. \sa WirelessNetworkDevice, */ QDebug operator<<(QDebug debug, WirelessNetworkDevice *device) { diff --git a/libnymea-networkmanager/wirelessnetworkdevice.h b/libnymea-networkmanager/wirelessnetworkdevice.h index b066e3a..2fbec9e 100644 --- a/libnymea-networkmanager/wirelessnetworkdevice.h +++ b/libnymea-networkmanager/wirelessnetworkdevice.h @@ -78,6 +78,7 @@ signals: private slots: void accessPointAdded(const QDBusObjectPath &objectPath); void accessPointRemoved(const QDBusObjectPath &objectPath); + void propertiesChanged(const QVariantMap &properties); void propertiesChanged(const QString &interface_name, const QVariantMap &changed_properties, const QStringList &invalidated_properties); private: