Skip to content

fix(shot): add event log for OCR and scroll screenshot in toolbar#830

Merged
deepin-bot[bot] merged 1 commit into
linuxdeepin:masterfrom
dengzhongyuan365-dev:bug-fix-4-16
Apr 22, 2026
Merged

fix(shot): add event log for OCR and scroll screenshot in toolbar#830
deepin-bot[bot] merged 1 commit into
linuxdeepin:masterfrom
dengzhongyuan365-dev:bug-fix-4-16

Conversation

@dengzhongyuan365-dev

Copy link
Copy Markdown
Member
  • Add B4 event log when clicking OCR button or pressing Alt+O
  • Add B5 event log when clicking scroll screenshot button or pressing Alt+I

bug: https://pms.uniontech.com/bug-view-358389.html https://pms.uniontech.com/bug-view-358387.html

- Add B4 event log when clicking OCR button or pressing Alt+O
- Add B5 event log when clicking scroll screenshot button or pressing Alt+I

bug: https://pms.uniontech.com/bug-view-358389.html
https://pms.uniontech.com/bug-view-358387.html
@deepin-ci-robot

Copy link
Copy Markdown

deepin pr auto review

这份代码 diff 主要是在 changeShotToolEvent 函数中,针对 "ocr" 和 "scrollShot" 两个功能分支添加了事件日志记录的功能。以下是对这段代码的详细审查和改进建议:

1. 代码逻辑与语法审查

  • 语法正确性:代码使用了 C++11 的初始化列表语法来构造 QJsonObject,这是合法的。
  • 逻辑冗余:在 ifelse if 分支内部使用了额外的花括号 { ... } 包裹日志代码。虽然这在 C++ 中是合法的(用于限制作用域),但在这种场景下并非必要,反而增加了缩进层级,降低了可读性。

2. 代码质量与可维护性

  • 代码重复:两处日志记录的代码结构几乎完全一致,仅 startup_mode 的值不同("B4" 和 "B5")。这违反了 DRY(Don't Repeat Yourself)原则。如果未来需要修改日志格式(例如添加字段),需要同时修改多处,容易遗漏。
  • 魔法字符串/数字"B4""B5" 以及 mode 的值 1 是硬编码的。建议将其定义为具有语义的常量或枚举,以提高代码可读性。

3. 代码性能

  • 对象构造QJsonObject 的构造和 EventLogUtils::get().writeLogs(obj) 的调用在 UI 事件处理函数中。虽然 JSON 构造开销不大,但应确保 writeLogs 是非阻塞的(例如异步写入),否则在频繁调用或 IO 瓶颈时可能会轻微影响 UI 响应速度。

4. 代码安全

  • 空指针/异常QCoreApplication::applicationVersion() 通常返回引用,但在极少数初始化未完成时可能存在问题。不过在此处(用户交互事件中)通常是安全的。
  • 单例线程安全EventLogUtils::get() 暗示是一个单例模式。需确保该单例的实现是线程安全的,因为 UI 线程可能在此处调用它。

改进建议与重构代码

建议将日志记录的逻辑提取为一个私有辅助函数,以消除重复代码并提高可维护性。

修改后的代码示例:

// 在 main_window.h 的 MainWindow 类中声明私有辅助函数
private:
    void logToolStartup(const QString &mode);

// 在 main_window.cpp 中实现
void MainWindow::logToolStartup(const QString &startupMode) {
    // 使用常量或枚举代替魔法字符串 "1"
    const int kDefaultMode = 1; 
    
    QJsonObject obj;
    obj["tid"] = EventLogUtils::Start;
    obj["version"] = QCoreApplication::applicationVersion();
    obj["mode"] = kDefaultMode;
    obj["startup_mode"] = startupMode;
    
    EventLogUtils::get().writeLogs(obj);
}

// 修改后的 changeShotToolEvent 片段
void MainWindow::changeShotToolEvent(const QString &func)
{
    qCDebug(dsrApp) << "MainWindow::changeShotToolEvent >> func: " << func;
    
    if (func == "ocr") {
        // 提取重复代码,传入具体的模式标识
        logToolStartup("B4");

        // 调起OCR识别界面, 传入截图路径
        m_ocrInterface = new OcrInterface("com.deepin.Ocr", "/com/deepin/Ocr", QDBusConnection::sessionBus(), this);
        int delayTime = 0;
        // ... (其余代码保持不变) ...

    } else if (func == "scrollShot") {  // 点击滚动截图
        logToolStartup("B5");

        // 捕捉区域的固件不显示
        drawDragPoint = false;
        m_toolBar->hide();
        // ... (其余代码保持不变) ...
    }
    // ...
}

改进点总结:

  1. 消除重复:通过 logToolStartup 函数封装了日志逻辑,如果日志格式变更,只需修改一处。
  2. 提高可读性:去掉了不必要的内部花括号,使主逻辑更清晰。
  3. 语义化:虽然 "B4"/"B5" 依然存在,但集中管理后更容易后续替换为枚举值。
  4. 性能考量:保持原有的调用方式,但将逻辑分离使得未来在 logToolStartup 内部添加异步逻辑或缓存机制变得更加容易,不会污染业务逻辑代码。

@deepin-ci-robot

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: dengzhongyuan365-dev, lzwind

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

@dengzhongyuan365-dev

Copy link
Copy Markdown
Member Author

/forcemerge

@deepin-bot deepin-bot Bot merged commit 9eed451 into linuxdeepin:master Apr 22, 2026
10 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