From 90b9c2f638c1f2d19cf34db57a48672bc6cbc239 Mon Sep 17 00:00:00 2001 From: jhengazuki Date: Sun, 2 Nov 2025 22:11:36 +0800 Subject: [PATCH] Clean code --- .../android/tv/api/config/LiveConfig.java | 9 ++++-- .../android/tv/api/config/VodConfig.java | 15 ++++++---- .../android/tv/api/loader/BaseLoader.java | 15 ++++++---- .../com/fongmi/android/tv/bean/History.java | 28 ++++--------------- .../java/com/fongmi/android/tv/bean/Keep.java | 18 ++---------- .../com/fongmi/android/tv/player/Players.java | 2 +- .../com/fongmi/android/tv/player/Source.java | 5 ++-- .../android/tv/player/extractor/JianPian.java | 23 +++------------ .../android/tv/server/process/Action.java | 6 +++- .../android/tv/ui/activity/HomeActivity.java | 2 +- .../tv/ui/fragment/SettingFragment.java | 4 +-- 11 files changed, 50 insertions(+), 77 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java index b5734a262..9355e054e 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java @@ -2,6 +2,7 @@ package com.fongmi.android.tv.api.config; import android.net.Uri; import android.text.TextUtils; +import android.util.Log; import com.fongmi.android.tv.App; import com.fongmi.android.tv.R; @@ -81,7 +82,7 @@ public class LiveConfig { } public static void load(Config config, Callback callback) { - get().clear().config(config).load(callback); + get().config(config).load(callback); } public LiveConfig init() { @@ -108,7 +109,7 @@ public class LiveConfig { } public void load() { - if (isEmpty()) load(new Callback()); + load(new Callback()); } public void load(Callback callback) { @@ -120,7 +121,7 @@ public class LiveConfig { private void loadConfig(Callback callback) { try { String text = Decoder.getJson(UrlUtil.convert(config.getUrl())); - if (!Json.isObj(text)) parseText(text, callback); + if (!Json.isObj(text)) clear().parseText(text, callback); else checkJson(Json.parse(text).getAsJsonObject(), callback); } catch (Throwable e) { if (TextUtils.isEmpty(config.getUrl())) App.post(() -> callback.error("")); @@ -167,6 +168,7 @@ public class LiveConfig { private void parseConfig(JsonObject object, Callback callback) { try { + clear(); initLive(object); initOther(object); } catch (Throwable e) { @@ -177,6 +179,7 @@ public class LiveConfig { } private void initLive(JsonObject object) { + Log.e("DDD", "initLive"); List lives = new ArrayList<>(); String spider = Json.safeString(object, "spider"); BaseLoader.get().parseJar(spider, false); diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java index f5ad68694..ef60a1706 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java @@ -71,13 +71,14 @@ public class VodConfig { } public static void load(Config config, Callback callback) { - get().clear().config(config).load(callback); + get().config(config).live(true).load(callback); } public VodConfig init() { this.wall = null; this.home = null; this.parse = null; + this.loadLive = false; this.config = Config.vod(); this.ads = new ArrayList<>(); this.doh = new ArrayList<>(); @@ -85,7 +86,6 @@ public class VodConfig { this.sites = new ArrayList<>(); this.flags = new ArrayList<>(); this.parses = new ArrayList<>(); - this.loadLive = false; return this; } @@ -94,6 +94,11 @@ public class VodConfig { return this; } + public VodConfig live(boolean loadLive) { + this.loadLive = loadLive; + return this; + } + public VodConfig clear() { this.wall = null; this.home = null; @@ -104,8 +109,7 @@ public class VodConfig { this.sites.clear(); this.flags.clear(); this.parses.clear(); - this.loadLive = true; - App.execute(() -> BaseLoader.get().clear()); + BaseLoader.get().clear(); return this; } @@ -148,6 +152,7 @@ public class VodConfig { private void parseConfig(JsonObject object, Callback callback) { try { + clear(); initSite(object); initParse(object); initOther(object); @@ -211,7 +216,7 @@ public class VodConfig { private void initLive(JsonObject object) { Config temp = Config.find(config, 1).save(); boolean sync = LiveConfig.get().needSync(config.getUrl()); - if (sync) LiveConfig.get().clear().config(temp).parse(object); + if (sync) LiveConfig.get().config(temp).parse(object); } public List getSites() { diff --git a/app/src/main/java/com/fongmi/android/tv/api/loader/BaseLoader.java b/app/src/main/java/com/fongmi/android/tv/api/loader/BaseLoader.java index c4c8eb153..837564322 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/loader/BaseLoader.java +++ b/app/src/main/java/com/fongmi/android/tv/api/loader/BaseLoader.java @@ -2,6 +2,7 @@ package com.fongmi.android.tv.api.loader; import android.text.TextUtils; +import com.fongmi.android.tv.App; import com.fongmi.android.tv.api.config.LiveConfig; import com.fongmi.android.tv.api.config.VodConfig; import com.fongmi.android.tv.bean.Live; @@ -33,15 +34,17 @@ public class BaseLoader { } private BaseLoader() { - this.jarLoader = new JarLoader(); - this.pyLoader = new PyLoader(); - this.jsLoader = new JsLoader(); + jarLoader = new JarLoader(); + pyLoader = new PyLoader(); + jsLoader = new JsLoader(); } public void clear() { - this.jarLoader.clear(); - this.pyLoader.clear(); - this.jsLoader.clear(); + App.execute(() -> { + jarLoader.clear(); + pyLoader.clear(); + jsLoader.clear(); + }); } public Spider getSpider(String key, String api, String ext, String jar) { 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 0e9468488..8346036a3 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 @@ -14,7 +14,6 @@ import com.fongmi.android.tv.Constant; import com.fongmi.android.tv.R; import com.fongmi.android.tv.api.config.VodConfig; import com.fongmi.android.tv.db.AppDatabase; -import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.impl.Diffable; import com.google.gson.annotations.SerializedName; import com.google.gson.reflect.TypeToken; @@ -330,29 +329,14 @@ public class History implements Diffable { } } - private static void startSync(List targets) { - for (History target : targets) { + public static void sync(List targets) { + targets.forEach(target -> { List items = findByName(target.getVodName()); - if (items.isEmpty()) { - target.cid(VodConfig.getCid()).save(); - continue; - } - long latestLocalTime = 0; - for (History item : items) { - if (item.getCreateTime() > latestLocalTime) { - latestLocalTime = item.getCreateTime(); - } + if (items.isEmpty()) target.cid(VodConfig.getCid()).save(); + else { + long latestTime = items.stream().mapToLong(History::getCreateTime).max().orElse(0L); + if (target.getCreateTime() > latestTime) target.cid(VodConfig.getCid()).merge(items, true).save(); } - if (target.getCreateTime() > latestLocalTime) { - target.cid(VodConfig.getCid()).merge(items, true).save(); - } - } - } - - public static void sync(List targets) { - App.execute(() -> { - startSync(targets); - RefreshEvent.history(); }); } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Keep.java b/app/src/main/java/com/fongmi/android/tv/bean/Keep.java index 0f3ab24aa..b556d56f9 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Keep.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Keep.java @@ -8,7 +8,6 @@ import androidx.room.PrimaryKey; import com.fongmi.android.tv.App; import com.fongmi.android.tv.api.config.VodConfig; import com.fongmi.android.tv.db.AppDatabase; -import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.impl.Diffable; import com.google.gson.annotations.SerializedName; import com.google.gson.reflect.TypeToken; @@ -154,21 +153,10 @@ public class Keep implements Diffable { return this; } - private static void startSync(List configs, List targets) { - for (Keep target : targets) { - for (Config config : configs) { - if (target.getCid() == config.getId()) { - target.save(Config.find(config).getId()); - } - } - } - } - public static void sync(List configs, List targets) { - App.execute(() -> { - startSync(configs, targets); - RefreshEvent.keep(); - }); + targets.forEach(target -> configs.stream() + .filter(config -> target.getCid() == config.getId()).findFirst() + .ifPresent(config -> target.save(Config.find(config).getId()))); } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index 41d56582b..477c21411 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -401,9 +401,9 @@ public class Players implements Player.Listener, ParseCallback { stopParse(); releasePlayer(); session.release(); + Source.get().stop(); removeTimeoutCheck(); Server.get().setPlayer(null); - App.execute(() -> Source.get().stop()); } private void releasePlayer() { diff --git a/app/src/main/java/com/fongmi/android/tv/player/Source.java b/app/src/main/java/com/fongmi/android/tv/player/Source.java index 7ee07f9ba..2879fe617 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Source.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Source.java @@ -1,5 +1,6 @@ package com.fongmi.android.tv.player; +import com.fongmi.android.tv.App; import com.fongmi.android.tv.bean.Channel; import com.fongmi.android.tv.bean.Episode; import com.fongmi.android.tv.bean.Flag; @@ -92,12 +93,12 @@ public class Source { public void stop() { if (extractors == null) return; - for (Extractor extractor : extractors) extractor.stop(); + App.execute(() -> extractors.forEach(Extractor::stop)); } public void exit() { if (extractors == null) return; - for (Extractor extractor : extractors) extractor.exit(); + App.execute(() -> extractors.forEach(Extractor::exit)); } public interface Extractor { diff --git a/app/src/main/java/com/fongmi/android/tv/player/extractor/JianPian.java b/app/src/main/java/com/fongmi/android/tv/player/extractor/JianPian.java index fe39a3e46..2e2e32736 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/extractor/JianPian.java +++ b/app/src/main/java/com/fongmi/android/tv/player/extractor/JianPian.java @@ -2,9 +2,7 @@ package com.fongmi.android.tv.player.extractor; import android.net.Uri; -import com.fongmi.android.tv.App; import com.fongmi.android.tv.player.Source; -import com.fongmi.android.tv.utils.Clock; import com.fongmi.android.tv.utils.FileUtil; import com.github.catvod.utils.Path; import com.p2p.P2PClass; @@ -12,11 +10,10 @@ import com.p2p.P2PClass; import java.net.URLDecoder; import java.net.URLEncoder; -public class JianPian implements Source.Extractor, Clock.Callback { +public class JianPian implements Source.Extractor { private P2PClass p2p; private String path; - private Clock clock; @Override public boolean match(String scheme, String host) { @@ -25,23 +22,22 @@ public class JianPian implements Source.Extractor, Clock.Callback { private void init() { if (p2p == null) p2p = new P2PClass(); - if (clock == null) clock = Clock.create(); } @Override public String fetch(String url) throws Exception { init(); stop(); - check(10); + check(); start(url); return "http://127.0.0.1:" + p2p.port + "/" + URLEncoder.encode(Uri.parse(path).getLastPathSegment(), "GBK"); } - private void check(int limit) { + private void check() { double cache = FileUtil.getDirectorySize(Path.jpa()); double total = cache + FileUtil.getAvailableStorageSpace(Path.jpa()); int percent = (int) (cache / total * 100); - if (percent > limit) Path.clear(Path.jpa()); + if (percent > 10) Path.clear(Path.jpa()); } private void start(String url) { @@ -51,8 +47,6 @@ public class JianPian implements Source.Extractor, Clock.Callback { path = path.replace("tvbox-xg://", "").replace("tvbox-xg:", ""); path = path.replace("xg://", "ftp://").replace("xgplay://", "ftp://"); p2p.P2Pdoxstart(path.getBytes("GBK")); - clock.setCallback(this); - clock.stop().start(); } catch (Exception e) { e.printStackTrace(); } @@ -61,7 +55,6 @@ public class JianPian implements Source.Extractor, Clock.Callback { @Override public void stop() { try { - if (clock != null) clock.stop(); if (p2p == null || path == null) return; p2p.P2Pdoxpause(path.getBytes("GBK")); } catch (Exception e) { @@ -73,13 +66,5 @@ public class JianPian implements Source.Extractor, Clock.Callback { @Override public void exit() { - App.execute(() -> check(10)); - if (clock != null) clock.release(); - } - - @Override - public void onTimeChanged() { - long seconds = System.currentTimeMillis() / 1000 % 60; - if (seconds % 30 == 0) App.execute(() -> check(60)); } } diff --git a/app/src/main/java/com/fongmi/android/tv/server/process/Action.java b/app/src/main/java/com/fongmi/android/tv/server/process/Action.java index 4fd99a44f..d0d74359b 100644 --- a/app/src/main/java/com/fongmi/android/tv/server/process/Action.java +++ b/app/src/main/java/com/fongmi/android/tv/server/process/Action.java @@ -139,6 +139,7 @@ public class Action implements Process { if (config.getUrl().equals(VodConfig.getUrl())) { if (force) History.delete(config.getId()); History.sync(targets); + RefreshEvent.history(); } else { VodConfig.load(config, getCallback(targets)); } @@ -151,6 +152,7 @@ public class Action implements Process { RefreshEvent.config(); RefreshEvent.video(); History.sync(targets); + RefreshEvent.history(); } @Override @@ -168,6 +170,7 @@ public class Action implements Process { } else { if (force) Keep.deleteAll(); Keep.sync(configs, targets); + RefreshEvent.keep(); } } @@ -175,10 +178,11 @@ public class Action implements Process { return new Callback() { @Override public void success() { - RefreshEvent.history(); RefreshEvent.config(); RefreshEvent.video(); Keep.sync(configs, targets); + RefreshEvent.history(); + RefreshEvent.keep(); } @Override diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HomeActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HomeActivity.java index 367861026..420f6a947 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HomeActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HomeActivity.java @@ -116,7 +116,7 @@ public class HomeActivity extends BaseActivity implements NavigationBarView.OnIt private void initConfig() { WallConfig.get().init(); - LiveConfig.get().init().load(); + LiveConfig.get().init(); VodConfig.get().init().load(getCallback()); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java index 41aa95082..814655a64 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java @@ -338,8 +338,8 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit } private void initConfig() { - WallConfig.get().init().load(); - LiveConfig.get().init().load(); + WallConfig.get().init(); + LiveConfig.get().init(); VodConfig.get().init().load(getCallback(0)); }