feat(desktop): 支持自定义背景图片 - #3810
Conversation
Signed-off-by: Stella-xixi <2559689615@qq.com>
|
| Filename | Overview |
|---|---|
| apps/desktop/src/main/appearance-background.ts | 新增背景导入与协议服务,但文件替换和清理未与设置持久化或并发操作保持原子一致。 |
| apps/desktop/src/main/appearance-settings-ipc.ts | 新增受信任的导入、移除 IPC,但操作顺序会在失败或重叠请求下造成文件与设置分离。 |
| apps/desktop/src/renderer/hooks/useAppearanceBackground.ts | 新增背景状态适配器,但乐观写入缺少失败回滚和 Promise 拒绝处理。 |
| apps/desktop/src/renderer/components/settings/AppearanceSection.tsx | 新增背景选择、移除和参数滑块,调用点未处理参数写入及移除失败。 |
| apps/desktop/src/shared/appearanceSettings.ts | 新增背景字段、默认值、限制和自定义协议 URL 归一化,契约本身保持清晰。 |
| apps/desktop/src/main/bootstrap-electron.ts | 将背景协议权限和处理器接入 Electron 启动流程,注册位置与现有协议模式一致。 |
| apps/desktop/src/renderer/components/layout/AppearanceBackground.tsx | 新增不可交互的背景、遮罩和模糊渲染层,未发现独立功能缺陷。 |
Sequence Diagram
sequenceDiagram
participant U as 用户
participant R as Renderer 设置页
participant P as Preload
participant M as Main IPC
participant F as 托管背景文件
participant S as 外观设置存储
U->>R: 选择背景图片
R->>P: importBackground()
P->>M: background-import
M->>F: 校验并替换背景文件
M->>S: 持久化 backgroundImage
S-->>M: 设置快照或写入错误
M-->>P: 导入结果
P-->>R: 更新界面
Prompt To Fix All With AI
### Issue 1
apps/desktop/src/main/appearance-background.ts:69-71
**背景文件与设置提交失配**
当设置写入因锁竞争或文件不可读而失败时,这里已经覆盖背景文件并删除其他扩展名,导致失败的替换仍会使原背景 URL 返回 404。如果导入与另一次导入或移除操作重叠,未串行化的清理还会删除另一请求的文件,使持久化 URL 指向不存在的背景。
### Issue 2
apps/desktop/src/renderer/hooks/useAppearanceBackground.ts:40-46
**失败写入保留乐观状态**
当遮罩、模糊或移除请求因设置锁竞争、不可读设置文件等错误而被拒绝时,`setPatch` 已经应用的乐观状态不会回滚,且调用点通过 `void` 丢弃拒绝。界面因此继续显示未保存的背景设置并产生未处理的 Promise rejection,直到后续广播或重启时突然恢复持久值。
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Reviews (1): Last reviewed commit: "feat(desktop): support custom background..." | Re-trigger Greptile
|
这条 PR 正在等维护者确认,当前不会自动合并。 改动会让用户在外观设置里上传本地背景图,并铺到标题栏、侧栏和主内容区。请维护者直接在 PR 上 Approve;如果要改,请 Request Changes。讨论 issue:#3814 另外:请补一段改动后的界面效果证据(截图 / 录屏 / HTML 预览)。当前描述里的演示视频还是占位。 |
|
命中 UI 路径(apps/desktop/src/renderer/components/layout/AppearanceBackground.tsx / apps/desktop/src/renderer/components/layout/MainLayout.tsx / apps/desktop/src/renderer/components/new-chat/ChatInput.tsx 等)但 description 未附界面效果证据——建议补充改动后效果:截图/录屏,或改动后界面的 HTML 页面(```html 代码块、.html 附件或在线预览链接),便于确认界面符合 DESIGN.md 设计规范 |
|
@Stella-xixi 👋 这个 PR 还有 2 条 review conversation 没 resolve(apps/desktop/src/main/appearance-background.ts / apps/desktop/src/renderer/hooks/useAppearanceBackground.ts),auto-review 因此暂时跳过、没法继续审查 / 合并。 如果你已经按评论改完或回应了,请到对应 thread 上点 Resolve conversation;全部 resolve 后,下一轮 auto-review 会自动重新审查这个 PR。 |
|
@Stella-xixi 👋 这个 PR 目前与 请在本地 merge 最新的 |
Signed-off-by: Stella-xixi <2559689615@qq.com>
1808b9e to
05e12cf
Compare
Signed-off-by: Stella-xixi <2559689615@qq.com>
|
@Stella-xixi 👋 这个 PR 目前与 请在本地 merge 最新的 |
这次改了什么
摘要
为 Desktop 增加自定义背景图片能力。用户可以在设置 → 通用 → 外观中选择、更换或移除本地背景图片,并调节背景遮罩强度与模糊程度;背景可覆盖标题栏、侧栏与主内容区,同时通过半透明输入区和实体内容卡片保持可读性。
变更类型
feat新功能fix缺陷修复refactor/perf重构或性能优化docs/test/chore文档、测试或工程维护范围
cindy-background://协议加载。UI 变化
docs/design-rules/DESIGN.md的双模式交付门槛、语义 Token、层级与可读性约束;页面画布在有背景时透明,输入区使用半透明模糊材质,设置卡片与关键控件保留实体表面;无背景时恢复既有主题表面。演示视频
怎么验证的
自动验证
手工验证
在 Windows Desktop CN 隔离开发环境中使用 JPG 图片验证:
未执行的验证
风险
风险分类
影响与回滚
提交前检查
git commit -s,见 DCO)