fix: 修复任务栏和控制中心蓝牙列表不一致的问题

onDeviceAdded()插入时条件错误
条件满足再后插入,避免下次下次无法插入

Bug: https://pms.uniontech.com/bug-view-150059.html
This commit is contained in:
songwentao 2022-09-01 16:38:54 +08:00 committed by deepin-bot[bot]
parent 0427e19b72
commit 124d99bf71

View File

@ -170,6 +170,7 @@ void BluetoothAdapterItem::onTopDeviceItem(DStandardItem *item)
return; return;
int index1 = item->row(); int index1 = item->row();
// 先获取,再移除,后插入
QStandardItem *index = m_deviceModel->takeItem(index1, 0); QStandardItem *index = m_deviceModel->takeItem(index1, 0);
m_deviceModel->removeRow(index1); m_deviceModel->removeRow(index1);
m_deviceModel->insertRow(0, index); m_deviceModel->insertRow(0, index);
@ -216,7 +217,8 @@ QStringList BluetoothAdapterItem::connectedDevicesName()
void BluetoothAdapterItem::initData() void BluetoothAdapterItem::initData()
{ {
m_showUnnamedDevices = m_bluetoothInter->displaySwitch(); m_showUnnamedDevices = m_bluetoothInter->displaySwitch();
if (!m_adapter->powered())
if (m_adapter && !m_adapter->powered())
return; return;
foreach (const auto device, m_adapter->devices()) { foreach (const auto device, m_adapter->devices()) {
@ -246,10 +248,10 @@ void BluetoothAdapterItem::onDeviceAdded(const Device *device)
} }
}); });
m_deviceItems.insert(device->id(), item); if (!m_showUnnamedDevices && device->name().isEmpty())
if (!m_showUnnamedDevices && device->name().isEmpty() && Device::StateConnected != device->state())
return; return;
m_deviceItems.insert(device->id(), item);
m_deviceModel->insertRow(insertRow, item->standardItem()); m_deviceModel->insertRow(insertRow, item->standardItem());
emit deviceCountChanged(); emit deviceCountChanged();
} }
@ -259,7 +261,18 @@ void BluetoothAdapterItem::onDeviceRemoved(const Device *device)
if (m_deviceItems.isEmpty()) if (m_deviceItems.isEmpty())
return; return;
m_deviceModel->removeRow(m_deviceItems.value(device->id())->standardItem()->row()); int row = -1;
if (!m_deviceItems.value(device->id()))
return;
row = m_deviceItems.value(device->id())->standardItem()->row();
if ((row < 0) || (row > m_deviceItems.size() - 1)) {
m_deviceItems.value(device->id())->deleteLater();
m_deviceItems.remove(device->id());
return;
}
m_deviceModel->removeRow(row);
m_deviceItems.value(device->id())->deleteLater(); m_deviceItems.value(device->id())->deleteLater();
m_deviceItems.remove(device->id()); m_deviceItems.remove(device->id());
emit deviceCountChanged(); emit deviceCountChanged();
@ -406,7 +419,6 @@ void BluetoothAdapterItem::setUnnamedDevicesVisible(bool isShow)
return; return;
} }
for (i = m_deviceItems.begin(); i != m_deviceItems.end(); ++i) { for (i = m_deviceItems.begin(); i != m_deviceItems.end(); ++i) {
BluetoothDeviceItem *deviceItem = i.value(); BluetoothDeviceItem *deviceItem = i.value();