0
Fork 0
mirror of https://github.com/Silent1566/webhtv.git synced 2026-10-18 07:09:16 +00:00

fix(detail): 作废内联取址请求时释放其加载标记,消除永久加载圈

现象:详情页内播(沉浸融合/详情直放)偶发加载圈一直转但不影响播放;同一集还会表现为无法再次起播。

根因:playInline() 先置 inlinePlaybackPending=true 再自增代际,而回调里
`inlinePlaybackPending = false;` 写在 isInlinePlaybackRequestCurrent(...) 检查**之后**。
于是凡是「只自增代际、不接替请求」的作废点,回调直接 return,标记再无释放路径:
① updateInlineLoading() 的可见条件首项即该标记 ⇒ 圈永久留在屏上;
② isSamePendingInlinePlayback() 恒真 ⇒ selectInlineEpisode 早退,同一集无法再次起播。
实测该类作废点两处:refreshAndSwitchInlinePlayer()(选其它内核,8993 调用)与
cancelPendingInlinePlayerSwitch()(选当前已生效内核 8998 / 打开外部播放器 9295)。
其余自增点(resetDetailState / cancelPendingInlinePlayback / closeDetailFullscreenPlayer)
均已释放,属置位点的 playInline 本身正常。

修法:两处作废点在自增代际后、投递新请求前同步释放标记并刷新面板。必须在作废点同步
释放而非仅在回调里释放:任务若在运行前被取消,submit 的 lambda 根本不执行,回调式释放
永不触发。切内核自身的缓冲显示由 updateInlineLoading 的引擎条件兜住,不依赖该标记。

Verification: :app:compileMobileArm64_v8aDebugJavaWithJavac 成功;:app:testMobileArm64_v8aDebugUnitTest 定向 TmdbDetailDirectPlayTransitionSourceTest 4/4(含新增断言);同批显式列出 77 个 Tmdb/Inline/PlaybackOwnership 用例类共 610 项,1 项失败经字节取证为既有 CRLF 检出环境问题(断言要求裸 \n,而 leanback VideoActivity.java 为 i/lf w/crlf、裸 LF 0 处;且该断言读的文件本次未改动),与本改动无因果。新断言对修复前源码必然变红(逐方法体字符串校验)。

Task-Guard: INLINE-LOADING-RELEASE-20261009

Verification: compileMobileArm64_v8aDebugJavaWithJavac OK; TmdbDetailDirectPlayTransitionSourceTest 4/4 pass (incl. new cancellingAnInlinePlaybackRequestReleasesItsLoadingFlag); wider 610-test Tmdb/Inline/PlaybackOwnership sweep: 609 pass, 1 failure (TmdbSourceOnlyInteractionTest line 42) proven pre-existing CRLF checkout artifact (bare LF sequence absent, CRLF variant present, file unmodified by this change); new assertion provably red before the fix

Task-Guard: INLINE-LOADING-RELEASE-20261009
This commit is contained in:
Silent1566 2026-10-09 17:07:35 +08:00
commit 7809ff4952
3 changed files with 131 additions and 0 deletions