Skip to content

换页的时候把四层浮层收掉:评论/队列抽屉、分集浮层、倍速菜单 - #735

Merged
ShellMonster merged 1 commit into
mainfrom
work/drawer-close-nav
Nov 3, 2026
Merged

ShellMonster merged 1 commit into
mainfrom
work/drawer-close-nav

Conversation

@ShellMonster

@ShellMonster ShellMonster commented Nov 2, 2026 •

Copy link
Copy Markdown
Owner

什么

评论抽屉(以及其它浮层)开着的时候换页,浮层不收——盖的是上一页的东西悬在新页上。报告的是「评论抽屉开着 → 点播放条上的 UP 主 → 换到 UP 空间页,抽屉还在」。

为什么收在 syncRoute 而不是 navigate

navigate 只走得到「调用方调了 s.navigate」的那几条道,而换页不止那一条:

  • 顶栏那对 ui.BackButton / ForwardButton 是框架控件——按下去直接 r.Go(±1),走 Router 自己的历史,根本不经过 Shell;
  • 后退快捷键(navigateBack)走 s.router.Back();
  • goLogin 走 s.router.Push;
  • 404 的倒计时回首页也是 s.navigate。

syncRoute(internal/ui/notfound.go)是「换页了」唯一的收口:它在 syncUnderlay 里每帧跑,拿 s.shownPath 的边沿认出换页——任何一条换页路径都会过它。

收哪几层(closeOverlaysForNav)

对抗性审查之后收齐到 16 个标志,两类:

  • 两个抽屉 + 抽屉里的确认:commentsOpen、drawerOpen、queueClearOpen(清空队列确认不是抽屉的一部分,抽屉收了它状态还活着,下次开抽屉直接复活——状态泄漏)。
  • Popover / PopoverBase 一族:partOpen、rateOpen、sleepOpen、volOpen、errDetailOpen、searchSuggest、avatarMenuOpen、dynMenuOpen、favPanelOpen、full.partsOpen、lyric.offsetOpen / lyric.fontOpen、fullLyric.offsetOpen / fullLyric.fontOpen。

收的是「意图」(open=false),不是阶段机——commentsPhase / drawerPhase 各自的 syncXxx 会走 drawerOut,面板滑出那 200ms 照旧。Popover 的「点外面自己关」对换页无效,必须显式收。

明确不收的(取舍写成显式决策,见函数顶上那段)

  • 收藏夹管理的弹窗(folderEdit/crop/folderSelect/folderDelete):装着用户敲了一半的输入,换页收掉等于静默丢工作。
  • 各页的破坏性确认框(laterClearOpen、collection.confirm、downloads.ask、local.rmOpen):没回答完的问题,doIt 闭包攥着页面上下文,换页不该替用户回答。
  • 歌词搜索/预览(lyricSearch.open/preview):同上,词和候选是用户的工作。
  • 关于面板:应用级、跟当前页没有上下文。
  • 满屏播放器本身(full.open):它是播放面不是浮层。

验证

  • 界面层:internal/ui/notfound_test.go 四条新测试——前进收、后退收、联想单独一条(它和抽屉在无头 Tester 里造不出同框:抽屉蒙版盖住搜索框)、阶段机走 drawerOut 不硬消失。连同既有 404 一族全绿。
  • 真窗口 E2E:internal/e2e/drawer_nav_test.go 的 TestNavigatingClosesTheQueueDrawer(队列抽屉代评论抽屉:评论入口要在线曲目,CLI 交的本地文件开不出;队列抽屉是同一副 Overlay + RoleDialog 骨架、同一个收口)。BIU_RUN_MYGO_E2E=1 go test -tags e2e ./internal/e2e/ -run TestNavigatingClosesTheQueueDrawer 通过。
    • 换页走应用菜单:抽屉蒙版是 Modal,模态开着时无障碍树只给模态内的节点,页面上没有可按的键——菜单是系统画的、不走元素树,也是真人换页唯一还点的着的路。
    • 顺带修了 startRealApp:裸 go build 不注入 packageFileExtensions ldflags(那是 go tool mygo build 的事),命令行音频文件一件都投不出去——补了 startRealAppWithArgs 并带上那行 ldflags。
  • go build -trimpath -p 4 ./...、go vet -trimpath -p 4 ./...、go test -p 4 $(go list ./... | grep -v '/internal/ui$') 全过。
  • 顺带发现:TestThePartsPanelSaysWhyWhenTheyCannotBeAsked 在基线上也偶发(waitFrames 等到 PartsErr 的那一拍和把手画上之间差一帧)——先记在这里,和这一票无关。

@codeant-ai

codeant-ai Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

CodeAnt  CodeAnt Review Status

✅  Review completed

Status Commit Started (UTC) Finished (UTC)
✅  #9b097 Incremental review completed 023a7a1 Nov 02, 2026 · 14:53 14:54
✅  #bd7bc Reviewed your PR 0865d45 Nov 02, 2026 · 13:03 13:06

@codeant-ai

codeant-ai Bot commented Nov 2, 2026

Copy link
Copy Markdown

Thanks for using CodeAnt! 🎉

We're free for open-source projects. if you're enjoying it, help us grow by sharing.

Share on X ·
Reddit ·
LinkedIn

@codeant-ai codeant-ai Bot added the size:L This PR changes 100-499 lines, ignoring generated files label Nov 2, 2026
@codeant-ai

codeant-ai Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

CodeAnt  CodeAnt PR Risk

🟢  Low Risk

  • The PR appears safe to merge; no actionable issues were identified in the review.

Assessed commit: 023a7a1171d0

@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

PudMusic UI 截图

截图测试已通过。

截图来自项目现有的 MyGo UI 测试渲染器,使用本地 fixture,不启动真实登录态。

@ShellMonster
ShellMonster force-pushed the work/drawer-close-nav branch from 0865d45 to 023a7a1 Compare November 2, 2026 14:53
@codeant-ai codeant-ai Bot added size:XL This PR changes 500-999 lines, ignoring generated files and removed size:L This PR changes 100-499 lines, ignoring generated files labels Nov 2, 2026
@ShellMonster
ShellMonster merged commit 3e9f6de into main Nov 3, 2026
3 checks passed
@ShellMonster
ShellMonster deleted the work/drawer-close-nav branch November 3, 2026 01:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL This PR changes 500-999 lines, ignoring generated files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant