Skip to content

Conversation

@deepin-ci-robot
Copy link
Contributor

Synchronize source files from linuxdeepin/dde-session-shell.

Source-pull-request: linuxdeepin/dde-session-shell#45

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @deepin-ci-robot, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@deepin-ci-robot
Copy link
Contributor Author

deepin pr auto review

代码审查报告

总体评价

这次代码变更主要涉及三个方面的修改:

  1. CMake配置中移除了login-gesture插件
  2. 增加了键盘布局切换功能
  3. 添加了名称转换功能

以下是针对每个方面的详细分析:

1. CMake配置修改

-# add_subdirectory("login-gesture")

建议

  • 如果login-gesture功能不再需要,建议直接删除该行而不是注释掉,这样可以保持代码整洁
  • 如果将来可能需要恢复,建议在注释中说明原因,例如"# TODO: login-gesture功能待实现"

2. 键盘布局切换功能

优点:

  • 增加了用户体验,确保密码输入时使用标准键盘布局
  • 在认证完成后能恢复原始布局
  • 通过m_originalKBLayout成员变量保存原始布局

改进建议:

  1. 错误处理
void AuthPassword::setKBLayout(const QString &layout)
{
    qCDebug(DDE_SHELL) << "Set keyboard layout: " << layout;
    int result = QProcess::execute("/usr/bin/setxkbmap", { layout});
    if (result != 0) {
        qCWarning(DDE_SHELL) << "Failed to set keyboard layout to" << layout;
    }
}
  1. 资源管理
QString AuthPassword::getCurrentKBLayout() const
{
    QProcess p;
    p.start("/usr/bin/setxkbmap", {"-query"});
    if (!p.waitForFinished(1000)) { // 添加超时
        qCWarning(DDE_SHELL) << "Failed to get keyboard layout";
        return {};
    }
    // ... 其余代码不变
}
  1. 代码组织
  • 考虑将键盘布局相关的功能封装到一个单独的类中,提高代码的可维护性

3. 名称转换功能

QString qtifyName(const QString &name) {
    bool next_cap = false;
    QString result;
    
    for (auto it = name.cbegin(); it != name.cend(); ++it) {
        if (*it == '-') {
            next_cap = true;
        } else if (next_cap) {
            result.append(it->toUpper());
            next_cap = false;
        } else {
            result.append(*it);
        }
    }
    
    return result;
}

改进建议:

  1. 边界条件处理
QString qtifyName(const QString &name) {
    if (name.isEmpty()) {
        return name;
    }
    
    bool next_cap = false;
    QString result;
    result.reserve(name.size()); // 预分配空间提高性能
    
    // ... 其余代码不变
}
  1. 性能优化
QString qtifyName(const QString &name) {
    if (name.isEmpty()) {
        return name;
    }
    
    QString result;
    result.reserve(name.size());
    
    int i = 0;
    while (i < name.size()) {
        QChar c = name.at(i);
        if (c == '-') {
            // 跳过连字符并检查下一个字符
            i++;
            if (i < name.size()) {
                result.append(name.at(i).toUpper());
                i++;
            }
        } else {
            result.append(c);
            i++;
        }
    }
    
    return result;
}
  1. 注释完善
/**
 * @brief Convert dash-separated names to camelCase.
 * Example: "some-key" -> "someKey"
 * @param name Input string with dash separators
 * @return Converted string in camelCase format
 */
QString qtifyName(const QString &name);

安全性考虑

  1. QProcess使用
  • 当前代码直接使用QProcess::execute执行系统命令,建议限制可执行的命令范围
  • 考虑使用QProcess::startDetached避免阻塞主线程
  1. 输入验证
  • setKBLayout函数没有对layout参数进行验证,可能导致命令注入风险
  • 建议添加白名单验证:
void AuthPassword::setKBLayout(const QString &layout)
{
    static const QStringList allowedLayouts = {"us", "gb", "fr", "de", "es"}; // 示例列表
    if (!allowedLayouts.contains(layout)) {
        qCWarning(DDE_SHELL) << "Invalid keyboard layout:" << layout;
        return;
    }
    // ... 其余代码
}

总结

  1. 整体改动合理,提高了用户体验
  2. 需要加强错误处理和输入验证
  3. 建议优化代码结构和性能
  4. 完善注释和文档
  5. 注意安全性问题,特别是系统命令的执行

建议在实施这些改进后进行充分测试,确保键盘布局切换功能在各种场景下都能正常工作。

Synchronize source files from linuxdeepin/dde-session-shell.

Source-pull-request: linuxdeepin/dde-session-shell#45
@deepin-ci-robot
Copy link
Contributor Author

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: deepin-ci-robot, yixinshark

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

@yixinshark yixinshark merged commit f68a03d into master Sep 18, 2025
25 of 28 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