From 3e165307e605da5b481208c136609d5965bbdea3 Mon Sep 17 00:00:00 2001 From: FongMi Date: Fri, 2 Aug 2024 00:01:41 +0800 Subject: [PATCH] Optimize loader - part 1 --- .../android/tv/ui/activity/HomeActivity.java | 2 + .../com/fongmi/android/tv/api/LiveParser.java | 5 +- .../android/tv/api/config/LiveConfig.java | 50 ++-------- .../android/tv/api/config/VodConfig.java | 59 +----------- .../android/tv/api/loader/BaseLoader.java | 91 +++++++++++++++++++ .../android/tv/api/loader/JarLoader.java | 4 + .../android/tv/api/loader/JsLoader.java | 14 +-- .../android/tv/api/loader/PyLoader.java | 14 +-- .../java/com/fongmi/android/tv/bean/Live.java | 11 +++ .../java/com/fongmi/android/tv/bean/Site.java | 11 +++ .../android/tv/model/LiveViewModel.java | 3 +- .../android/tv/model/SiteViewModel.java | 18 ++-- .../fongmi/android/tv/player/ParseJob.java | 5 +- .../android/tv/server/process/Proxy.java | 9 +- .../android/tv/ui/custom/CustomWebView.java | 4 +- .../android/tv/ui/activity/MainActivity.java | 2 + 16 files changed, 147 insertions(+), 155 deletions(-) create mode 100644 app/src/main/java/com/fongmi/android/tv/api/loader/BaseLoader.java diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java index b79b589b1..ef5d4b3dd 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java @@ -30,6 +30,7 @@ import com.fongmi.android.tv.Updater; import com.fongmi.android.tv.api.config.LiveConfig; import com.fongmi.android.tv.api.config.VodConfig; import com.fongmi.android.tv.api.config.WallConfig; +import com.fongmi.android.tv.api.loader.BaseLoader; import com.fongmi.android.tv.bean.Config; import com.fongmi.android.tv.bean.Func; import com.fongmi.android.tv.bean.History; @@ -492,6 +493,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen @Override protected void onDestroy() { super.onDestroy(); + BaseLoader.get().clear(); WallConfig.get().clear(); LiveConfig.get().clear(); VodConfig.get().clear(); diff --git a/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java b/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java index 5f6b6edfe..bca30264f 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java +++ b/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java @@ -4,7 +4,6 @@ import android.util.Base64; import androidx.media3.common.MimeTypes; -import com.fongmi.android.tv.api.config.LiveConfig; import com.fongmi.android.tv.bean.Catchup; import com.fongmi.android.tv.bean.Channel; import com.fongmi.android.tv.bean.ClearKey; @@ -12,7 +11,6 @@ import com.fongmi.android.tv.bean.Drm; import com.fongmi.android.tv.bean.Group; import com.fongmi.android.tv.bean.Live; import com.fongmi.android.tv.utils.UrlUtil; -import com.github.catvod.crawler.Spider; import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Json; import com.github.catvod.utils.Path; @@ -69,8 +67,7 @@ public class LiveParser { } private static void spider(Live live, String text) throws Exception { - Spider spider = LiveConfig.get().getSpider(live); - if (text.isEmpty()) text = spider.liveContent(); + if (text.isEmpty()) text = live.spider().liveContent(); if (Json.valid(text)) json(live, text); else text(live, text); } 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 f1939d7df..41e99be26 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 @@ -7,9 +7,7 @@ import com.fongmi.android.tv.R; import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.api.Decoder; import com.fongmi.android.tv.api.LiveParser; -import com.fongmi.android.tv.api.loader.JarLoader; -import com.fongmi.android.tv.api.loader.JsLoader; -import com.fongmi.android.tv.api.loader.PyLoader; +import com.fongmi.android.tv.api.loader.BaseLoader; import com.fongmi.android.tv.bean.Channel; import com.fongmi.android.tv.bean.Config; import com.fongmi.android.tv.bean.Depot; @@ -22,8 +20,6 @@ import com.fongmi.android.tv.impl.Callback; import com.fongmi.android.tv.ui.activity.LiveActivity; import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.UrlUtil; -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderNull; import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Json; import com.google.gson.JsonElement; @@ -32,16 +28,12 @@ import com.google.gson.JsonObject; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Map; public class LiveConfig { private List lives; private List rules; private List ads; - private JarLoader jarLoader; - private PyLoader pyLoader; - private JsLoader jsLoader; private Config config; private boolean sync; private Live home; @@ -54,6 +46,10 @@ public class LiveConfig { return Loader.INSTANCE; } + public static int getCid() { + return get().getConfig().getId(); + } + public static String getUrl() { return get().getConfig().getUrl(); } @@ -91,9 +87,6 @@ public class LiveConfig { this.ads = new ArrayList<>(); this.rules = new ArrayList<>(); this.lives = new ArrayList<>(); - this.jarLoader = new JarLoader(); - this.pyLoader = new PyLoader(); - this.jsLoader = new JsLoader(); return config(Config.live()); } @@ -109,9 +102,6 @@ public class LiveConfig { this.ads.clear(); this.rules.clear(); this.lives.clear(); - this.jarLoader.clear(); - this.pyLoader.clear(); - this.jsLoader.clear(); return this; } @@ -172,6 +162,7 @@ public class LiveConfig { try { initLive(object); initOther(object); + BaseLoader.get().parseJar(object); } catch (Throwable e) { e.printStackTrace(); } finally { @@ -211,35 +202,6 @@ public class LiveConfig { return ext; } - public Spider getSpider(Live live) { - boolean js = live.getApi().contains(".js"); - boolean py = live.getApi().contains(".py"); - boolean csp = live.getApi().startsWith("csp_"); - if (py) return pyLoader.getSpider(live.getName(), live.getApi(), live.getExt()); - else if (js) return jsLoader.getSpider(live.getName(), live.getApi(), live.getExt(), live.getJar()); - else if (csp) return jarLoader.getSpider(live.getName(), live.getApi(), live.getExt(), live.getJar()); - else return new SpiderNull(); - } - - public void setRecent(Live live) { - boolean js = live.getApi().contains(".js"); - boolean py = live.getApi().contains(".py"); - boolean csp = live.getApi().startsWith("csp_"); - if (js) jsLoader.setRecent(live.getName()); - else if (py) pyLoader.setRecent(live.getName()); - else if (csp) jarLoader.setRecent(live.getJar()); - } - - public Object[] proxyLocal(Map params) { - if ("js".equals(params.get("do"))) { - return jsLoader.proxyInvoke(params); - } else if ("py".equals(params.get("do"))) { - return pyLoader.proxyInvoke(params); - } else { - return jarLoader.proxyInvoke(params); - } - } - private void bootLive() { Setting.putBootLive(false); LiveActivity.start(App.get()); 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 16ee9a685..b9eb5f195 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 @@ -5,9 +5,7 @@ import android.text.TextUtils; import com.fongmi.android.tv.App; import com.fongmi.android.tv.R; import com.fongmi.android.tv.api.Decoder; -import com.fongmi.android.tv.api.loader.JarLoader; -import com.fongmi.android.tv.api.loader.JsLoader; -import com.fongmi.android.tv.api.loader.PyLoader; +import com.fongmi.android.tv.api.loader.BaseLoader; import com.fongmi.android.tv.bean.Config; import com.fongmi.android.tv.bean.Depot; import com.fongmi.android.tv.bean.Parse; @@ -17,21 +15,14 @@ import com.fongmi.android.tv.impl.Callback; import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.UrlUtil; import com.github.catvod.bean.Doh; -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderNull; import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Json; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import org.json.JSONObject; - import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; public class VodConfig { @@ -41,9 +32,6 @@ public class VodConfig { private List parses; private List flags; private List ads; - private JarLoader jarLoader; - private PyLoader pyLoader; - private JsLoader jsLoader; private boolean loadLive; private Config config; private Parse parse; @@ -97,9 +85,6 @@ public class VodConfig { this.sites = new ArrayList<>(); this.flags = new ArrayList<>(); this.parses = new ArrayList<>(); - this.jarLoader = new JarLoader(); - this.pyLoader = new PyLoader(); - this.jsLoader = new JsLoader(); this.loadLive = false; return this; } @@ -119,9 +104,6 @@ public class VodConfig { this.sites.clear(); this.flags.clear(); this.parses.clear(); - this.jarLoader.clear(); - this.pyLoader.clear(); - this.jsLoader.clear(); this.loadLive = true; return this; } @@ -169,8 +151,8 @@ public class VodConfig { initSite(object); initParse(object); initOther(object); + BaseLoader.get().parseJar(object); if (loadLive && object.has("lives")) initLive(object); - jarLoader.parseJar("", Json.safeString(object, "spider")); config.logo(Json.safeString(object, "logo")); config.json(object.toString()).update(); App.post(callback::success); @@ -235,43 +217,6 @@ public class VodConfig { return ext; } - public Spider getSpider(Site site) { - boolean js = site.getApi().contains(".js"); - boolean py = site.getApi().contains(".py"); - boolean csp = site.getApi().startsWith("csp_"); - if (py) return pyLoader.getSpider(site.getKey(), site.getApi(), site.getExt()); - else if (js) return jsLoader.getSpider(site.getKey(), site.getApi(), site.getExt(), site.getJar()); - else if (csp) return jarLoader.getSpider(site.getKey(), site.getApi(), site.getExt(), site.getJar()); - else return new SpiderNull(); - } - - public void setRecent(Site site) { - boolean js = site.getApi().contains(".js"); - boolean py = site.getApi().contains(".py"); - boolean csp = site.getApi().startsWith("csp_"); - if (js) jsLoader.setRecent(site.getKey()); - else if (py) pyLoader.setRecent(site.getKey()); - else if (csp) jarLoader.setRecent(site.getJar()); - } - - public Object[] proxyLocal(Map params) { - if ("js".equals(params.get("do"))) { - return jsLoader.proxyInvoke(params); - } else if ("py".equals(params.get("do"))) { - return pyLoader.proxyInvoke(params); - } else { - return jarLoader.proxyInvoke(params); - } - } - - public JSONObject jsonExt(String key, LinkedHashMap jxs, String url) throws Throwable { - return jarLoader.jsonExt(key, jxs, url); - } - - public JSONObject jsonExtMix(String flag, String key, String name, LinkedHashMap> jxs, String url) throws Throwable { - return jarLoader.jsonExtMix(flag, key, name, jxs, url); - } - public List getDoh() { List items = Doh.get(App.get()); if (doh == null) return items; 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 new file mode 100644 index 000000000..3c3f7b094 --- /dev/null +++ b/app/src/main/java/com/fongmi/android/tv/api/loader/BaseLoader.java @@ -0,0 +1,91 @@ +package com.fongmi.android.tv.api.loader; + +import com.fongmi.android.tv.api.config.LiveConfig; +import com.fongmi.android.tv.api.config.VodConfig; +import com.github.catvod.crawler.Spider; +import com.github.catvod.crawler.SpiderNull; +import com.github.catvod.utils.Json; +import com.google.gson.JsonObject; + +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +public class BaseLoader { + + private final JarLoader jarLoader; + private final PyLoader pyLoader; + private final JsLoader jsLoader; + + private static class Loader { + static volatile BaseLoader INSTANCE = new BaseLoader(); + } + + public static BaseLoader get() { + return Loader.INSTANCE; + } + + private BaseLoader() { + this.jarLoader = new JarLoader(); + this.pyLoader = new PyLoader(); + this.jsLoader = new JsLoader(); + } + + public void clear() { + this.jarLoader.clear(); + this.pyLoader.clear(); + this.jsLoader.clear(); + } + + public Spider getSpider(String key, String api, String ext, String jar) { + boolean js = api.contains(".js"); + boolean py = api.contains(".py"); + boolean csp = api.startsWith("csp_"); + if (py) return pyLoader.getSpider(key, api, ext); + else if (js) return jsLoader.getSpider(key, api, ext, jar); + else if (csp) return jarLoader.getSpider(key, api, ext, jar); + else return new SpiderNull(); + } + + public Spider getSpider(Map params) { + if (!params.containsKey("siteKey")) return new SpiderNull(); + boolean live = params.containsKey("live") && "true".equals(params.get("live")); + boolean vod = !params.containsKey("live") || "false".equals(params.get("live")); + if (live) return LiveConfig.get().getLive(params.get("siteKey")).spider(); + if (vod) return VodConfig.get().getSite(params.get("siteKey")).spider(); + return new SpiderNull(); + } + + public void setRecent(String key, String api, String jar) { + boolean js = api.contains(".js"); + boolean py = api.contains(".py"); + boolean csp = api.startsWith("csp_"); + if (js) jsLoader.setRecent(key); + else if (py) pyLoader.setRecent(key); + else if (csp) jarLoader.setRecent(jar); + } + + public Object[] proxyLocal(Map params) { + if ("js".equals(params.get("do"))) { + return jsLoader.proxyInvoke(params); + } else if ("py".equals(params.get("do"))) { + return pyLoader.proxyInvoke(params); + } else { + return jarLoader.proxyInvoke(params); + } + } + + public void parseJar(JsonObject object) { + jarLoader.parseJar(Json.safeString(object, "spider")); + } + + public JSONObject jsonExt(String key, LinkedHashMap jxs, String url) throws Throwable { + return jarLoader.jsonExt(key, jxs, url); + } + + public JSONObject jsonExtMix(String flag, String key, String name, LinkedHashMap> jxs, String url) throws Throwable { + return jarLoader.jsonExtMix(flag, key, name, jxs, url); + } +} diff --git a/app/src/main/java/com/fongmi/android/tv/api/loader/JarLoader.java b/app/src/main/java/com/fongmi/android/tv/api/loader/JarLoader.java index 31353e83b..1029f4578 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/loader/JarLoader.java +++ b/app/src/main/java/com/fongmi/android/tv/api/loader/JarLoader.java @@ -80,6 +80,10 @@ public class JarLoader { } } + public void parseJar(String jar) { + parseJar("", jar); + } + public void parseJar(String key, String jar) { if (loaders.containsKey(key)) return; String[] texts = jar.split(";md5;"); diff --git a/app/src/main/java/com/fongmi/android/tv/api/loader/JsLoader.java b/app/src/main/java/com/fongmi/android/tv/api/loader/JsLoader.java index 48c888df7..b3e4a6cec 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/loader/JsLoader.java +++ b/app/src/main/java/com/fongmi/android/tv/api/loader/JsLoader.java @@ -1,8 +1,6 @@ package com.fongmi.android.tv.api.loader; import com.fongmi.android.tv.App; -import com.fongmi.android.tv.api.config.LiveConfig; -import com.fongmi.android.tv.api.config.VodConfig; import com.github.catvod.crawler.Spider; import com.github.catvod.crawler.SpiderNull; @@ -53,18 +51,10 @@ public class JsLoader { } } - private Spider find(Map params) { - if (!params.containsKey("siteKey")) return spiders.get(recent); - boolean live = params.containsKey("live") && "true".equals(params.get("live")); - boolean vod = !params.containsKey("live") || "false".equals(params.get("live")); - if (vod) return VodConfig.get().getSpider(VodConfig.get().getSite(params.get("siteKey"))); - if (live) return LiveConfig.get().getSpider(LiveConfig.get().getLive(params.get("siteKey"))); - return new SpiderNull(); - } - public Object[] proxyInvoke(Map params) { try { - return find(params).proxyLocal(params); + if (!params.containsKey("siteKey")) return spiders.get(recent).proxyLocal(params); + return BaseLoader.get().getSpider(params).proxyLocal(params); } catch (Throwable e) { e.printStackTrace(); return null; diff --git a/app/src/main/java/com/fongmi/android/tv/api/loader/PyLoader.java b/app/src/main/java/com/fongmi/android/tv/api/loader/PyLoader.java index 2ce74856a..0bb692ded 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/loader/PyLoader.java +++ b/app/src/main/java/com/fongmi/android/tv/api/loader/PyLoader.java @@ -3,8 +3,6 @@ package com.fongmi.android.tv.api.loader; import android.content.Context; import com.fongmi.android.tv.App; -import com.fongmi.android.tv.api.config.LiveConfig; -import com.fongmi.android.tv.api.config.VodConfig; import com.github.catvod.crawler.Spider; import com.github.catvod.crawler.SpiderNull; @@ -53,18 +51,10 @@ public class PyLoader { } } - private Spider find(Map params) { - if (!params.containsKey("siteKey")) return spiders.get(recent); - boolean live = params.containsKey("live") && "true".equals(params.get("live")); - boolean vod = !params.containsKey("live") || "false".equals(params.get("live")); - if (vod) return VodConfig.get().getSpider(VodConfig.get().getSite(params.get("siteKey"))); - if (live) return LiveConfig.get().getSpider(LiveConfig.get().getLive(params.get("siteKey"))); - return new SpiderNull(); - } - public Object[] proxyInvoke(Map params) { try { - return find(params).proxyLocal(params); + if (!params.containsKey("siteKey")) return spiders.get(recent).proxyLocal(params); + return BaseLoader.get().getSpider(params).proxyLocal(params); } catch (Throwable e) { e.printStackTrace(); return null; diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Live.java b/app/src/main/java/com/fongmi/android/tv/bean/Live.java index c57b3c092..c27d80472 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Live.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Live.java @@ -11,8 +11,10 @@ import androidx.room.PrimaryKey; import com.fongmi.android.tv.App; import com.fongmi.android.tv.Constant; import com.fongmi.android.tv.R; +import com.fongmi.android.tv.api.loader.BaseLoader; import com.fongmi.android.tv.db.AppDatabase; import com.fongmi.android.tv.gson.ExtAdapter; +import com.github.catvod.crawler.Spider; import com.github.catvod.utils.Json; import com.google.common.net.HttpHeaders; import com.google.gson.JsonElement; @@ -298,6 +300,15 @@ public class Live { return this; } + public Live recent() { + BaseLoader.get().setRecent(getName(), getApi(), getJar()); + return this; + } + + public Spider spider() { + return BaseLoader.get().getSpider(getName(), getApi(), getExt(), getJar()); + } + public Map getHeaders() { Map headers = Json.toMap(getHeader()); if (!getUa().isEmpty()) headers.put(HttpHeaders.USER_AGENT, getUa()); diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Site.java b/app/src/main/java/com/fongmi/android/tv/bean/Site.java index d1397de17..1d41bff2f 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Site.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Site.java @@ -11,8 +11,10 @@ import androidx.room.PrimaryKey; import com.fongmi.android.tv.App; import com.fongmi.android.tv.Constant; +import com.fongmi.android.tv.api.loader.BaseLoader; import com.fongmi.android.tv.db.AppDatabase; import com.fongmi.android.tv.gson.ExtAdapter; +import com.github.catvod.crawler.Spider; import com.github.catvod.utils.Json; import com.github.catvod.utils.Trans; import com.google.gson.JsonElement; @@ -265,6 +267,15 @@ public class Site implements Parcelable { return this; } + public Site recent() { + BaseLoader.get().setRecent(getKey(), getApi(), getJar()); + return this; + } + + public Spider spider() { + return BaseLoader.get().getSpider(getKey(), getApi(), getExt(), getJar()); + } + public static Site find(String key) { return AppDatabase.get().getSiteDao().find(key); } diff --git a/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java b/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java index 528d0ef51..8e9582464 100644 --- a/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java +++ b/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java @@ -60,9 +60,8 @@ public class LiveViewModel extends ViewModel { public void getLive(Live item) { execute(LIVE, () -> { - LiveConfig.get().setRecent(item); + LiveParser.start(item.recent()); setTimeZone(item.getEpg()); - LiveParser.start(item); verify(item); return item; }); diff --git a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java index 9795df044..b4698d074 100644 --- a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java +++ b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java @@ -62,10 +62,9 @@ public class SiteViewModel extends ViewModel { execute(result, () -> { Site site = VodConfig.get().getHome(); if (site.getType() == 3) { - Spider spider = VodConfig.get().getSpider(site); + Spider spider = site.recent().spider(); String homeContent = spider.homeContent(true); SpiderDebug.log(homeContent); - VodConfig.get().setRecent(site); Result result = Result.fromJson(homeContent); if (result.getList().size() > 0) return result; String homeVideoContent = spider.homeVideoContent(); @@ -90,10 +89,9 @@ public class SiteViewModel extends ViewModel { execute(result, () -> { Site site = VodConfig.get().getSite(key); if (site.getType() == 3) { - Spider spider = VodConfig.get().getSpider(site); + Spider spider = site.recent().spider(); String categoryContent = spider.categoryContent(tid, page, filter, extend); SpiderDebug.log(categoryContent); - VodConfig.get().setRecent(site); return Result.fromJson(categoryContent); } else { ArrayMap params = new ArrayMap<>(); @@ -113,10 +111,9 @@ public class SiteViewModel extends ViewModel { execute(result, () -> { Site site = VodConfig.get().getSite(key); if (site.getType() == 3) { - Spider spider = VodConfig.get().getSpider(site); + Spider spider = site.recent().spider(); String detailContent = spider.detailContent(Arrays.asList(id)); SpiderDebug.log(detailContent); - VodConfig.get().setRecent(site); Result result = Result.fromJson(detailContent); if (!result.getList().isEmpty()) result.getList().get(0).setVodFlags(); if (!result.getList().isEmpty()) Source.get().parse(result.getList().get(0).getVodFlags()); @@ -148,10 +145,9 @@ public class SiteViewModel extends ViewModel { Source.get().stop(); Site site = VodConfig.get().getSite(key); if (site.getType() == 3) { - Spider spider = VodConfig.get().getSpider(site); + Spider spider = site.recent().spider(); String playerContent = spider.playerContent(flag, id, VodConfig.get().getFlags()); SpiderDebug.log(playerContent); - VodConfig.get().setRecent(site); Result result = Result.fromJson(playerContent); if (result.getFlag().isEmpty()) result.setFlag(flag); result.setUrl(Source.get().fetch(result)); @@ -195,8 +191,7 @@ public class SiteViewModel extends ViewModel { public void searchContent(Site site, String keyword, boolean quick) throws Throwable { if (site.getType() == 3) { - Spider spider = VodConfig.get().getSpider(site); - String searchContent = spider.searchContent(Trans.t2s(keyword), quick); + String searchContent = site.spider().searchContent(Trans.t2s(keyword), quick); SpiderDebug.log(site.getName() + "," + searchContent); post(site, Result.fromJson(searchContent)); } else { @@ -212,8 +207,7 @@ public class SiteViewModel extends ViewModel { public void searchContent(Site site, String keyword, String page) { execute(result, () -> { if (site.getType() == 3) { - Spider spider = VodConfig.get().getSpider(site); - String searchContent = spider.searchContent(Trans.t2s(keyword), false, page); + String searchContent = site.spider().searchContent(Trans.t2s(keyword), false, page); SpiderDebug.log(site.getName() + "," + searchContent); Result result = Result.fromJson(searchContent); for (Vod vod : result.getList()) vod.setSite(site); diff --git a/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java b/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java index cca845a7b..d366acc0d 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java +++ b/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java @@ -5,6 +5,7 @@ import android.text.TextUtils; import com.fongmi.android.tv.App; import com.fongmi.android.tv.Constant; import com.fongmi.android.tv.api.config.VodConfig; +import com.fongmi.android.tv.api.loader.BaseLoader; import com.fongmi.android.tv.bean.Parse; import com.fongmi.android.tv.bean.Result; import com.fongmi.android.tv.impl.ParseCallback; @@ -120,13 +121,13 @@ public class ParseJob implements ParseCallback { private void jsonExtend(String webUrl) throws Throwable { LinkedHashMap jxs = new LinkedHashMap<>(); for (Parse item : VodConfig.get().getParses()) if (item.getType() == 1) jxs.put(item.getName(), item.extUrl()); - checkResult(Result.fromObject(VodConfig.get().jsonExt(parse.getUrl(), jxs, webUrl))); + checkResult(Result.fromObject(BaseLoader.get().jsonExt(parse.getUrl(), jxs, webUrl))); } private void jsonMix(String webUrl, String flag) throws Throwable { LinkedHashMap> jxs = new LinkedHashMap<>(); for (Parse item : VodConfig.get().getParses()) jxs.put(item.getName(), item.mixMap()); - checkResult(Result.fromObject(VodConfig.get().jsonExtMix(flag, parse.getUrl(), parse.getName(), jxs, webUrl))); + checkResult(Result.fromObject(BaseLoader.get().jsonExtMix(flag, parse.getUrl(), parse.getName(), jxs, webUrl))); } private void godParse(String webUrl, String flag) throws Exception { diff --git a/app/src/main/java/com/fongmi/android/tv/server/process/Proxy.java b/app/src/main/java/com/fongmi/android/tv/server/process/Proxy.java index 56aa53342..909528b47 100644 --- a/app/src/main/java/com/fongmi/android/tv/server/process/Proxy.java +++ b/app/src/main/java/com/fongmi/android/tv/server/process/Proxy.java @@ -1,7 +1,6 @@ package com.fongmi.android.tv.server.process; -import com.fongmi.android.tv.api.config.LiveConfig; -import com.fongmi.android.tv.api.config.VodConfig; +import com.fongmi.android.tv.api.loader.BaseLoader; import com.fongmi.android.tv.server.Nano; import org.nanohttpd.protocols.http.IHTTPSession; @@ -23,7 +22,7 @@ public class Proxy implements Process { try { Map params = session.getParms(); params.putAll(session.getHeaders()); - Object[] rs = isLive(params) ? LiveConfig.get().proxyLocal(params) : VodConfig.get().proxyLocal(params); + Object[] rs = BaseLoader.get().proxyLocal(params); Response response = Response.newChunkedResponse(Status.lookup((Integer) rs[0]), (String) rs[1], (InputStream) rs[2]); if (rs.length > 3 && rs[3] != null) for (Map.Entry entry : ((Map) rs[3]).entrySet()) response.addHeader(entry.getKey(), entry.getValue()); return response; @@ -31,8 +30,4 @@ public class Proxy implements Process { return Nano.error(e.getMessage()); } } - - private boolean isLive(Map params) { - return params.containsKey("live") && "true".equals(params.get("live")); - } } diff --git a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java index fc2b58f8c..1f643b286 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java @@ -21,7 +21,6 @@ import com.fongmi.android.tv.Constant; import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.api.config.LiveConfig; import com.fongmi.android.tv.api.config.VodConfig; -import com.fongmi.android.tv.bean.Site; import com.fongmi.android.tv.impl.ParseCallback; import com.fongmi.android.tv.ui.dialog.WebDialog; import com.fongmi.android.tv.utils.Sniffer; @@ -180,8 +179,7 @@ public class CustomWebView extends WebView implements DialogInterface.OnDismissL private boolean isVideoFormat(String url) { try { Logger.t(TAG).d(url); - Site site = VodConfig.get().getSite(key); - Spider spider = VodConfig.get().getSpider(site); + Spider spider = VodConfig.get().getSite(key).spider(); if (spider.manualVideoCheck()) return spider.isVideoFormat(url); return Sniffer.isVideoFormat(url); } catch (Exception ignored) { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java index 176dc702a..353355ba5 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java @@ -21,6 +21,7 @@ import com.fongmi.android.tv.Updater; import com.fongmi.android.tv.api.config.LiveConfig; import com.fongmi.android.tv.api.config.VodConfig; import com.fongmi.android.tv.api.config.WallConfig; +import com.fongmi.android.tv.api.loader.BaseLoader; import com.fongmi.android.tv.bean.Config; import com.fongmi.android.tv.databinding.ActivityMainBinding; import com.fongmi.android.tv.db.AppDatabase; @@ -218,6 +219,7 @@ public class MainActivity extends BaseActivity implements NavigationBarView.OnIt @Override protected void onDestroy() { super.onDestroy(); + BaseLoader.get().clear(); WallConfig.get().clear(); LiveConfig.get().clear(); VodConfig.get().clear();