From d9ab170f84c23ff1c0c17bc685896f2807940d8c Mon Sep 17 00:00:00 2001 From: liuxinhao Date: Thu, 6 Mar 2025 14:54:12 +0800 Subject: [PATCH] fix(network): The ActivateNetworkSeries interface returns PendingReply, making it easy for the caller to display network status notifications MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 激活网络系列接口返回PendingReply,便于调用者显示网络状态通知 --- include/wireless-network-manager.h | 8 +-- .../wireless-network-manager-private.h | 1 - lib/network/wireless-network-manager.cpp | 64 ++++++++----------- 3 files changed, 30 insertions(+), 43 deletions(-) diff --git a/include/wireless-network-manager.h b/include/wireless-network-manager.h index ea51ea2..7aa6c12 100644 --- a/include/wireless-network-manager.h +++ b/include/wireless-network-manager.h @@ -54,15 +54,15 @@ public: WifiSecurityTypeList networkSupportSecurityTypeList(const QString &ssid); // 激活网络,使用已有的网络配置 - void activateNetowrk(const QString &ssid); + QDBusPendingCall activateNetowrk(const QString &ssid); // 添加密码形式激活网络配置并尝试激活隐藏网络 // 适用于WpaPsk/Wpa2Psk/Wpa3 Person/WpaNone - void addAndActivateHiddenNetwork(const QString &ssid, const QString &password, WifiSecurityType securityType); + QDBusPendingCall addAndActivateHiddenNetwork(const QString &ssid, const QString &password, WifiSecurityType securityType); // 添加密码形式激活网的配置并尝试激活网络 // 适用于WpaPsk/Wpa2Psk/Wpa3 Person/WpaNone - void addAndActivateNetwork(const QString &ssid, const QString &password); + QDBusPendingCall addAndActivateNetwork(const QString &ssid, const QString &password); // 添加EAP形式激活网的配置并尝试激活网络 // 适用于Wpa/Wpa2 Enterprise @@ -72,7 +72,7 @@ public: void removeNetworkConnection(const QString &ssid); // 断开该无线网卡上已激活的连接 - void deactivateConnection(); + QDBusPendingCall deactivateConnection(); signals: // 设备状态改变信号 diff --git a/lib/network/wireless-network-manager-private.h b/lib/network/wireless-network-manager-private.h index 40e9fe9..39f1186 100644 --- a/lib/network/wireless-network-manager-private.h +++ b/lib/network/wireless-network-manager-private.h @@ -39,7 +39,6 @@ private slots: void onNetworkDisappeared(const QString &ssid); void onStateChanged(Device::State newstate, Device::State oldstate, Device::StateChangeReason reason); void onActiveAccessPointChanged(const QString &ap); - void onActivateConnectionFinished(QDBusPendingCallWatcher *watcher); void onDeviceActiveConnectionChanged(); private: diff --git a/lib/network/wireless-network-manager.cpp b/lib/network/wireless-network-manager.cpp index 615d629..0c5599d 100644 --- a/lib/network/wireless-network-manager.cpp +++ b/lib/network/wireless-network-manager.cpp @@ -137,31 +137,36 @@ void WirelessNetworkManager::removeNetworkConnection(const QString &ssid) } } -void WirelessNetworkManager::deactivateConnection() +QDBusPendingCall WirelessNetworkManager::deactivateConnection() { auto activeConnection = d_ptr->m_device->activeConnection(); if (activeConnection.isNull()) { + auto successReply = QDBusPendingCall::fromError(QDBusError(QDBusError::NoError, "")); KLOG_WARNING(qLcNetwork) << interfaceName() << "deactivate connecion failed, no active connection"; - return; + return successReply; } KLOG_INFO(qLcNetwork) << "deactivate" << interfaceName() << activeConnection->id() << activeConnection->path(); - NetworkManager::deactivateConnection(activeConnection->path()); + auto pendingReply = NetworkManager::deactivateConnection(activeConnection->path()); + return pendingReply; } -void WirelessNetworkManager::activateNetowrk(const QString &ssid) +QDBusPendingCall WirelessNetworkManager::activateNetowrk(const QString &ssid) { - RETURN_IF_FALSE_WITH_WARNNING(d_ptr->m_networkInfoMap.contains(ssid), - QString("network %1 not exists").arg(ssid)); + auto errorReply = QDBusPendingCall::fromError(QDBusError(QDBusError::InternalError, "")); + + RETURN_VAL_IF_FALSE_WITH_WARNNING(d_ptr->m_networkInfoMap.contains(ssid), + errorReply, + QString("network %1 not exists").arg(ssid)); auto networkInfo = d_ptr->m_networkInfoMap[ssid]; auto connectionList = d_ptr->getWirelessNetworkConnection(ssid); if (connectionList.isEmpty()) - return; + return errorReply; auto connection = connectionList.first(); KLOG_INFO(qLcNetwork).nospace() << "activate " << d_ptr->m_device->interfaceName() @@ -171,18 +176,14 @@ void WirelessNetworkManager::activateNetowrk(const QString &ssid) auto pendingReply = NetworkManager::activateConnection(connection->path(), d_ptr->m_device->uni(), networkInfo.referencePointPath); - - auto pendingCallWatcher = new QDBusPendingCallWatcher(pendingReply, this); - pendingCallWatcher->setProperty(DBUS_WATCHER_PROPERTY_SSID, ssid); - connect(pendingCallWatcher, &QDBusPendingCallWatcher::finished, - d_ptr, &WirelessNetworkManagerPrivate::onActivateConnectionFinished); - return; + return pendingReply; } -void WirelessNetworkManager::addAndActivateHiddenNetwork(const QString &ssid, - const QString &password, - WifiSecurityType securityType) +QDBusPendingCall WirelessNetworkManager::addAndActivateHiddenNetwork(const QString &ssid, + const QString &password, + WifiSecurityType securityType) { + auto errorReply = QDBusPendingCall::fromError(QDBusError(QDBusError::InternalError, "")); KLOG_INFO(qLcNetwork).nospace() << "activate " << d_ptr->m_device->interfaceName() << " network(" << ssid << ")"; @@ -191,30 +192,28 @@ void WirelessNetworkManager::addAndActivateHiddenNetwork(const QString &ssid, { KLOG_WARNING(qLcNetwork) << "create connection settings for" << ssid << "failed, unsupported security type"; - return; + return errorReply; } auto pendingReply = addAndActivateConnection(connectionSettings->toMap(), d_ptr->m_device->uni(), ""); - - auto pendingCallWatcher = new QDBusPendingCallWatcher(pendingReply, this); - pendingCallWatcher->setProperty(DBUS_WATCHER_PROPERTY_SSID, ssid); - connect(pendingCallWatcher, &QDBusPendingCallWatcher::finished, - d_ptr, &WirelessNetworkManagerPrivate::onActivateConnectionFinished); + return pendingReply; } -void WirelessNetworkManager::addAndActivateNetwork(const QString &ssid, const QString &password) +QDBusPendingCall WirelessNetworkManager::addAndActivateNetwork(const QString &ssid, const QString &password) { ConnectionSettings::Ptr connectionSettings; + auto errorReply = QDBusPendingCall::fromError(QDBusError(QDBusError::InternalError, "")); static QList recommendSecurityList = { SECURITY_TYPE_WPA3_PERSON, SECURITY_TYPE_WPA_AND_WPA2_PERSON, SECURITY_TYPE_NONE, }; - RETURN_IF_FALSE_WITH_WARNNING(d_ptr->m_networkInfoMap.contains(ssid), - QString("network %1 not exists").arg(ssid)); + RETURN_VAL_IF_FALSE_WITH_WARNNING(d_ptr->m_networkInfoMap.contains(ssid), + errorReply, + QString("network %1 not exists").arg(ssid)); auto networkInfo = d_ptr->m_networkInfoMap[ssid]; auto supportedSecurityTypes = d_ptr->getSupportedNetworkSecuritys(ssid); @@ -230,17 +229,13 @@ void WirelessNetworkManager::addAndActivateNetwork(const QString &ssid, const QS { KLOG_WARNING(qLcNetwork) << "create connection settings for" << ssid << "failed," << "unsupported security type"; - return; + return errorReply; } auto pendingReply = addAndActivateConnection(connectionSettings->toMap(), d_ptr->m_device->uni(), networkInfo.referencePointPath); - auto pendingCallWatcher = new QDBusPendingCallWatcher(pendingReply, this); - pendingCallWatcher->setProperty(DBUS_WATCHER_PROPERTY_SSID, ssid); - connect(pendingCallWatcher, &QDBusPendingCallWatcher::finished, - d_ptr, &WirelessNetworkManagerPrivate::onActivateConnectionFinished); - return; + return pendingReply; } WirelessNetworkManagerPrivate::WirelessNetworkManagerPrivate( @@ -310,13 +305,6 @@ void WirelessNetworkManagerPrivate::onActiveAccessPointChanged(const QString &ap KLOG_DEBUG(qLcNetwork) << "active ap changed:" << ap; } -void WirelessNetworkManagerPrivate::onActivateConnectionFinished(QDBusPendingCallWatcher *watcher) -{ - auto reply = watcher->reply(); - auto ssid = watcher->property(DBUS_WATCHER_PROPERTY_SSID).toString(); - KLOG_DEBUG(qLcNetwork) << ssid << "activate connection pending call finished" << reply; -} - /** * 设备ActiveConnection改变处理方法: * 通过激活连接,拿到连接信息,再拿到连接配置 -- Gitee