From 1fe8ddfcaca33c91a6bf40485731540947a94751 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Tue, 22 Dec 2020 00:24:45 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BB=BB=E5=8A=A1=E6=A0=8F=E8=93=9D?= =?UTF-8?q?=E7=89=99=E6=8F=92=E4=BB=B6=E8=AE=BE=E5=A4=87=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在刚开机时,蓝牙插件在获取适配器信息时,可能在将检测到的设备ID与已存在的设备列表比较时,将检测到的ID存入QMap,但是没有存入对象, 后面仅通过判断ID时,认为适配器已经加入QMap中,就不再加入设备对象,后面在判断对象是否为空的地方,都直接返回了,导致信号连接没有触发。 Log: 修复任务栏蓝牙插件设备列表无法刷新的问题。 Bug: https://pms.uniontech.com/zentao/bug-view-57913.html Change-Id: If43ae449e378fde23649eba2fd4208a4d01b375d --- .../bluetooth/componments/adaptersmanager.cpp | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/plugins/bluetooth/componments/adaptersmanager.cpp b/plugins/bluetooth/componments/adaptersmanager.cpp index 2421d8e8f..6afbaa532 100644 --- a/plugins/bluetooth/componments/adaptersmanager.cpp +++ b/plugins/bluetooth/componments/adaptersmanager.cpp @@ -150,6 +150,10 @@ void AdaptersManager::onAdapterPropertiesChanged(const QString &json) const QString id = obj["Path"].toString(); QDBusObjectPath dPath(id); + if (!m_adapters.contains(id)) { + return; + } + Adapter *adapter = const_cast(m_adapters[id]); if (adapter) { inflateAdapter(adapter, obj); @@ -180,6 +184,10 @@ void AdaptersManager::removeAdapter(const QString &json) QJsonObject obj = doc.object(); const QString id = obj["Path"].toString(); + if (!m_adapters.contains(id)) { + return; + } + const Adapter *result = m_adapters[id]; Adapter *adapter = const_cast(result); if (adapter) { @@ -196,6 +204,10 @@ void AdaptersManager::addDevice(const QString &json) const QString adapterId = obj["AdapterPath"].toString(); const QString deviceId = obj["Path"].toString(); + if (!m_adapters.contains(adapterId)) { + return; + } + const Adapter *result = m_adapters[adapterId]; Adapter *adapter = const_cast(result); if (adapter) { @@ -214,6 +226,10 @@ void AdaptersManager::removeDevice(const QString &json) const QString adapterId = obj["AdapterPath"].toString(); const QString deviceId = obj["Path"].toString(); + if (!m_adapters.contains(adapterId)) { + return; + } + const Adapter *result = m_adapters[adapterId]; Adapter *adapter = const_cast(result); if (adapter) { @@ -247,11 +263,11 @@ void AdaptersManager::adapterAdd(Adapter *adapter, const QJsonObject &adpterObj) QString id = adapter->id(); if (!id.isEmpty()) { - // in case memory leaks - if (m_adapters.contains(id)) { - return; + if (!m_adapters.contains(id)) { + m_adapters[id] = adapter; + } else if (m_adapters[id] == nullptr) { + m_adapters[id] = adapter; } - m_adapters[id] = adapter; } }