Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions dcc-network/qml/PageAppProxy.qml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ import org.deepin.dcc.network 1.0
DccObject {
id: root
property var item: null
property bool proxyEnable: item.isEnabled
property var config: item.config
property bool proxyEnable: item && item.isEnabled
property var config: item ? item.config : {}
property bool urlAlert: false
property bool portAlert: false

Expand Down
29 changes: 12 additions & 17 deletions net-view/operation/private/netmanagerthreadprivate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -538,8 +538,7 @@ void NetManagerThreadPrivate::doInit()
connect(ConfigSetting::instance(), &ConfigSetting::enableAirplaneModeChanged, this, &NetManagerThreadPrivate::getAirplaneModeEnabled);
QDBusConnection::systemBus().connect("org.deepin.dde.Bluetooth1", "/org/deepin/dde/Bluetooth1", "org.deepin.dde.Bluetooth1", "AdapterAdded", this, SLOT(getAirplaneModeEnabled()));
QDBusConnection::systemBus().connect("org.deepin.dde.Bluetooth1", "/org/deepin/dde/Bluetooth1", "org.deepin.dde.Bluetooth1", "AdapterRemoved", this, SLOT(getAirplaneModeEnabled()));
QDBusConnection::systemBus()
.connect("org.deepin.dde.AirplaneMode1", "/org/deepin/dde/AirplaneMode1", "org.freedesktop.DBus.Properties", "PropertiesChanged", this, SLOT(onAirplaneModeEnabledPropertiesChanged(QString, QVariantMap, QStringList)));
QDBusConnection::systemBus().connect("org.deepin.dde.AirplaneMode1", "/org/deepin/dde/AirplaneMode1", "org.freedesktop.DBus.Properties", "PropertiesChanged", this, SLOT(onAirplaneModeEnabledPropertiesChanged(QString, QVariantMap, QStringList)));
}
// DSL
if (m_flags.testFlags(NetType::NetManagerFlag::Net_DSL)) {
Expand Down Expand Up @@ -1071,13 +1070,13 @@ void NetManagerThreadPrivate::doGetConnectInfo(const QString &id, NetType::NetIt
if (!dbusSettingsMap.isError() && dbusSettingsMap.value().contains("ipv6")) {
QVariantMap ipv6Data = dbusSettingsMap.value().value("ipv6");
QVariantMap ipv6Map = retParam["ipv6"].value<QVariantMap>();

// 处理IPv6 gateway
if (ipv6->method() == Ipv6Setting::Manual && ipv6Data.contains("gateway")) {
QString gateway = ipv6Data.value("gateway").toString();
ipv6Map.insert("gateway", gateway);
}

// 处理IPv6 DNS - 首先从NetworkManager设置中直接读取
const QList<QHostAddress> &ipv6DnsFromSettings = ipv6->dns();
if (!ipv6DnsFromSettings.isEmpty()) {
Expand All @@ -1099,7 +1098,7 @@ void NetManagerThreadPrivate::doGetConnectInfo(const QString &id, NetType::NetIt
ipv6Map.insert("dns", ipv6DnsList);
}
}

retParam["ipv6"] = ipv6Map;
}

Expand Down Expand Up @@ -1182,13 +1181,13 @@ void NetManagerThreadPrivate::doGetConnectInfo(const QString &id, NetType::NetIt
if (!dbusSettingsReply.isError() && dbusSettingsReply.value().contains("ipv6")) {
QVariantMap ipv6Data = dbusSettingsReply.value().value("ipv6");
QVariantMap ipv6Map = retParam["ipv6"].value<QVariantMap>();

// 处理IPv6 gateway
if (ipv6->method() == Ipv6Setting::Manual && ipv6Data.contains("gateway")) {
QString gateway = ipv6Data.value("gateway").toString();
ipv6Map.insert("gateway", gateway);
}

// 处理IPv6 DNS - 首先从NetworkManager设置中直接读取
const QList<QHostAddress> &ipv6DnsFromSettings = ipv6->dns();
if (!ipv6DnsFromSettings.isEmpty()) {
Expand All @@ -1210,7 +1209,7 @@ void NetManagerThreadPrivate::doGetConnectInfo(const QString &id, NetType::NetIt
ipv6Map.insert("dns", ipv6DnsList);
}
}

retParam["ipv6"] = ipv6Map;
}

Expand Down Expand Up @@ -1487,7 +1486,7 @@ void NetManagerThreadPrivate::doSetConnectInfo(const QString &id, NetType::NetIt
pSetting->setParent(map["pppoe"]["parent"].toString());
pSetting->setInitialized(true);
}

// 手动处理IPv6 DNS设置 - 确保正确初始化
if (map.contains("ipv6")) {
QVariant ipv6Variant = map["ipv6"];
Expand All @@ -1499,7 +1498,7 @@ void NetManagerThreadPrivate::doSetConnectInfo(const QString &id, NetType::NetIt
QStringList ipv6DnsStrings = dnsVariant.toStringList();
if (!ipv6DnsStrings.isEmpty()) {
NetworkManager::Ipv6Setting::Ptr ipv6Setting = settings->setting(Setting::SettingType::Ipv6).staticCast<NetworkManager::Ipv6Setting>();

// 转换字符串列表为QHostAddress列表
QList<QHostAddress> ipv6DnsAddresses;
for (const QString &dnsStr : ipv6DnsStrings) {
Expand All @@ -1508,11 +1507,11 @@ void NetManagerThreadPrivate::doSetConnectInfo(const QString &id, NetType::NetIt
ipv6DnsAddresses.append(addr);
}
}

if (!ipv6DnsAddresses.isEmpty()) {
ipv6Setting->setDns(ipv6DnsAddresses);
ipv6Setting->setIgnoreAutoDns(true);
ipv6Setting->setInitialized(true); // 关键!确保设置被初始化
ipv6Setting->setInitialized(true); // 关键!确保设置被初始化
}
}
}
Expand Down Expand Up @@ -2374,11 +2373,7 @@ void NetManagerThreadPrivate::onDSLAdded(const QList<DSLItem *> &dsls)
void NetManagerThreadPrivate::onDSLRemoved(const QList<DSLItem *> &dsls)
{
for (auto &&item : dsls) {
NetConnectionItemPrivate *connItem = NetItemNew(ConnectionItem, item->connection()->path());
connItem->updatename(item->connection()->id());
connItem->updatestatus(toNetConnectionStatus(item->status()));
connItem->item()->moveToThread(m_parentThread);
Q_EMIT itemAdded("NetDSLControlItem", connItem);
Q_EMIT itemRemoved(item->connection()->path());
}
}

Expand Down
8 changes: 3 additions & 5 deletions src/impl/networkmanager/dslcontrollernm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,7 @@ void DSLController_NM::connectionAppeared(const NetworkManager::WiredDevice::Ptr
});

if (itConnection != connections.end()) {
DSLItem *dslItem = addPppoeConnection(wiredDevice, *itConnection);
if (dslItem)
Q_EMIT itemAdded({dslItem});
addPppoeConnection(wiredDevice, *itConnection);
}
}

Expand Down Expand Up @@ -175,7 +173,6 @@ DSLItem *DSLController_NM::addPppoeConnection(NetworkManager::WiredDevice::Ptr d
DSLItem *item = new DSLItem();
item->setConnection(itemJson(connection));
item->updateTimeStamp(connection->settings()->timestamp());
m_dslItems << item;

// 当连接的名称发送变化的时候,需要更新界面的显示
connect(connection.data(), &NetworkManager::Connection::updated, item, [ this, item, itemJson, connection ] {
Expand All @@ -184,11 +181,12 @@ DSLItem *DSLController_NM::addPppoeConnection(NetworkManager::WiredDevice::Ptr d
Q_EMIT itemChanged({ item });
});

m_dslItems << item;
// 按照ID进行排序
std::sort(m_dslItems.begin(), m_dslItems.end(), [](DSLItem *item1, DSLItem *item2) {
return item1->connection()->id() < item2->connection()->id();
});

Q_EMIT itemAdded({item});
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (bug_risk): Emitting 'itemAdded' unconditionally may emit null items.

Previously, 'itemAdded' was only emitted for non-null DSLItems. Now, emitting unconditionally could add null or invalid items. Please restore the null check or ensure 'item' is always valid before emitting.

return item;
}

Expand Down