fix: Fix failure to update network details after a newly inserted dev…#502
fix: Fix failure to update network details after a newly inserted dev…#502deepin-bot[bot] merged 1 commit intolinuxdeepin:masterfrom
Conversation
…ice connects to the network When a new device is inserted, its 'managed' property is false. After it becomes true, the device object is created, but the signals of the newly created device are not connected. As a result, when the device status changes, the network status is not updated. Log: Fix failure to update network details after a newly inserted device connects to the network PMS: BUG-286921 fix: 修复新插入设备连接网络后无法更新网络详情 新插入设备的时候,该设备的managed为false,等它变成true后再创建设备对象,并未连接新创建的设备的信号,所以当设备状态变化的时候,没有更新网络状态 Log: 修复新插入设备连接网络后无法更新网络详情 PMS: BUG-286921
Reviewer's guide (collapsed on small PRs)Reviewer's GuideConnects status-related signals for newly created network devices so that network details are updated when a hot‑plugged device becomes managed and its state changes. Sequence diagram for updating network details on newly created device status changessequenceDiagram
actor User
participant Kernel as Kernel/OS
participant NetworkManager as NetworkManager
participant NetworkManagerProcesser as NetworkManagerProcesser
participant NetworkDeviceBase as NetworkDeviceBase
User->>Kernel: Insert network device
Kernel-->>NetworkManager: Notify new device path
NetworkManager-->>NetworkManagerProcesser: createOrRemoveDevice(path)
activate NetworkManagerProcesser
NetworkManagerProcesser->>NetworkManagerProcesser: Check managed flag (false)
NetworkManagerProcesser-->>NetworkManager: Defer device creation
deactivate NetworkManagerProcesser
NetworkDeviceBase-->>NetworkManager: Device becomes managed (true)
NetworkManager-->>NetworkManagerProcesser: createOrRemoveDevice(path)
activate NetworkManagerProcesser
NetworkManagerProcesser->>NetworkManager: Get device info
NetworkManager-->>NetworkManagerProcesser: Device object
NetworkManagerProcesser->>NetworkManagerProcesser: deviceExist(uni) == false
NetworkManagerProcesser->>NetworkManagerProcesser: createDevice(device)
NetworkManagerProcesser-->>NetworkDeviceBase: newDevice
NetworkManagerProcesser->>NetworkDeviceBase: connect(deviceStatusChanged, onUpdateNetworkDetail)
NetworkManagerProcesser->>NetworkDeviceBase: connect(activeConnectionChanged, onUpdateNetworkDetail)
NetworkManagerProcesser->>NetworkDeviceBase: connect(ipV4Changed, onUpdateNetworkDetail)
NetworkManagerProcesser->>NetworkManagerProcesser: m_devices << newDevice
NetworkManagerProcesser->>NetworkManagerProcesser: sortDevice()
NetworkManagerProcesser->>NetworkManagerProcesser: updateDeviceName()
deactivate NetworkManagerProcesser
NetworkDeviceBase-->>NetworkDeviceBase: Status or connection or IPv4 changes
NetworkDeviceBase-->>NetworkManagerProcesser: deviceStatusChanged/activeConnectionChanged/ipV4Changed
activate NetworkManagerProcesser
NetworkManagerProcesser->>NetworkManagerProcesser: onUpdateNetworkDetail()
NetworkManagerProcesser-->>NetworkManager: Updated network details
deactivate NetworkManagerProcesser
Updated class diagram for NetworkManagerProcesser and NetworkDeviceBase signal connectionsclassDiagram
class NetworkDeviceBase {
<<QObject>>
+QString uni()
+void deviceStatusChanged()
+void activeConnectionChanged()
+void ipV4Changed()
}
class NetworkManagerProcesser {
<<QObject>>
-QList~NetworkDeviceBase*~ m_devices
+bool deviceExist(QString uni)
+NetworkDeviceBase* createDevice(NetworkDeviceBase* device)
+void createOrRemoveDevice(QString path)
+void sortDevice()
+void updateDeviceName()
+void onUpdateNetworkDetail()
}
NetworkManagerProcesser "1" o-- "*" NetworkDeviceBase : manages
NetworkDeviceBase ..> NetworkManagerProcesser : emits deviceStatusChanged
NetworkDeviceBase ..> NetworkManagerProcesser : emits activeConnectionChanged
NetworkDeviceBase ..> NetworkManagerProcesser : emits ipV4Changed
NetworkManagerProcesser ..> NetworkDeviceBase : connect signals in createOrRemoveDevice
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Hey - I've left some high level feedback:
- If existing devices are wired to
onUpdateNetworkDetailin a central helper (e.g., when initially populatingm_devices), consider reusing that helper here to keep the signal connections consistent and avoid duplication. - Double‑check that all relevant
NetworkDeviceBasesignals that should trigger a network detail update are connected here (for parity with already‑managed devices), so newly inserted devices don’t diverge in behavior over time.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- If existing devices are wired to `onUpdateNetworkDetail` in a central helper (e.g., when initially populating `m_devices`), consider reusing that helper here to keep the signal connections consistent and avoid duplication.
- Double‑check that all relevant `NetworkDeviceBase` signals that should trigger a network detail update are connected here (for parity with already‑managed devices), so newly inserted devices don’t diverge in behavior over time.Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
deepin pr auto review这段代码主要是在创建新网络设备时,增加了三个信号与槽的连接,用于更新网络详情。以下是对这段代码的审查意见,分为语法逻辑、代码质量、代码性能和代码安全四个方面: 1. 语法逻辑
2. 代码质量
3. 代码性能
4. 代码安全
总结与代码示例建议修改后的代码片段(包含防抖动和 UniqueConnection): // 假设在类定义中有一个成员变量: QTimer *m_updateDetailTimer;
// 并在构造函数中初始化并连接:
// m_updateDetailTimer = new QTimer(this);
// m_updateDetailTimer->setSingleShot(true);
// connect(m_updateDetailTimer, &QTimer::timeout, this, &NetworkManagerProcesser::onUpdateNetworkDetail);
void NetworkManagerProcesser::createOrRemoveDevice(const QString &path)
{
// ... 前面的代码 ...
if (!deviceExist(device->uni())) {
NetworkDeviceBase *newDevice = createDevice(device);
if (newDevice) {
// 使用 UniqueConnection 防止潜在的重连(防御性编程)
connect(newDevice, &NetworkDeviceBase::deviceStatusChanged, this, [this]() {
// 触发定时器,200ms 后执行,期间若再次触发则重置
if (m_updateDetailTimer) {
m_updateDetailTimer->start(200);
}
}, Qt::UniqueConnection);
connect(newDevice, &NetworkDeviceBase::activeConnectionChanged, this, [this]() {
if (m_updateDetailTimer) {
m_updateDetailTimer->start(200);
}
}, Qt::UniqueConnection);
connect(newDevice, &NetworkDeviceBase::ipV4Changed, this, [this]() {
if (m_updateDetailTimer) {
m_updateDetailTimer->start(200);
}
}, Qt::UniqueConnection);
m_devices << newDevice;
sortDevice();
updateDeviceName();
// ... 后面的代码 ...
}
}
}或者,如果不想引入 Lambda 和定时器,保持原样但确保内存安全: void NetworkManagerProcesser::createOrRemoveDevice(const QString &path)
{
// ... 前面的代码 ...
if (!deviceExist(device->uni())) {
NetworkDeviceBase *newDevice = createDevice(device);
if (newDevice) {
// 使用 UniqueConnection
connect(newDevice, &NetworkDeviceBase::deviceStatusChanged, this, &NetworkManagerProcesser::onUpdateNetworkDetail, Qt::UniqueConnection);
connect(newDevice, &NetworkDeviceBase::activeConnectionChanged, this, &NetworkManagerProcesser::onUpdateNetworkDetail, Qt::UniqueConnection);
connect(newDevice, &NetworkDeviceBase::ipV4Changed, this, &NetworkManagerProcesser::onUpdateNetworkDetail, Qt::UniqueConnection);
m_devices << newDevice;
sortDevice();
updateDeviceName();
// ... 后面的代码 ...
}
}
}并在析构函数中确保清理: NetworkManagerProcesser::~NetworkManagerProcesser() {
qDeleteAll(m_devices);
m_devices.clear();
} |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: mhduiy, ut003640 The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
|
/forcemerge |
|
This pr force merged! (status: unstable) |
…ice connects to the network
When a new device is inserted, its 'managed' property is false. After it becomes true, the device object is created, but the signals of the newly created device are not connected. As a result, when the device status changes, the network status is not updated.
Log: Fix failure to update network details after a newly inserted device connects to the network
PMS: BUG-286921
fix: 修复新插入设备连接网络后无法更新网络详情
新插入设备的时候,该设备的managed为false,等它变成true后再创建设备对象,并未连接新创建的设备的信号,所以当设备状态变化的时候,没有更新网络状态
Log: 修复新插入设备连接网络后无法更新网络详情
PMS: BUG-286921
Summary by Sourcery
Bug Fixes: