Skip to content

chore: dev → main(按传输 id 去重上传/下载完成提示,修复 #499 多分屏重复弹窗) - #501

Merged
feigeCode merged 1 commit into
mainfrom
dev
Nov 2, 2026
Merged

feigeCode merged 1 commit into
mainfrom
dev

Conversation

@feigeCode

Copy link
Copy Markdown
Owner

背景

issue #499 报告:覆盖上传一个文件成功后,会弹出 3 个「上传成功」提示框。

根因:同一连接可以同时打开多个终端分屏,每个分屏的侧栏各有一个 FileManagerPanel,都在构造时订阅同一个全局 SFTP 执行器,并按连接身份(SftpConnectionIdentity,同连接各分屏一致)过滤事件。一笔传输进入 Finished 时,所有面板都会 push_notification 一条随机 id 的成功提示,于是弹出 N 条。ToastManager 只在同 id 时替换,所以随机 id 无法去重。

本 PR 的提交

  • b1940928e fix(terminal): 按传输 id 去重上传/下载完成提示,修复多分屏重复弹窗
    • FileManagerPanel::notify_transfer_finish 增加 transfer_id 参数,通知改用 Notification::id1::<TransferFinishNotification>(("sftp-transfer-finish", transfer_id.as_u64())) 固定 id
    • 同 id 的重复 push 会被 ToastManager 替换为最新一条,因此 N 个分屏最终只保留一条提示;不同传输 id 不同,仍各自提示
    • ZMODEM 路径(background_tasks.rs)不存在跨面板重复,保持不变

验证

  • 新增回归测试 duplicate_panels_collapse_finish_toast_into_one:同一窗口内构造两个同连接面板,完成同一笔下载后断言通知数为 1;临时移除 id1 去重后该测试得到 2,可复现 issue 现象
  • cargo test -p terminal_view --lib(573 passed)
  • cargo check -p terminal_view --all-targets(通过)
  • cargo clippy -p terminal_view --all-targets:改动文件无新增 warning(仓库既有的 one_ui/ssh 基线 lint 仍存在)

说明

不含 CHANGELOG 与版本 bump。issue 正文里的「会话级不再确认覆盖」属于独立功能建议,未包含在本修复内。

同一连接可以同时打开多个终端分屏,每个分屏的侧栏文件管理器面板都订阅全局
SFTP 执行器并按连接身份过滤;一笔传输结束时所有面板各弹一条「上传完成」,
用户因此看到多条重复提示(issue #499)。

把完成提示的通知 id 固定为传输 id(Notification::id1):后到的同 id 提示
替换先到的,任一窗口最终只保留一条;不同传输 id 不同,仍各自提示。ZMODEM
路径不涉及跨面板重复,保持不变。

- 新增 TransferFinishNotification 标记类型与 notify_transfer_finish 的
  transfer_id 参数
- 新增回归测试 duplicate_panels_collapse_finish_toast_into_one:同一窗口
  两个同连接面板完成同一笔下载后只保留一条通知(修复前实测 2 条)

Refs #499
@feigeCode
feigeCode merged commit 8eae4a8 into main Nov 2, 2026
8 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.

1 participant