From b929e5184215575f40329f7cd933bb252155a481 Mon Sep 17 00:00:00 2001 From: Har01d Date: Tue, 8 Sep 2026 20:26:25 +0800 Subject: [PATCH] fix(webhome): backport fm.vod history resume to beta (#240) Backport-of: de4e1f59535b64bcb8db2dc8c7267b86d19f62fe Source-PR: Silent1566/webhtv#240 Verification: PR #240 stable patch-id b40a0a2a11d54bdba8b0e14e8629e89f6127b276 matches exactly; bash ./gradlew :app:compileLeanbackArm64_v8aDebugJavaWithJavac :app:compileMobileArm64_v8aDebugJavaWithJavac --offline --console=plain: BUILD SUCCESSFUL in 1m 35s (58 tasks). Device test not repeated. Task-Guard: beta-pr240-20260908 --- .../fongmi/android/tv/web/HomeWebBridge.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/fongmi/android/tv/web/HomeWebBridge.java b/app/src/main/java/com/fongmi/android/tv/web/HomeWebBridge.java index b757d5dc94..4adc93cdda 100644 --- a/app/src/main/java/com/fongmi/android/tv/web/HomeWebBridge.java +++ b/app/src/main/java/com/fongmi/android/tv/web/HomeWebBridge.java @@ -10,6 +10,7 @@ import com.fongmi.android.tv.App; import com.fongmi.android.tv.setting.Setting; import com.fongmi.android.tv.api.SiteApi; import com.fongmi.android.tv.api.config.VodConfig; +import com.fongmi.android.tv.db.AppDatabase; import com.fongmi.android.tv.bean.History; import com.fongmi.android.tv.bean.Result; import com.fongmi.android.tv.bean.Site; @@ -279,10 +280,32 @@ public class HomeWebBridge { String wall = wallPic(payload); String content = content(payload); final String playSiteKey = siteKey; - App.post(() -> controller.prepareNativePlayback(() -> VideoActivity.start(activity, playSiteKey, vodId, title, pic, null, wall, content))); + App.post(() -> controller.prepareNativePlayback(() -> { + History resume = findResumeHistory(playSiteKey, vodId); + if (resume != null) { + VideoActivity.startDirect(activity, playSiteKey, vodId, title, pic, null, null, null, null, resume); + } else { + VideoActivity.start(activity, playSiteKey, vodId, title, pic, null, wall, content); + } + })); return "{}"; } + /** + * WebHome 打开有观看历史的影片时按组合键(siteKey@@@vodId@@@cid)直取 History,走与 + * 「最近观看」相同的续播直通(EXTRA_RESUME_FROM_HISTORY 携带完整历史,跳过重匹配)。 + * 否则详情页靠 History.findPlayback 重匹配,isSeasonEligible 的季资格检查会把多季 + * TMDB 剧的历史拒绝掉,「继续观看」回落到第 1 集。 + */ + private static History findResumeHistory(String siteKey, String vodId) { + if (TextUtils.isEmpty(siteKey) || TextUtils.isEmpty(vodId)) return null; + try { + return History.find(siteKey + AppDatabase.SYMBOL + vodId + AppDatabase.SYMBOL + VodConfig.getCid()); + } catch (Exception e) { + return null; + } + } + private String playVodInline(JsonObject payload) { Site originSite = VodConfig.get().getHome(); String vodId = WebHomeInlineVodStore.put(payload, this::resolveInlineEpisode, originSite);