refactor: optimize AM appitem property update handling - #1690
Conversation
Reviewer's GuideRefactors application manager integration to perform targeted AMAppItem property updates, enrich AppItem metadata, introduce a GIO-based TrashMonitor for dynamic trash icon state, extend AppsApplet with app management APIs, fix AMAppItemModel initialization/ready signaling (including trash icon updates and deduplication), and propagate app model data changes into the dock's global element model. Sequence diagram for AMAppItem targeted property updatessequenceDiagram
participant AM_Application as ApplicationManager_Application
participant DBus as DBus
participant AMAppItem as AMAppItem
participant AppItem as AppItem
participant AppItemModel as AppItemModel
AM_Application->>DBus: PropertiesChanged
DBus->>AMAppItem: onPropertyChanged(QDBusMessage)
AMAppItem->>AMAppItem: qdbus_cast QVariantMap changedProperties
alt [Name/GenericName/X_Deepin_Vendor changed]
AMAppItem->>AppItem: setGenericName()
AMAppItem->>AppItem: setVendor()
AMAppItem->>AppItem: setAppName()
end
alt [Icons changed]
AMAppItem->>AppItem: setAppIconName()
end
alt [Categories changed]
AMAppItem->>AppItem: setDDECategories()
AMAppItem->>AppItem: setCategories()
end
alt [Actions or ActionName changed]
AMAppItem->>AMAppItem: updateActions()
AMAppItem->>AppItem: setActions()
end
AppItem-->>AppItemModel: dataChanged(...) emits
Sequence diagram for TrashMonitor-driven trash icon updatessequenceDiagram
participant FS as GIO_trash
participant GIO as GFileMonitor
participant TrashMonitor as TrashMonitor
participant AMAppItemModel as AMAppItemModel
participant TrashItem as AMAppItem_dde_trash
FS-->>GIO: file event
GIO->>TrashMonitor: onTrashChanged(...)
TrashMonitor->>TrashMonitor: updateState()
TrashMonitor-->>AMAppItemModel: emptyChanged(bool)
AMAppItemModel->>AMAppItemModel: updateTrashIcon()
AMAppItemModel->>TrashItem: setAppIconName(user-trash | user-trash-full)
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
/test github-pr-review-ci |
1. Refactor onPropertyChanged to handle individual property changes instead of fetching all properties on every D-Bus signal 2. Add vendor and genericName data roles to AppItem with corresponding accessors 3. Introduce Environ role for storing application environment data 4. Remove QtConcurrent dependency by simplifying async loading logic 5. Fix isOnDesktop property name mismatch (was OnDesktop) 6. Optimize duplicate check during managed objects loading 7. Replace ready property with proper readyChanged signal emission 8. Expose DDE categories as a QVariantMap property for QML usage 9. Clean up updateActions to properly handle empty action lists Log: Optimized app item property updates and added vendor/genericName/ Environ data roles Influence: 1. Verify application display names and generic names still display correctly in launcher 2. Test that application icons update properly when changed at runtime 3. Verify app model readiness signal works correctly with QML bindings 4. Test category filtering still functions with new DDE categories property 5. Verify duplicate desktop entries are properly filtered during loading 6. Test action menus still work correctly for applications with defined actions 7. Verify apps are correctly filtered by vendor (deepin vs other) refactor: 优化AM应用项属性更新处理 1. 重构onPropertyChanged,针对单个属性变化进行处理,而不是每次D-Bus信号 都获取所有属性 2. 为AppItem添加vendor和genericName数据角色及对应的访问器 3. 新增Environ角色用于存储应用环境数据 4. 简化异步加载逻辑,移除QtConcurrent依赖 5. 修复isOnDesktop属性名称不匹配问题(原为OnDesktop) 6. 优化加载托管对象时的重复检查逻辑 7. 用proper readyChanged信号替代原ready属性 8. 将DDE分类暴露为QVariantMap属性供QML使用 9. 清理updateActions以正确处理空操作列表 Log: 优化应用项属性更新,新增vendor/genericName/Environ数据角色 Influence: 1. 验证启动器中应用显示名称和通用名称是否仍然正确显示 2. 测试应用图标在运行时更改后是否能正确更新 3. 验证应用模型就绪信号与QML绑定的正常工作 4. 测试分类过滤功能在新DDE分类属性下是否正常 5. 验证加载过程中重复桌面条目的过滤是否正常 6. 测试已定义动作的应用的右键菜单是否正常工作 7. 验证应用是否能按供应商正确筛选(deepin与其他) PMS: TASK-393709
deepin pr auto review★ 总体评分:95分■ 【总体评价】
■ 【详细分析】
■ 【改进建议代码示例】 // 建议在 amappitem.cpp 的 onPropertyChanged 中增加对 QVariantMap 转换的防御性校验
// 以防止极端情况下 DBus 守护进程或底层库返回畸形数据导致隐式转换异常
void AMAppItem::onPropertyChanged(const QDBusMessage &msg)
{
const QList<QVariant> arguments = msg.arguments();
if (arguments.count() != 3)
return;
if (arguments.at(0).toString() != AM_APPLICATION_INTERFACE)
return;
// 增加类型校验,确保第二个参数确实是 QVariantMap
if (!arguments.at(1).canConvert<QVariantMap>())
return;
QVariantMap changedProperties = qdbus_cast<QVariantMap>(arguments.at(1));
const auto value = [&changedProperties](QLatin1StringView name) {
return changedProperties.value(name);
};
const auto contains = [&changedProperties](QLatin1StringView name) {
return changedProperties.contains(name);
};
// 后续逻辑保持不变...
} |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: 18202781743, wjyrich 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 |
instead of fetching all properties on every D-Bus signal
accessors
Log: Optimized app item property updates and added vendor/genericName/
Environ data roles
Influence:
correctly in launcher
property
actions
refactor: 优化AM应用项属性更新处理
都获取所有属性
Log: 优化应用项属性更新,新增vendor/genericName/Environ数据角色
Influence:
PMS: TASK-393709