From 18b3ffb57fbc80635330690f4c6747d5d96aabc5 Mon Sep 17 00:00:00 2001 From: jhengazuki Date: Sat, 18 Oct 2025 00:10:22 +0800 Subject: [PATCH] Optimize history --- .../android/tv/ui/activity/VideoActivity.java | 2 +- .../com/fongmi/android/tv/bean/History.java | 58 +++++++++---------- .../android/tv/ui/activity/VideoActivity.java | 2 +- .../android/tv/ui/dialog/ReceiveDialog.java | 2 +- 4 files changed, 30 insertions(+), 34 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index d426b672a..59ff22150 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -1025,7 +1025,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List long position, duration; mHistory.setPosition(position = mPlayers.getPosition()); mHistory.setDuration(duration = mPlayers.getDuration()); - if (position >= 0 && duration > 0 && !Setting.isIncognito()) App.execute(() -> mHistory.update()); + if (position >= 0 && duration > 0 && !Setting.isIncognito()) App.execute(() -> mHistory.save()); if (mHistory.getEnding() > 0 && duration > 0 && mHistory.getEnding() + position >= duration) { checkEnded(false); } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/History.java b/app/src/main/java/com/fongmi/android/tv/bean/History.java index f152b48c2..00f97aae1 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/History.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/History.java @@ -210,6 +210,11 @@ public class History implements Diffable { this.cid = cid; } + public History cid(int cid) { + setCid(cid); + return this; + } + public String getSiteName() { return VodConfig.get().getSite(getSiteKey()).getName(); } @@ -254,38 +259,33 @@ public class History implements Diffable { return AppDatabase.get().getHistoryDao().find(VodConfig.getCid(), key); } - public static void delete(int cid) { - AppDatabase.get().getHistoryDao().delete(cid); + public static List findByName(String name) { + return AppDatabase.get().getHistoryDao().findByName(VodConfig.getCid(), name); } - private void checkParam(History item) { - if (getOpening() <= 0) setOpening(item.getOpening()); - if (getEnding() <= 0) setEnding(item.getEnding()); - if (getSpeed() == 1) setSpeed(item.getSpeed()); + public static void delete(int cid) { + AppDatabase.get().getHistoryDao().delete(cid); } - private void merge(List items, boolean force) { - for (History item : items) { - if (getDuration() > 0 && item.getDuration() > 0 && Math.abs(getDuration() - item.getDuration()) > TimeUnit.MINUTES.toMillis(10)) continue; - if (!force && getKey().equals(item.getKey())) continue; - checkParam(item); - item.delete(); - } + private boolean shouldMerge(History item) { + if (getDuration() <= 0 || item.getDuration() <= 0) return true; + return Math.abs(getDuration() - item.getDuration()) <= TimeUnit.MINUTES.toMillis(10); } - public void update() { - merge(find(), false); - save(); + private History copyTo(History item) { + if (getOpening() > 0) item.setOpening(getOpening()); + if (getEnding() > 0) item.setEnding(getEnding()); + if (getSpeed() != 1) item.setSpeed(getSpeed()); + return this; } - public History update(int cid) { - return update(cid, find()); + private History merge(List items) { + for (History item : items) if (item.shouldMerge(this)) item.copyTo(this).delete(); + return this; } - public History update(int cid, List items) { - setCid(cid); - merge(items, true); - return save(); + public History save(int cid) { + return cid(cid).merge(findByName(getVodName())).save(); } public History save() { @@ -299,10 +299,6 @@ public class History implements Diffable { return this; } - public List find() { - return AppDatabase.get().getHistoryDao().findByName(VodConfig.getCid(), getVodName()); - } - public void findEpisode(List flags) { if (!flags.isEmpty()) { setVodFlag(flags.get(0).getFlag()); @@ -310,7 +306,7 @@ public class History implements Diffable { setVodRemarks(flags.get(0).getEpisodes().get(0).getName()); } } - for (History item : find()) { + for (History item : findByName(getVodName())) { if (getPosition() > 0) break; for (Flag flag : flags) { Episode episode = flag.find(item.getVodRemarks(), true); @@ -318,7 +314,7 @@ public class History implements Diffable { setVodFlag(flag.getFlag()); setPosition(item.getPosition()); setVodRemarks(episode.getName()); - checkParam(item); + item.copyTo(this); break; } } @@ -326,14 +322,14 @@ public class History implements Diffable { private static void startSync(List targets) { for (History target : targets) { - List items = target.find(); + List items = findByName(target.getVodName()); if (items.isEmpty()) { - target.update(VodConfig.getCid(), items); + target.cid(VodConfig.getCid()).save(); continue; } for (History item : items) { if (target.getCreateTime() > item.getCreateTime()) { - target.update(VodConfig.getCid(), items); + target.cid(VodConfig.getCid()).merge(items).save(); break; } } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 87de209ac..ceaabd224 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -1121,7 +1121,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo long position, duration; mHistory.setPosition(position = mPlayers.getPosition()); mHistory.setDuration(duration = mPlayers.getDuration()); - if (position >= 0 && duration > 0 && !Setting.isIncognito()) App.execute(() -> mHistory.update()); + if (position >= 0 && duration > 0 && !Setting.isIncognito()) App.execute(() -> mHistory.save()); if (mHistory.getEnding() > 0 && duration > 0 && mHistory.getEnding() + position >= duration) { checkEnded(false); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ReceiveDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ReceiveDialog.java index c2e9a8348..64e22e432 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ReceiveDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ReceiveDialog.java @@ -77,7 +77,7 @@ public class ReceiveDialog extends BaseDialog { private void onReceiveCast() { if (VodConfig.get().getConfig().equals(event.getConfig())) { - VideoActivity.cast(requireActivity(), event.getHistory().update(VodConfig.getCid())); + VideoActivity.cast(requireActivity(), event.getHistory().save(VodConfig.getCid())); dismiss(); } else { showProgress();