Skip to content

fix: Gray out update transfer interface when updates are disabled#294

Merged
ut005973 merged 1 commit into
masterfrom
develop/dcc-update-plugin-private
May 9, 2026
Merged

fix: Gray out update transfer interface when updates are disabled#294
ut005973 merged 1 commit into
masterfrom
develop/dcc-update-plugin-private

Conversation

@ut005973

@ut005973 ut005973 commented May 9, 2026

Copy link
Copy Markdown
Contributor

[V25 2500U1][Update Management System][Control Center Update Client][Tenth Round Testing][System Update][Public Network][Control Center][System Update] When checking for updates is turned off, the transfer optimization related configuration items should be grayed out and non-operable

Log: As above
Bug: https://pms.uniontech.com/bug-view-360209.html
Influence: Affects the update transfer interface when updates are disabled

fix: 更新被禁用时更新传递界面置灰
【V25 2500U1】【更新管理系统】【控制中心更新客户端】【第十轮测试】【系统更新】【公网】【控制中心】【系统更新】关闭检查更新,传递优化相关配置项需要置灰不可操作

Log:如上所述
Bug:https://pms.uniontech.com/bug-view-360209.html Influence:影响更新被禁用时更新传递界面

[V25 2500U1][Update Management System][Control Center Update Client][Tenth Round Testing][System Update][Public Network][Control Center][System Update] When checking for updates is turned off, the transfer optimization related configuration items should be grayed out and non-operable

Log: As above
Bug: https://pms.uniontech.com/bug-view-360209.html
Influence: Affects the update transfer interface when updates are disabled

fix: 更新被禁用时更新传递界面置灰
【V25 2500U1】【更新管理系统】【控制中心更新客户端】【第十轮测试】【系统更新】【公网】【控制中心】【系统更新】关闭检查更新,传递优化相关配置项需要置灰不可操作

Log:如上所述
Bug:https://pms.uniontech.com/bug-view-360209.html
Influence:影响更新被禁用时更新传递界面
@deepin-ci-robot

Copy link
Copy Markdown

deepin pr auto review

这份代码变更主要涉及更新设置界面的UI逻辑控制、以及插件显示名称和提示文本的国际化修改。我将从语法逻辑、代码质量、代码性能和代码安全四个方面进行审查。

1. 语法逻辑

UpdateSetting.qml

  • 修改点:在多个 DccObjectenabled 属性中增加了 && !dccData.model().updateProhibited 的判断条件。
  • 审查意见:逻辑正确。当系统更新被禁止(updateProhibited 为 true)时,禁用相关的更新控制项(如传递优化、上传限速、下载限速),防止用户在禁止更新的状态下误操作这些子功能。这是一个合理的逻辑补充。

privatelastoreplugin.cpp & tipswidget.cpp

  • 修改点:修改了 tr() 中的源字符串。
  • 审查意见:语法正确。Qt 的 tr() 函数用于提取翻译文本,修改源字符串是更新文案的标准做法。

翻译文件 (.ts)

  • 修改点:同步更新了源字符串和对应的翻译。
  • 审查意见:逻辑正确。翻译文件与源代码中的 tr() 字符串保持一致是国际化的基本要求。

2. 代码质量

UpdateSetting.qml

  • 重复代码!dccData.model().updateProhibited 这个条件在代码中出现了 4 次(第 338, 357, 386, 490 行)。
  • 改进建议:虽然 QML 中很难像 C++ 那样定义局部变量或辅助函数来封装这个逻辑,但这种重复增加了维护成本。如果未来判断条件变更(例如需要检查另一个标志位),需要修改多处。建议确认 dccData.model() 是否可以增加一个聚合属性(如 canModifyUpdateSettings),在后端 C++ 模型中统一封装这些状态判断,前端只需判断这一个属性。

tipswidget.cpp

  • 硬编码字符串org.deepin.dde.lastore 等字符串直接写在代码中。
  • 改进建议:建议将这些常量定义为类的静态常量或宏定义,避免拼写错误,并提高代码可读性。

3. 代码性能

  • UpdateSetting.qml:新增的 enabled 绑定依赖于 dccData.model().updateProhibited。这意味着每当 updateProhibited 属性变化时,QML 引擎需要重新评估这些绑定。考虑到这是 UI 属性绑定,且通常只在特定状态切换时触发,性能影响可以忽略不计。
  • 整体:本次变更不涉及循环、复杂计算或高频调用,对性能无负面影响。

4. 代码安全

  • UpdateSetting.qml
    • 增加的 updateProhibited 检查提升了安全性。它确保了即使前端 UI 被绕过或状态异常,只要后端模型标记了更新被禁止,这些控件就会处于禁用状态。这是一种良好的防御性编程实践。
    • 注意:前端禁用控件仅是 UI 层面的防护。必须确保后端(C++ 模型或服务端)在处理实际的更新、P2P 开启、限速设置等请求时,同样会校验 updateProhibited 状态,以防止通过命令行或其他 API 直接调用修改设置。

总结与具体改进建议

这份代码变更整体质量良好,逻辑清晰,修复了更新被禁止时 UI 状态不一致的问题,并优化了用户提示文案。

建议的改进代码(针对 UpdateSetting.qml 的重复逻辑问题):

虽然不能直接在 QML 中定义函数,但可以通过绑定表达式的优化来减少视觉上的重复(如果逻辑允许)。不过在此处,最根本的优化在于后端模型。

C++ 模型侧优化建议(伪代码):

假设 dccData.model() 对应的 C++ 类为 UpdateModel,建议在 updateModel.h/cpp 中添加:

// updateModel.h
class UpdateModel : public QObject {
    Q_OBJECT
    Q_PROPERTY(bool updateProhibited READ updateProhibited NOTIFY updateProhibitedChanged)
    // 新增一个聚合属性,用于判断是否允许修改更新设置
    Q_PROPERTY(bool canModifyUpdateSettings READ canModifyUpdateSettings NOTIFY updateProhibitedChanged) 

public:
    bool updateProhibited() const;
    bool canModifyUpdateSettings() const {
        // 如果有其他条件,也可以在这里聚合,例如 !isPrivateUpdate && !updateProhibited
        return !m_updateProhibited; 
    }
    // ...
};

QML 侧优化后的代码:

// 修改前
enabled: !dccData.model().isPrivateUpdate && !dccData.model().updateProhibited

// 修改后 (如果后端添加了 canModifyUpdateSettings)
enabled: !dccData.model().isPrivateUpdate && dccData.model().canModifyUpdateSettings

或者更进一步,如果 isPrivateUpdate 也是禁止修改的条件之一,后端可以直接封装:

bool canModifyDeliverySettings() const {
    return !m_isPrivateUpdate && !m_updateProhibited;
}

这样 QML 侧只需写:

enabled: dccData.model().canModifyDeliverySettings

关于文案修改的补充:
将 "Private Lastore" 修改为 "Private Update"(私有化更新),将 "Shutdown update" 修改为 "Updates will begin on the next shutdown or restart"(将在下次关机/重启时开始更新),这些修改使得表述更加专业和清晰,有助于用户理解系统状态,属于积极的改进。

@deepin-ci-robot

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: ut005973, xionglinlin

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@ut005973 ut005973 merged commit c6e1f85 into master May 9, 2026
14 of 17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants