Skip to content

fix: fix update page display issues#233

Merged
xionglinlin merged 1 commit intolinuxdeepin:masterfrom
xionglinlin:master
Feb 9, 2026
Merged

fix: fix update page display issues#233
xionglinlin merged 1 commit intolinuxdeepin:masterfrom
xionglinlin:master

Conversation

@xionglinlin
Copy link
Copy Markdown
Contributor

  1. Fixed UI display logic in updateCheckUpdateUi() to handle UpdatesAvailable status
  2. Removed redundant status setting and UI update calls in onCheckUpdateStatusChanged()
  3. Ensured proper UI state transitions during update checking process

Log: Fixed abnormal display issues on the update check page

Influence:

  1. Test update checking process from start to completion
  2. Verify UI displays correctly when updates are available
  3. Check that "Check Again" button appears properly in all states
  4. Verify system status messages show correctly
  5. Test transition between checking, available, and updated states

fix: 修复更新页面显示异常问题

  1. 修复 updateCheckUpdateUi() 中的 UI 显示逻辑,正确处理 UpdatesAvailable 状态
  2. 移除 onCheckUpdateStatusChanged() 中冗余的状态设置和 UI 更新调用
  3. 确保更新检查过程中的 UI 状态转换正确

Log: 修复更新检查页面显示异常问题

Influence:

  1. 测试从开始到完成的更新检查流程
  2. 验证有可用更新时 UI 显示正确
  3. 检查"再次检查"按钮在所有状态下正确显示
  4. 验证系统状态消息正确显示
  5. 测试检查中、有可用更新、已更新状态之间的转换

PMS: BUG-350187

@deepin-bot
Copy link
Copy Markdown

deepin-bot Bot commented Feb 5, 2026

TAG Bot

New tag: 1.0.43
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #234

1. Fixed UI display logic in updateCheckUpdateUi() to handle
UpdatesAvailable status
2. Removed redundant status setting and UI update calls in
onCheckUpdateStatusChanged()
3. Ensured proper UI state transitions during update checking process

Log: Fixed abnormal display issues on the update check page

Influence:
1. Test update checking process from start to completion
2. Verify UI displays correctly when updates are available
3. Check that "Check Again" button appears properly in all states
4. Verify system status messages show correctly
5. Test transition between checking, available, and updated states

fix: 修复更新页面显示异常问题

1. 修复 updateCheckUpdateUi() 中的 UI 显示逻辑,正确处理
UpdatesAvailable 状态
2. 移除 onCheckUpdateStatusChanged() 中冗余的状态设置和 UI 更新调用
3. 确保更新检查过程中的 UI 状态转换正确

Log: 修复更新检查页面显示异常问题

Influence:
1. 测试从开始到完成的更新检查流程
2. 验证有可用更新时 UI 显示正确
3. 检查"再次检查"按钮在所有状态下正确显示
4. 验证系统状态消息正确显示
5. 测试检查中、有可用更新、已更新状态之间的转换

PMS: BUG-350187
@deepin-ci-robot
Copy link
Copy Markdown

deepin pr auto review

这段代码 diff 主要涉及系统更新模块中状态更新和 UI 刷新逻辑的修改。经过仔细审查,以下是从语法逻辑、代码质量、代码性能和代码安全四个方面的详细审查意见及改进建议:

1. 语法逻辑审查

  • 问题点 1:UI 状态逻辑可能存在误导 (updatemodel.cpp)

    • 代码
      case Updated:
      case UpdatesAvailable:
          qCDebug(logDccUpdatePlugin) << "Setting UI for Updated status";
          setCheckBtnText(tr("Check Again"));
          setCheckUpdateErrTips(tr("Your system is up to date"));
    • 分析:将 UpdatesAvailable(有可用更新)的状态与 Updated(已是最新)的状态合并处理,且都显示 "Your system is up to date"(您的系统已是最新)。这在逻辑上是矛盾的。如果 UpdatesAvailable 被触发,通常意味着有新包可安装,提示"已是最新"会误导用户。
    • 建议:请确认 UpdatesAvailable 状态下的 UI 表现。如果确实有更新,应该提示有更新可用,而不是提示已是最新。如果这里合并是为了复用按钮文本,建议至少修改日志输出和提示语,或者拆分 case 处理。
  • 问题点 2:状态设置与清理的顺序 (updatework.cpp)

    • 代码
      if (reply.isError()) {
          // ...
          m_model->setCheckUpdateStatus(CheckingFailed);
          cleanLaStoreJob(m_checkUpdateJob);
          // ...
      }
    • 分析:在错误处理分支中,先设置了状态,再清理了 Job。这通常是合理的,但在 onCheckUpdateStatusChanged 的 "end" 分支中:
      } else if (value == "end") {
          refreshLastTimeAndCheckCircle();
          m_model->setCheckUpdateStatus(UpdatesStatus(m_model->lastStatus()));
          deleteJob(m_checkUpdateJob);
          m_doCheckUpdates = false;
      }
      这里删除了 m_checkUpdateJob。如果在 Job 删除后,m_model->lastStatus() 还被其他异步操作依赖,可能会有问题。不过目前看起来逻辑闭环是完整的。
  • 问题点 3:UI 更新逻辑的缺失 (updatework.cpp)

    • 代码:删除了 m_model->updateCheckUpdateUi();
    • 分析:在 onCheckUpdateStatusChanged 的 "end" 分支中,代码删除了显式调用 updateCheckUpdateUi() 的行。
      • 如果 setCheckUpdateStatus 内部已经通过信号槽机制自动触发了 UI 更新,那么删除显式调用是好的(去重)。
      • 如果 setCheckUpdateStatus 仅仅是设置数据,没有触发 UI 刷新,那么删除这一行会导致 UI 状态在检查结束时不同步(例如按钮状态不回弹、进度条不消失等)。
    • 建议:必须确认 UpdateModel::setCheckUpdateStatus 的实现。如果它没有发射信号通知 UI 更新,则这里删除 updateCheckUpdateUi() 是一个 Bug,会导致界面卡在"检查中"的状态。

2. 代码质量审查

  • 问题点 1:魔法字符串

    • 代码value == "end"value == "success"
    • 分析:直接比较字符串字面量容易出错(拼写错误、大小写敏感)。
    • 建议:建议定义常量或枚举,例如 static const QString STATUS_END = "end";,以提高代码可维护性。
  • 问题点 2:状态同步一致性

    • 代码
      m_model->setLastStatus(CheckingSucceed, __LINE__);
      m_model->setCheckUpdateStatus(CheckingSucceed);
    • 分析:在 updatework.cpp 的 "success" 分支中,删除了这两行设置状态的代码,改为调用 setUpdateInfo()。这意味着 setUpdateInfo() 内部必须负责设置这些状态。如果 setUpdateInfo() 逻辑复杂,这种隐式的状态依赖会降低代码可读性。
    • 建议:确保 setUpdateInfo() 的注释清晰说明其副作用,或者保持状态设置的显式调用,仅在 setUpdateInfo 中处理数据填充。

3. 代码性能审查

  • 审查结果:本次修改不涉及明显的性能瓶颈。主要是逻辑控制流的变更,没有引入复杂的循环或高频调用的资源消耗。

4. 代码安全审查

  • 问题点 1:潜在的空指针/野指针风险
    • 代码deleteJob(m_checkUpdateJob);
    • 分析:代码中多次对 m_checkUpdateJob 进行清理(cleanLaStoreJobdeleteJob)。需要确保在多线程或异步回调(如 DBus 信号)中,Job 对象的生命周期管理是安全的。如果在 Job 已经被删除后,又有回调触发了 onCheckUpdateStatusChanged,可能会导致崩溃。
    • 建议:在 deleteJob 之后,建议立即将 m_checkUpdateJob 置为 nullptr,并在使用前进行检查(虽然 Qt 的对象树机制可能已处理部分问题,但显式置空更安全)。

总结与改进建议代码

核心建议

  1. 修正 updatemodel.cpp 中的逻辑矛盾:区分"已是最新"和"有可用更新"的提示。
  2. 确认 UI 刷新机制:确保删除 updateCheckUpdateUi() 后,UI 依然能正确响应状态变化。
  3. 增强 Job 生命周期管理:置空指针防止悬垂引用。

改进后的代码示例(针对 updatemodel.cpp 的逻辑修正):

// src/dcc-update-plugin/operation/updatemodel.cpp
void UpdateModel::updateCheckUpdateUi()
{
    // ... other cases ...
    case Updated:
        qCDebug(logDccUpdatePlugin) << "Setting UI for Updated status";
        setCheckBtnText(tr("Check Again"));
        setCheckUpdateErrTips(tr("Your system is up to date")); // 确实是最新
        break;
    case UpdatesAvailable:
        qCDebug(logDccUpdatePlugin) << "Setting UI for UpdatesAvailable status";
        setCheckBtnText(tr("Update Now")); // 或者是 "Install Updates",视具体需求而定
        setCheckUpdateErrTips(tr("Updates are available")); // 提示有更新
        break;
    // ... other cases ...
}

改进后的代码示例(针对 updatework.cpp 的安全性与逻辑):

// src/dcc-update-plugin/operation/updatework.cpp
void UpdateWorker::onCheckUpdateStatusChanged(const QString& value)
{
    // ...
    } else if (value == "end") {
        refreshLastTimeAndCheckCircle();
        m_model->setCheckUpdateStatus(UpdatesStatus(m_model->lastStatus()));
        
        // 安全性改进:删除后置空,防止野指针
        if (m_checkUpdateJob) {
            deleteJob(m_checkUpdateJob);
            m_checkUpdateJob = nullptr;
        }
        m_doCheckUpdates = false;
        
        // 确保UI刷新:如果 setCheckUpdateStatus 没触发信号,这里必须显式调用
        // m_model->updateCheckUpdateUi(); 
    }
}

@deepin-ci-robot
Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: mhduiy, 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

@xionglinlin xionglinlin merged commit d728996 into linuxdeepin:master Feb 9, 2026
6 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