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
Original file line number Diff line number Diff line change
Expand Up @@ -103,25 +103,7 @@ void ActiveAccountNetwork::initDevice()

void ActiveAccountNetwork::addDevice(const QSharedPointer<NetworkManager::Device> &device)
{
connect(device.data(), &NetworkManager::Device::activeConnectionChanged, this, [ this, device ] {
NetworkManager::ActiveConnection::Ptr activeConnection = device->activeConnection();
if (activeConnection.isNull())
return;

connect(activeConnection.data(), &NetworkManager::ActiveConnection::stateChanged, activeConnection.data(), [ this, device ](NetworkManager::ActiveConnection::State state) {
// 连接成功或者失败后,如果当前网络不是当前用户连接的网络,并且不是手动连接的网络,则断开并连接当前用户自己的网络
if (state != NetworkManager::ActiveConnection::State::Activated
&& state != NetworkManager::ActiveConnection::State::Deactivated)
return;

// 此处使用当前设备正在使用的活动的连接网络,这样避免了上一个网络在断开的时候,下方的判断中还是使用上一个网络的信息导致出错
NetworkManager::ActiveConnection::Ptr activeConnection = device->activeConnection();
if (activeConnection.isNull())
return;

onConnectionStateChanged(device, activeConnection);
}, Qt::UniqueConnection);
}, Qt::UniqueConnection);
connect(device.data(), &NetworkManager::Device::activeConnectionChanged, this, &ActiveAccountNetwork::onActiveConnectionChanged, Qt::UniqueConnection);
// 如果是无线网卡,则处理无线网络回复的重连
if (device->type() == NetworkManager::Device::Type::Wifi) {
NetworkManager::WirelessDevice::Ptr wirelessDevice = device.staticCast<NetworkManager::WirelessDevice>();
Expand Down Expand Up @@ -347,3 +329,38 @@ void ActiveAccountNetwork::onCollectionCreated(const QDBusObjectPath &path)
m_authenInfo.clear();
}
}

void ActiveAccountNetwork::onActiveConnectionChanged()
{
NetworkManager::Device *device = qobject_cast<NetworkManager::Device *>(sender());
if (!device) {
return;
}
NetworkManager::ActiveConnection::Ptr activeConnection = device->activeConnection();
if (activeConnection.isNull())
return;

connect(activeConnection.data(), &NetworkManager::ActiveConnection::stateChanged, this, &ActiveAccountNetwork::onStateChanged, Qt::UniqueConnection);
}

void ActiveAccountNetwork::onStateChanged(NetworkManager::ActiveConnection::State state)
{
NetworkManager::ActiveConnection::Ptr activeConnection(qobject_cast<NetworkManager::ActiveConnection *>(sender()));
if (!activeConnection) {
return;
}
// 连接成功或者失败后,如果当前网络不是当前用户连接的网络,并且不是手动连接的网络,则断开并连接当前用户自己的网络
if (state != NetworkManager::ActiveConnection::State::Activated && state != NetworkManager::ActiveConnection::State::Deactivated)
return;

QSharedPointer<NetworkManager::Device> device;
for (auto devUni : activeConnection->devices()) {
NetworkManager::Device::Ptr dev = NetworkManager::findNetworkInterface(devUni);
if (!dev.isNull() && (device->type() == NetworkManager::Device::Type::Wifi && device->type() == NetworkManager::Device::Type::Ethernet)) {
device = dev;
break;
}
}

onConnectionStateChanged(device, activeConnection);
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,11 @@
void activeNetwork(const QMap<QString, QString> &network, const QVariantMap &authenInfo);
bool secretIsPrepare() const;

private slots:

Check warning on line 48 in network-service-plugin/accountnetwork/session/accountnetwork/activeaccoutnetwork.h

View workflow job for this annotation

GitHub Actions / cppcheck

There is an unknown macro here somewhere. Configuration is required. If slots is a macro then please configure it.
void onAuthen(const QVariantMap &identity);
void onCollectionCreated(const QDBusObjectPath &path);
void onActiveConnectionChanged();
void onStateChanged(NetworkManager::ActiveConnection::State state);

private:
Account *m_account;
Expand Down
48 changes: 27 additions & 21 deletions network-service-plugin/system/networkinitialization.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -398,30 +398,14 @@ void NetworkInitialization::hideWirelessDevice(const QSharedPointer<NetworkManag
QDBusInterface dbusInter("org.freedesktop.NetworkManager", device->uni(), "org.freedesktop.NetworkManager.Device", QDBusConnection::systemBus());
dbusInter.setProperty("Managed", managed);
}
connect(device.data(), &NetworkManager::Device::managedChanged, this, [ device, managed ] {
if (device->managed() == managed)
return ;

qCDebug(DSM) << "device" << device->interfaceName() << "managed changed" << device->managed() << ", will set it managed" << managed;
QDBusInterface dbusInter("org.freedesktop.NetworkManager", device->uni(), "org.freedesktop.NetworkManager.Device", QDBusConnection::systemBus());
dbusInter.setProperty("Managed", managed);
}, Qt::UniqueConnection);
connect(device.data(), &NetworkManager::Device::managedChanged, this, &NetworkInitialization::onManagedChanged, Qt::UniqueConnection);
}

void NetworkInitialization::initDeviceConnection(const QSharedPointer<NetworkManager::WiredDevice> &device)
{
connect(device.data(), &NetworkManager::WiredDevice::interfaceFlagsChanged, this, [ this, device ] {
qCDebug(DSM) << "device" << device->interfaceName() << "interfaceFlags changed" << device->interfaceFlags();
addFirstConnection(device);
}, Qt::UniqueConnection);
connect(device.data(), &NetworkManager::WiredDevice::managedChanged, this, [ this, device ] {
qCDebug(DSM) << "device" << device->interfaceName() << "managed changed" << device->managed();
addFirstConnection(device);
}, Qt::UniqueConnection);
connect(device.data(), &NetworkManager::WiredDevice::carrierChanged, this, [ this, device ] {
qCDebug(DSM) << "device" << device->interfaceName() << "carrier changed" << device->carrier();
addFirstConnection(device);
}, Qt::UniqueConnection);
connect(device.data(), &NetworkManager::WiredDevice::interfaceFlagsChanged, this, &NetworkInitialization::onAddFirstConnection, Qt::UniqueConnection);
connect(device.data(), &NetworkManager::WiredDevice::managedChanged, this, &NetworkInitialization::onAddFirstConnection, Qt::UniqueConnection);
connect(device.data(), &NetworkManager::WiredDevice::carrierChanged, this, &NetworkInitialization::onAddFirstConnection, Qt::UniqueConnection);
}

void NetworkInitialization::checkAccountStatus()
Expand Down Expand Up @@ -479,7 +463,29 @@ void NetworkInitialization::onInitDeviceConnection()
default:
break;
}
}, Qt::UniqueConnection);
});
}

void NetworkInitialization::onAddFirstConnection()
{
QSharedPointer<NetworkManager::WiredDevice> device(qobject_cast<NetworkManager::WiredDevice *>(sender()));
qCDebug(DSM) << "device" << device->interfaceName() << " carrier:" << device->carrier() << " managed:" << device->managed() << " interfaceFlags:" << device->interfaceFlags();
addFirstConnection(device);
}

void NetworkInitialization::onManagedChanged()
{
NetworkManager::Device *device = qobject_cast<NetworkManager::Device *>(sender());
if (!device) {
return;
}
bool managed = SettingConfig::instance()->disableNetwork();
if (device->managed() == managed)
return;

qCDebug(DSM) << "device" << device->interfaceName() << "managed changed" << device->managed() << ", will set it managed" << managed;
QDBusInterface dbusInter("org.freedesktop.NetworkManager", device->uni(), "org.freedesktop.NetworkManager.Device", QDBusConnection::systemBus());
dbusInter.setProperty("Managed", managed);
}

void NetworkInitialization::onUserChanged(const QString &json)
Expand Down
2 changes: 2 additions & 0 deletions network-service-plugin/system/networkinitialization.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ private slots:
void onUserChanged(const QString &json);
void onUserAdded(const QString &json);
void onInitDeviceConnection();
void onAddFirstConnection();
void onManagedChanged();

private:
QStringList m_newConnectionNames;
Expand Down