From 16a19254ad0478fe3b3e180bb94a536f42d4aca7 Mon Sep 17 00:00:00 2001 From: luoqing Date: Mon, 18 Sep 2023 11:23:37 +0800 Subject: [PATCH] fix(network):Modify DNS Settings and display DNS details;Improved the notification logic. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 自动获取IP(DNS)后,网络详情显示自动获取到的DNS 手动配置DNS,网络详情中DNS服务器仅显示手动配置的DNS 完善通知弹窗逻辑,从休眠中恢复过程中不再提示“有线网卡:xxx不可用”和“网络不可用”。 Closes #14000;#15619 --- ...-Improved-the-notification-logic.-Wi.patch | 48 +++ ...fy-DNS-Settings-and-display-DNS-deta.patch | 370 ++++++++++++++++++ kiran-control-panel.spec | 8 +- 3 files changed, 425 insertions(+), 1 deletion(-) create mode 100644 0012-fix-network-tray-Improved-the-notification-logic.-Wi.patch create mode 100644 0013-fix-network-Modify-DNS-Settings-and-display-DNS-deta.patch diff --git a/0012-fix-network-tray-Improved-the-notification-logic.-Wi.patch b/0012-fix-network-tray-Improved-the-notification-logic.-Wi.patch new file mode 100644 index 0000000..805d2a6 --- /dev/null +++ b/0012-fix-network-tray-Improved-the-notification-logic.-Wi.patch @@ -0,0 +1,48 @@ +From 5628b4b31eeb7493abe41bb9a6935955f0ca090a Mon Sep 17 00:00:00 2001 +From: luoqing +Date: Fri, 15 Sep 2023 16:19:15 +0800 +Subject: [PATCH] fix(network-tray):Improved the notification logic. "Wired + NIC: xxx is unavailable" and "Network is Unavailable" are no longer displayed + during sleep recovery. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +- 完善通知弹窗逻辑,从休眠中恢复过程中不再提示“有线网卡:xxx不可用”和“网络不可用”。 + +Close #15619 +--- + plugins/network/src/tray/network-tray.cpp | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +diff --git a/plugins/network/src/tray/network-tray.cpp b/plugins/network/src/tray/network-tray.cpp +index 7397e28..dd5ff12 100644 +--- a/plugins/network/src/tray/network-tray.cpp ++++ b/plugins/network/src/tray/network-tray.cpp +@@ -473,9 +473,21 @@ void NetworkTray::handleDeviceStateChanged(NetworkManager::Device::State newstat + } + } + +- // 设备变为不可用时,如果无线和有线均不可用则显示网络不可用的提示 +- if (newstate == Device::Unavailable || newstate == Device::Unmanaged || newstate == Device::UnknownState) ++ QSet unavailableStates = { ++ Device::Unavailable, ++ Device::Unmanaged, ++ Device::UnknownState ++ }; ++ ++ // 非休眠的情况下,从可用状态到不可用状态通知 ++ if (!unavailableStates.contains(oldstate) ++ && ++ unavailableStates.contains(newstate) ++ && ++ reason != Device::SleepingReason ++ ) + { ++ // 设备变为不可用时,如果无线和有线均不可用则显示网络不可用的提示 + KLOG_DEBUG() << "device is unavailable"; + if ((NetworkUtils::getAvailableDeviceList(Device::Ethernet).count() == 0) && + (NetworkUtils::getAvailableDeviceList(Device::Wifi).count() == 0)) +-- +2.33.0 + diff --git a/0013-fix-network-Modify-DNS-Settings-and-display-DNS-deta.patch b/0013-fix-network-Modify-DNS-Settings-and-display-DNS-deta.patch new file mode 100644 index 0000000..288d042 --- /dev/null +++ b/0013-fix-network-Modify-DNS-Settings-and-display-DNS-deta.patch @@ -0,0 +1,370 @@ +From 2fcd30a538df01ae8505cf5c1baf26d18b1d2cef Mon Sep 17 00:00:00 2001 +From: luoqing +Date: Mon, 18 Sep 2023 10:39:58 +0800 +Subject: [PATCH] fix(network):Modify DNS Settings and display DNS details +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +- 自动获取IP(DNS)后,网络详情显示自动获取到的DNS + 手动配置DNS,网络详情中DNS服务器仅显示手动配置的DNS + +Close #14000 +--- + .../connection-details-widget.cpp | 51 +++++-- + .../details-page/connection-details-widget.ui | 6 +- + .../src/plugin/setting-widget/ipv4-widget.cpp | 135 +++++++++--------- + .../src/plugin/setting-widget/ipv4-widget.ui | 8 +- + 4 files changed, 116 insertions(+), 84 deletions(-) + +diff --git a/plugins/network/src/plugin/details-page/connection-details-widget.cpp b/plugins/network/src/plugin/details-page/connection-details-widget.cpp +index d94b1bd..235c48d 100644 +--- a/plugins/network/src/plugin/details-page/connection-details-widget.cpp ++++ b/plugins/network/src/plugin/details-page/connection-details-widget.cpp +@@ -67,7 +67,7 @@ void ConnectionDetailsWidget::init() + void ConnectionDetailsWidget::initUI() + { + QList widgets = {ui->securityTypeWidget, ui->frequencyBandWidget, ui->channelWidget, ui->InterfaceWidget, +- ui->macWidget, ui->ipv4Widget, ui->gatewayWidget, ui->preferredDNSWidget, ui->subnetMaskWidget, ++ ui->macWidget, ui->ipv4Widget, ui->gatewayWidget, ui->DNSWidget, ui->subnetMaskWidget, + ui->ipv6Widget, ui->ipv6GatewayWidget, ui->prefixWidget, ui->rateWidget}; + + for (auto widget : widgets) +@@ -76,7 +76,7 @@ void ConnectionDetailsWidget::initUI() + } + + QList labels = {ui->securityType, ui->frequencyBand, ui->channel, ui->networkInterface, +- ui->mac, ui->ipv4, ui->ipv4Gateway, ui->preferredDNS, ui->subnetMask, ++ ui->mac, ui->ipv4, ui->ipv4Gateway, ui->DNS, ui->subnetMask, + ui->ipv6, ui->ipv6Gateway, ui->prefix, ui->rate}; + + for (auto label : labels) +@@ -151,25 +151,54 @@ void ConnectionDetailsWidget::setIpDetails() + ui->subnetMask->setText(netmask); + ui->ipv4Gateway->setText(gateway); + +- QString preferredDNS = "-"; + Dhcp4Config::Ptr dhcp = m_activeConnection->dhcp4Config(); + auto dhcpOptions = dhcp->options(); ++ ++ QStringList tmpDNS; ++ ++ QStringList dhcpDns; + if (!dhcpOptions.isEmpty()) + { + QVariant domainNameServers = dhcpOptions.value("domain_name_servers"); +- // 以空格为分隔 +- QStringList dns = domainNameServers.toString().split(" "); +- preferredDNS = dns.value(0); ++ dhcpDns = domainNameServers.toString().split(" "); + } +- else ++ ++ Ipv4Setting::Ptr ipv4Setting = m_connection->settings()->setting(Setting::Ipv4).dynamicCast(); ++ QList ipv4SettingDNS = ipv4Setting->dns(); ++ ++ QStringList manualDNS; ++ ++ for(auto &address : ipv4SettingDNS) ++ { ++ manualDNS << address.toString(); ++ } ++ /** ++ * NOTE: ++ * 1、自动获取IP(DNS)后,网络详情显示自动获取到的DNS ++ * 2、手动配置DNS,网络详情中DNS服务器仅显示手动配置的DNS ++ */ ++ ++ QString detailsDNS; ++ manualDNS.isEmpty() ? tmpDNS = dhcpDns : tmpDNS = manualDNS; ++ if(!tmpDNS.isEmpty()) + { +- Ipv4Setting::Ptr ipv4Setting = m_connection->settings()->setting(Setting::Ipv4).dynamicCast(); +- if (!ipv4Setting->dns().isEmpty()) ++ // 以空格为分隔,删除最后一个; ++ for(auto &dns : tmpDNS) + { +- preferredDNS = ipv4Setting->dns().value(0).toString(); ++ detailsDNS.append(dns); ++ detailsDNS.append(";"); + } ++ if(detailsDNS.endsWith(";")) ++ { ++ detailsDNS.remove(detailsDNS.size() - 1,1); ++ } ++ } ++ else ++ { ++ detailsDNS = "-"; + } +- ui->preferredDNS->setText(preferredDNS); ++ ++ ui->DNS->setText(detailsDNS); + + IpConfig ipV6Config = m_activeConnection->ipV6Config(); + IpAddress ipv6Address = ipV6Config.addresses().value(0); +diff --git a/plugins/network/src/plugin/details-page/connection-details-widget.ui b/plugins/network/src/plugin/details-page/connection-details-widget.ui +index c83af72..b781390 100644 +--- a/plugins/network/src/plugin/details-page/connection-details-widget.ui ++++ b/plugins/network/src/plugin/details-page/connection-details-widget.ui +@@ -518,7 +518,7 @@ + + + +- ++ + + + 0 +@@ -556,7 +556,7 @@ + + + +- Preferred DNS ++ DNS + + + +@@ -574,7 +574,7 @@ + + + +- ++ + + TextLabel + +diff --git a/plugins/network/src/plugin/setting-widget/ipv4-widget.cpp b/plugins/network/src/plugin/setting-widget/ipv4-widget.cpp +index 8c39794..8dc420f 100644 +--- a/plugins/network/src/plugin/setting-widget/ipv4-widget.cpp ++++ b/plugins/network/src/plugin/setting-widget/ipv4-widget.cpp +@@ -74,65 +74,68 @@ void Ipv4Widget::setErrorTips(KiranTips *errorTips) + + void Ipv4Widget::saveSettings() + { +- if (m_ipv4Setting != nullptr) ++ if (m_ipv4Setting == nullptr) + { +- IpAddress ipv4Address; +- Ipv4Setting::ConfigMethod method = ui->ipv4Method->currentData().value(); +- if (method == Ipv4Setting::ConfigMethod::Automatic) +- { +- m_ipv4Setting->setMethod(method); +- ipv4Address.setIp(QHostAddress("")); +- ipv4Address.setNetmask(QHostAddress("")); +- ipv4Address.setGateway(QHostAddress("")); +- m_ipv4Setting->setAddresses(QList() << ipv4Address); +- } +- else if (method == Ipv4Setting::ConfigMethod::Manual) +- { +- m_ipv4Setting->setMethod(method); ++ return; ++ } ++ ++ IpAddress ipv4Address; ++ Ipv4Setting::ConfigMethod method = ui->ipv4Method->currentData().value(); ++ if (method == Ipv4Setting::ConfigMethod::Automatic) ++ { ++ m_ipv4Setting->setMethod(method); ++ ipv4Address.setIp(QHostAddress("")); ++ ipv4Address.setNetmask(QHostAddress("")); ++ ipv4Address.setGateway(QHostAddress("")); ++ m_ipv4Setting->setAddresses(QList() << ipv4Address); ++ } ++ else if (method == Ipv4Setting::ConfigMethod::Manual) ++ { ++ m_ipv4Setting->setMethod(method); + +- ipv4Address.setIp(QHostAddress(ui->ipv4Address->text())); +- QString netMask = ui->ipv4Netmask->text(); +- if (!netMask.contains(".")) ++ ipv4Address.setIp(QHostAddress(ui->ipv4Address->text())); ++ QString netMask = ui->ipv4Netmask->text(); ++ if (!netMask.contains(".")) ++ { ++ int netPrefix = netMask.toInt(); ++ KLOG_DEBUG() << "netMask.toInt():" << netMask.toInt(); ++ if ((netPrefix > 0) & (netPrefix < 33)) + { +- int netPrefix = netMask.toInt(); +- KLOG_DEBUG() << "netMask.toInt():" << netMask.toInt(); +- if ((netPrefix > 0) & (netPrefix < 33)) +- { +- ipv4Address.setPrefixLength(netPrefix); +- } +- else +- { +- KLOG_DEBUG() << "Net prefix length error"; +- } ++ ipv4Address.setPrefixLength(netPrefix); + } + else + { +- ipv4Address.setNetmask(QHostAddress(netMask)); ++ KLOG_DEBUG() << "Net prefix length error"; + } +- +- ipv4Address.setGateway(QHostAddress(ui->ipv4Gateway->text())); +- KLOG_DEBUG() << "ipv4Address.ip():" << ipv4Address.ip(); +- KLOG_DEBUG() << "ipv4Address.netmask():" << ipv4Address.netmask(); +- KLOG_DEBUG() << "ipv4Address.prefixLength():" << ipv4Address.prefixLength(); +- KLOG_DEBUG() << "ipv4Address.gateway():" << ipv4Address.gateway(); +- +- QList ipv4AddresseList; +- ipv4AddresseList << ipv4Address; +- m_ipv4Setting->setAddresses(ipv4AddresseList); +- } +- +- QList ipv4DNS; +- if (!ui->ipv4PreferredDNS->text().isEmpty()) +- { +- ipv4DNS << QHostAddress(ui->ipv4PreferredDNS->text()); + } +- if (!ui->ipv4AlternateDNS->text().isEmpty()) ++ else + { +- ipv4DNS << QHostAddress(ui->ipv4AlternateDNS->text()); ++ ipv4Address.setNetmask(QHostAddress(netMask)); + } +- KLOG_DEBUG() << "ipv4DNS:" << ipv4DNS; +- m_ipv4Setting->setDns(ipv4DNS); ++ ++ ipv4Address.setGateway(QHostAddress(ui->ipv4Gateway->text())); ++ KLOG_DEBUG() << "ipv4Address.ip():" << ipv4Address.ip(); ++ KLOG_DEBUG() << "ipv4Address.netmask():" << ipv4Address.netmask(); ++ KLOG_DEBUG() << "ipv4Address.prefixLength():" << ipv4Address.prefixLength(); ++ KLOG_DEBUG() << "ipv4Address.gateway():" << ipv4Address.gateway(); ++ ++ QList ipv4AddresseList; ++ ipv4AddresseList << ipv4Address; ++ m_ipv4Setting->setAddresses(ipv4AddresseList); ++ } ++ ++ QList ipv4DNS; ++ if (!ui->ipv4FirstDNS->text().isEmpty()) ++ { ++ ipv4DNS << QHostAddress(ui->ipv4FirstDNS->text()); ++ } ++ if (!ui->ipv4SecondDNS->text().isEmpty()) ++ { ++ ipv4DNS << QHostAddress(ui->ipv4SecondDNS->text()); + } ++ KLOG_DEBUG() << "ipv4DNS:" << ipv4DNS; ++ m_ipv4Setting->setDns(ipv4DNS); ++ + } + + void Ipv4Widget::showSettings() +@@ -171,20 +174,20 @@ void Ipv4Widget::showSettings() + ui->ipv4Gateway->clear(); + } + } +- QString preferredDNS = ""; +- QString alternateDNS = ""; ++ QString firstDNS = ""; ++ QString secondDNS = ""; + if (!m_ipv4Setting->dns().isEmpty()) + { +- preferredDNS = m_ipv4Setting->dns().at(0).toString(); ++ firstDNS = m_ipv4Setting->dns().at(0).toString(); + if (m_ipv4Setting->dns().count() >= 2) + { +- alternateDNS = m_ipv4Setting->dns().at(1).toString(); ++ secondDNS = m_ipv4Setting->dns().at(1).toString(); + } + } +- KLOG_DEBUG() << "preferredDNS:" << preferredDNS; +- KLOG_DEBUG() << "alternateDNS:" << alternateDNS; +- ui->ipv4PreferredDNS->setText(preferredDNS); +- ui->ipv4AlternateDNS->setText(alternateDNS); ++ KLOG_DEBUG() << "firstDNS:" << firstDNS; ++ KLOG_DEBUG() << "secondDNS:" << secondDNS; ++ ui->ipv4FirstDNS->setText(firstDNS); ++ ui->ipv4SecondDNS->setText(secondDNS); + } + else + resetSettings(); +@@ -197,8 +200,8 @@ void Ipv4Widget::resetSettings() + ui->ipv4Address->clear(); + ui->ipv4Netmask->clear(); + ui->ipv4Gateway->clear(); +- ui->ipv4PreferredDNS->clear(); +- ui->ipv4AlternateDNS->clear(); ++ ui->ipv4FirstDNS->clear(); ++ ui->ipv4SecondDNS->clear(); + } + + void Ipv4Widget::clearPtr() +@@ -271,27 +274,27 @@ bool Ipv4Widget::isInputValid() + } + } + +- QString preferredDNS = ui->ipv4PreferredDNS->text(); +- if (!preferredDNS.isEmpty()) ++ QString firstDNS = ui->ipv4FirstDNS->text(); ++ if (!firstDNS.isEmpty()) + { +- if (!isIpv4AddressValid(preferredDNS)) ++ if (!isIpv4AddressValid(firstDNS)) + { + QString error = QString(tr("Ipv4 Preferred DNS invalid")); + m_errorTip->setText(error); +- m_errorTip->showTipAroundWidget(ui->ipv4PreferredDNS); ++ m_errorTip->showTipAroundWidget(ui->ipv4FirstDNS); + KLOG_DEBUG() << "Ipv4 Preferred DNS invalid"; + return false; + } + } + +- QString alternateDNS = ui->ipv4AlternateDNS->text(); +- if (!alternateDNS.isEmpty()) ++ QString secondDNS = ui->ipv4SecondDNS->text(); ++ if (!secondDNS.isEmpty()) + { +- if (!isIpv4AddressValid(alternateDNS)) ++ if (!isIpv4AddressValid(secondDNS)) + { + QString error = QString(tr("Ipv4 Alternate DNS invalid")); + m_errorTip->setText(error); +- m_errorTip->showTipAroundWidget(ui->ipv4AlternateDNS); ++ m_errorTip->showTipAroundWidget(ui->ipv4SecondDNS); + KLOG_DEBUG() << "Ipv4 Alternate DNS invalid"; + return false; + } +diff --git a/plugins/network/src/plugin/setting-widget/ipv4-widget.ui b/plugins/network/src/plugin/setting-widget/ipv4-widget.ui +index 026e26d..93b2355 100644 +--- a/plugins/network/src/plugin/setting-widget/ipv4-widget.ui ++++ b/plugins/network/src/plugin/setting-widget/ipv4-widget.ui +@@ -187,12 +187,12 @@ + + + +- Preferred DNS ++ DNS 1 + + + + +- ++ + + + 0 +@@ -220,12 +220,12 @@ + + + +- Alternate DNS ++ DNS 2 + + + + +- ++ + + + 0 +-- +2.33.0 + diff --git a/kiran-control-panel.spec b/kiran-control-panel.spec index 9a88456..17a37b6 100644 --- a/kiran-control-panel.spec +++ b/kiran-control-panel.spec @@ -1,6 +1,6 @@ Name: kiran-control-panel Version: 2.5.5 -Release: 9%{?dist} +Release: 10%{?dist} Summary: Kiran Control Panel Summary(zh_CN): Kiran桌面控制面板 @@ -18,6 +18,8 @@ Patch0008: 0008-fix-audio-tray-Fixed-an-issue-where-the-volume-tray-.patch Patch0009: 0009-fix-audio-The-Sink-Source-device-list-displays-only-.patch Patch0010: 0010-fix-kiran-control-panel-fits-the-Qt5.9.7-interface.patch Patch0011: 0011-fix-tray-icon-Fixed-an-issue-where-the-tray-icon-was.patch +Patch0012: 0012-fix-network-tray-Improved-the-notification-logic.-Wi.patch +Patch0013: 0013-fix-network-Modify-DNS-Settings-and-display-DNS-deta.patch BuildRequires: gcc-c++ BuildRequires: cmake >= 3.2 @@ -175,6 +177,10 @@ make %{?_smp_mflags} rm -rf %{buildroot} %changelog +* Mon Sep 18 2023 luoqing - 2.5.5-10 +- KYOS-F: Modify DNS Settings and display DNS details(#14000) +- KYOS-F: Improved the notification logic. "Wired NIC: xxx is unavailable" and "Network is Unavailable" are no longer displayed during sleep recovery.(#15619) + * Fri Sep 15 2023 liuxinhao - 2.5.5-9 - KYOS-F: Fixed an issue where the tray icon was not displayed due to late registration of DBus tray service(#14006,#11856) -- Gitee