fix: 解决无线线网络IP冲突时,任务栏图标是有线网络的图标

需求中没有说明ip冲突的图标需要区分有线无线的情况,现在调用dde-network-util传过来的数据判断冲突的ip是属于有线还是无线网络并更新ip冲突时网络图标.

Log: 修复ip冲突时网络图标异常问题
Bug: https://pms.uniontech.com/zentao/bug-view-90286.html
Change-Id: Ib1b709b1ec18a6da307c79d6cebe9db1ec62d700
This commit is contained in:
songwentao 2021-08-06 12:34:34 +08:00 committed by yanghongwei
parent 23b4f44330
commit 991a86fd28
2 changed files with 61 additions and 2 deletions

View File

@ -20,7 +20,6 @@
extern const int ItemWidth;
extern const int ItemMargin;
extern const int ItemHeight;
const int SeparatorItemHeight = 2;
const QString MenueEnable = "enable";
const QString MenueWiredEnable = "wireEnable";
const QString MenueWirelessEnable = "wirelessEnable";
@ -354,7 +353,25 @@ void NetworkItem::refreshIcon()
if (m_ipConflict) {
stateString = "offline";
iconString = QString("network-%1-symbolic").arg(stateString);
// 当无线网络和有线网络并存的情况,显示无线网络,因此无线网络后更新状态
// 所以先从从有线网络中查找,查找失败,然后再从无线中查找,
// 有线
foreach(auto ip, getActiveWiredList()) {
if (m_ipAndMacMap.keys().contains(ip)) {
iconString = QString("network-%1-symbolic").arg(stateString);
break;
}
}
// 无线
foreach(auto ip, getActiveWirelessList()) {
if (m_ipAndMacMap.keys().contains(ip)) {
iconString = QString("network-wireless-%1-symbolic").arg(stateString);
break;
}
}
if (height() <= PLUGIN_BACKGROUND_MIN_SIZE
&& DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType)
iconString.append(PLUGIN_MIN_ICON_NAME);
@ -1486,6 +1503,46 @@ const QStringList NetworkItem::currentIpList()
return strIpAddress;
}
const QStringList NetworkItem::getActiveWiredList()
{
QStringList wiredIpList;
for (auto wiredItem : m_wiredItems.values()) {
if (wiredItem) {
auto info = wiredItem->getActiveWiredConnectionInfo();
if (!info.contains("Ip4"))
continue;
const QJsonObject ipv4 = info.value("Ip4").toObject();
if (!ipv4.contains("Address"))
continue;
if (!wiredIpList.contains(ipv4.value("Address").toString()))
wiredIpList.append(ipv4.value("Address").toString());
}
}
return wiredIpList;
}
const QStringList NetworkItem::getActiveWirelessList()
{
QStringList wirelessIpList;
for (auto wirelessItem : m_wirelessItems.values()) {
if (wirelessItem) {
auto info = wirelessItem->getActiveWirelessConnectionInfo();
if (!info.contains("Ip4"))
continue;
const QJsonObject ipv4 = info.value("Ip4").toObject();
if (!ipv4.contains("Address"))
continue;
if (!wirelessIpList.contains(ipv4.value("Address").toString()))
wirelessIpList.append(ipv4.value("Address").toString());
}
}
return wirelessIpList;
}
void NetworkItem::wirelessScan()
{
if (m_loadingIndicator->loading())

View File

@ -70,6 +70,8 @@ public:
bool isShowControlCenter();
const QStringList currentIpList();
const QStringList getActiveWiredList();
const QStringList getActiveWirelessList();
public slots:
void updateSelf();