Skip to content

Dev - #99

Open
YaChengMu wants to merge 1716 commits into
fish2018:mainfrom
YaChengMu:dev
Open

Dev#99
YaChengMu wants to merge 1716 commits into
fish2018:mainfrom
YaChengMu:dev

Conversation

@YaChengMu

Copy link
Copy Markdown

No description provided.

YaChengMu pushed a commit to YaChengMu/webhtv that referenced this pull request Aug 7, 2026
新兰永恒 and others added 29 commits August 8, 2026 22:41
将间隙从28dp增大至45dp,优化播放窗口在融合模式下的垂直定位
当页面滚动时,使用 translationY 将融合模式的操作按钮固定在播放窗口下方常驻可见
修复融合模式下播放窗口顶部边距叠加问题,改为由translationY动态计算浮动位置,避免与LayoutParams边距冲突
允许用户主动删除 cid=0 的本地记录,并保留同步接口的正数配置校验。
融合模式下 playerPanelSpacer 可获焦时会造成 playerPanel↔spacer 焦点循环,导致方向键无法切到按钮行。将 spacer 设为不可获焦,并通过 nextFocusUp 连接按钮行与播放窗口,恢复正常导航。
在计算播放窗口目标位置时减去上移偏移量,使播放窗口整体上移 10dp
同步首页分类栏与工具栏的滚动显隐状态。

移除分类切换焦点恢复的额外 post,避免缓存分类切换时闪屏。
fix: 修复全局历史临时配置记录无法删除
推送解析接口异常或返回空结果时回退到内置处理。

移除会冻结进程内全部 WebView 的全局计时器暂停调用,并补充推送分流与生命周期回归测试。
fix: 修复推送网页嗅探失败
避免启动配置事件重复刷新中断 Spider 初始化。SpiderNull 不再缓存,非取消失败会进行一次受控重试,并补充并发取消回归测试。
改用已绑定播放服务的 MediaLibrarySession Token 创建控制器,避免旧版 Android 通过组件解析 SessionToken 失败。
补齐同步与异步连接失败清理、断线重连释放,并增加回归测试。
(cherry picked from commit b8eed44d26458bb0ae1dc2722f833d81750aa356)
(cherry picked from commit 28f504c491f902fbed1cff31d76d289b6e80de26)
YaChengMu and others added 30 commits August 18, 2026 20:22
优化电视端更新与加速源弹窗适配
修复缺少季度快照的历史记录恢复
修复:电视版 TMDB 搜索弹窗自适应
修复:同步播放性能预设选项
优化:隐藏无可选项的 TMDB 交互模型设置
Dev1功能:拆分 TMDB 剧照与海报展示
问题:播放过程中点击搜索字幕,提示「请先开始播放再搜索字幕」。

原因:手动搜索的前置校验依赖会话状态 active 与 currentRequest,
而 onPlaybackStarted 在源站结果自带字幕时会直接 stop 会话,
把自动匹配和手动搜索一起禁掉;播放报错、投屏、刷新等路径的
stop 之后若未重新触发 onPlaybackStarted,会话也会长期停留在
非激活状态。

修改:
- 源站自带字幕时改为只取消自动匹配任务,会话保持可用;
- 新增 buildManualRequest/manualRequest,播放器仍在播放时按
  当前播放地址补建 MANUAL_SEARCH 请求,判定标准改为
  isSubtitleHostActive;
- Host 增加默认方法 getSubtitlePlaybackResult,从 PlayerManager
  获取当前播放结果,三端 Activity 无需改动;
- getManualSearchKeyword 只读取不激活会话,修复会话停止后
  输入框关键词为空的问题。

验证:SubtitlePlaybackSessionTest 新增 5 项用例共 13 项通过,
mobile 变体 519 个测试类全部通过,leanback 变体编译通过。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
用户反馈偶发「从来没看过的集数会自动跳到结尾」,定位到三条播放链路上
四处独立缺陷,均为数据维度错配或竞态,因此表现为偶发且跨多个版本:

1. ending 存在 History 上(主键 siteKey##vodId 不含集数),整剧共享,
   而播完判定用的是当前集 duration。用户在正片设的片尾时间被带到更短的
   预告/彩蛋/番外上时,ending + position >= duration 在刚开播、position
   还很小时就成立,把没看过的一集直接判为播完并跳走。
   改为 History.isEndingReached():要求 ending 小于本集时长一半,且至少
   已播 1 分钟,替换 mobile / leanback / TmdbDetail 三处裸表达式。

2. 集数进度缓存 key 在季号解析失败时退化为裸集名,同一线路混排多季时
   两季的「第01集」共用槽位,没看过的一集会读到另一季已看完的进度。
   新增 SourceEpisodeSeasonCache.hasMixedSeasons(),仅在「季号解析失败
   且该线路确实混排多季」时放弃缓存、从头播放,读写两侧一并跳过以免继续
   污染。单季剧解析不出季号是常态,其集名在该 vodId 内唯一,不受影响。

3. TmdbDetailActivity 恢复缓存进度时只设 position 未设 duration,导致
   isNearEnding() 因 duration<=0 失效,接近片尾的自愈保护失灵;且
   getInlineResumePosition() 缺少该自愈检查。均已与另两条链路对齐。

4. TmdbDetail 的缓存 key 使用 historyEpisodeTitle(),该值依赖异步加载的
   TMDB 元数据,未到位时退化成纯集号、到位后变为正式剧集名,同一集在不同
   时刻算出不同 key:既读不回自己的进度,退化后的裸集号还可能命中另一季的
   槽位。读写两侧统一改用稳定的源站集名,并为写入侧补 URL 兜底。

新增 7 个测试覆盖片尾判定边界与混排季检测。mobile / leanback 两个变体
编译与完整单测均通过。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
评审上一提交时自查发现两处缺陷并修正:

1. isEndingReached 用 ending >= duration/2 判定跨集错配,会误伤短剧。
   Constant.getOpEdLimit() 对 15 分钟以下视频允许 3 分钟片尾,而
   duration/2 对 6 分钟以下的短剧更严——用户在 4 分钟短剧上合法设置的
   3 分钟片尾会被完全禁用。改为复用设置端同一上限
   getOpEdLimit(duration),两侧自洽:凡本集设得出来的 ending 都不会被
   拒,设不出来的即判为跨集错配。已播门槛同时从固定 1 分钟改为
   min(1 分钟, duration/4),避免总时长很短时片尾永不触发。

2. getInlineResumePosition() 内含 resetPlaybackPosition() 与异步存库,
   但它经 getInlineStartPosition() 被 onTimeChanged 每秒调用
   (canUpdateProgress 判断),属查询路径,会反复清进度并重复写库。
   抽出 resetInlineHistoryIfNearEnding(),仅在 startInlinePlayer 未显式
   指定续播位置时(即真正起播:首次进入、切集、切线路、重播)调用一次;
   断连重接显式传入位置,不触发自愈。

补 3 个测试:短剧片尾在允许上限内照常生效、极短视频仍能到达片尾、
合理的共享 ending 只在真正播够时长后才触发。

mobile / leanback 两个变体编译与完整单测均通过。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
isEndingReached 拒绝「ending 超过本集片尾上限」来识别跨集错配,其正确性
前提是与设置端 PlayerManager.canSetEnding 共用同一上限:canSetEnding 要求
duration - position <= getOpEdLimit(duration),而存入的 ending 恰为
duration - position,故合法设过的 ending 恒不超过该上限、不会被判定端拒绝。

补测试遍历 40 秒至 45 分钟六档时长,断言「本集能设出的最大 ending,在该集
播到片尾起点时必定判定播完」,把这条不变量固定下来,避免日后单独调整任一侧
阈值时二者失配、导致片尾功能静默失效。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
修复:未观看的集数被自动跳到结尾
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.

3 participants