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 b1aa874e9..ec5c1a33a 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,7 +2,6 @@ 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; @@ -26,24 +25,26 @@ import com.github.catvod.bean.Header; import com.github.catvod.bean.Proxy; import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Json; -import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.concurrent.Future; +import java.util.function.Function; +import java.util.stream.Collectors; public class LiveConfig { - private volatile Live home; - private volatile Config config; - private volatile List lives; - private volatile List rules; - private volatile List ads; - private volatile Future future; - private volatile boolean sync; + private Live home; + private Config config; + private List lives; + private List rules; + private List ads; + private Future future; + private boolean sync; private static class Loader { static volatile LiveConfig INSTANCE = new LiveConfig(); @@ -179,18 +180,14 @@ public class LiveConfig { } private void initLive(JsonObject object) { - List lives = new ArrayList<>(); String spider = Json.safeString(object, "spider"); BaseLoader.get().parseJar(spider, false); - for (JsonElement element : Json.safeListElement(object, "lives")) { - Live live = Live.objectFrom(element, spider); - if (!lives.contains(live)) lives.add(live); - } - setLives(lives); - for (Live live : lives) { - if (live.getName().equals(config.getHome())) { - setHome(live, true); - } + setLives(Json.safeListElement(object, "lives").stream().map(element -> Live.objectFrom(element, spider)).distinct().toList()); + Map items = Live.findAll().stream().collect(Collectors.toMap(Live::getName, Function.identity())); + for (Live live : getLives()) { + if (live.getName().equals(config.getHome())) setHome(live, true); + Live item = items.get(live.getName()); + if (item != null) live.sync(item); } } 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 ef60a1706..f679e4cf4 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 @@ -19,28 +19,30 @@ import com.github.catvod.bean.Header; import com.github.catvod.bean.Proxy; import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Json; -import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.concurrent.Future; +import java.util.function.Function; +import java.util.stream.Collectors; public class VodConfig { - private volatile Site home; - private volatile String wall; - private volatile Parse parse; - private volatile Config config; - private volatile List doh; - private volatile List rules; - private volatile List sites; - private volatile List ads; - private volatile List flags; - private volatile List parses; - private volatile Future future; - private volatile boolean loadLive; + private Site home; + private String wall; + private Parse parse; + private Config config; + private List doh; + private List rules; + private List sites; + private List ads; + private List flags; + private List parses; + private Future future; + private boolean loadLive; private static class Loader { static volatile VodConfig INSTANCE = new VodConfig(); @@ -170,33 +172,25 @@ public class VodConfig { } private void initSite(JsonObject object) { - if (object.has("video")) { - initSite(object.getAsJsonObject("video")); - return; - } - List sites = new ArrayList<>(); String spider = Json.safeString(object, "spider"); BaseLoader.get().parseJar(spider, true); - for (JsonElement element : Json.safeListElement(object, "sites")) { - Site site = Site.objectFrom(element, spider); - if (!sites.contains(site)) sites.add(site); - } - setSites(sites); - for (Site site : sites) { - if (site.getKey().equals(config.getHome())) { - setHome(site); - } + setSites(Json.safeListElement(object, "sites").stream().map(element -> Site.objectFrom(element, spider)).distinct().toList()); + Map items = Site.findAll().stream().collect(Collectors.toMap(Site::getKey, Function.identity())); + for (Site site : getSites()) { + if (site.getKey().equals(config.getHome())) setHome(site); + Site item = items.get(site.getKey()); + if (item != null) site.sync(item); } } private void initParse(JsonObject object) { - List parses = new ArrayList<>(); - for (JsonElement element : Json.safeListElement(object, "parses")) { - Parse parse = Parse.objectFrom(element); - if (parse.getName().equals(config.getParse()) && parse.getType() > 1) setParse(parse); - if (!parses.contains(parse)) parses.add(parse); + setParses(Json.safeListElement(object, "parses").stream().map(Parse::objectFrom).distinct().toList()); + for (Parse parse : getParses()) { + if (parse.getName().equals(config.getParse()) && parse.getType() > 1) { + setParse(parse); + break; + } } - setParses(parses); } private void initOther(JsonObject object) { diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java index 5f177fd0a..f3fb2024b 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java @@ -27,9 +27,9 @@ import java.util.concurrent.Future; public class WallConfig { - private volatile Config config; - private volatile Future future; - private volatile boolean sync; + private Config config; + private Future future; + private boolean sync; private static class Loader { static volatile WallConfig INSTANCE = new WallConfig(); diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Filter.java b/app/src/main/java/com/fongmi/android/tv/bean/Filter.java index ac92c4845..65f94de50 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Filter.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Filter.java @@ -70,7 +70,7 @@ public class Filter implements Parcelable { public Filter trans() { if (Trans.pass()) return this; - for (Value value : getValue()) value.trans(); + getValue().forEach(Value::trans); return this; } 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 b90cb4f66..23b650eb1 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 @@ -17,6 +17,7 @@ import com.fongmi.android.tv.gson.ExtAdapter; import com.fongmi.android.tv.utils.UrlUtil; import com.github.catvod.crawler.Spider; import com.github.catvod.utils.Json; +import com.github.catvod.utils.Trans; import com.google.common.net.HttpHeaders; import com.google.gson.JsonElement; import com.google.gson.annotations.JsonAdapter; @@ -121,7 +122,7 @@ public class Live { if (live.getJar().isEmpty()) live.setJar(spider); live.setApi(UrlUtil.convert(live.getApi())); live.setExt(UrlUtil.convert(live.getExt())); - return live.sync(); + return live.trans(); } catch (Exception e) { return new Live(); } @@ -322,9 +323,19 @@ public class Live { return this; } + public Live trans() { + if (Trans.pass()) return this; + setName(Trans.s2t(getName())); + return this; + } + public Live sync() { Live item = find(getName()); - if (item == null) return this; + if (item != null) sync(item); + return this; + } + + public Live sync(Live item) { setBoot(item.isBoot()); setPass(item.isPass()); setKeep(item.getKeep()); @@ -348,6 +359,10 @@ public class Live { return headers; } + public static List findAll() { + return AppDatabase.get().getLiveDao().findAll(); + } + public static Live find(String name) { return AppDatabase.get().getLiveDao().find(name); } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Result.java b/app/src/main/java/com/fongmi/android/tv/bean/Result.java index 746365185..19e821e39 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Result.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Result.java @@ -306,9 +306,9 @@ public class Result implements Parcelable { public Result trans() { if (Trans.pass()) return this; - for (Class type : getTypes()) type.trans(); - for (Vod vod : getList()) vod.trans(); - for (Sub sub : getSubs()) sub.trans(); + getTypes().forEach(Class::trans); + getList().forEach(Vod::trans); + getSubs().forEach(Sub::trans); return this; } 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 4fec12043..5a83694ad 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 @@ -24,7 +24,6 @@ import com.google.gson.JsonElement; import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; -import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; @@ -111,7 +110,7 @@ public class Site implements Parcelable { if (site.getJar().isEmpty()) site.setJar(spider); site.setApi(UrlUtil.convert(site.getApi())); site.setExt(UrlUtil.convert(site.getExt())); - return site.trans().sync(); + return site.trans(); } catch (Exception e) { return new Site(); } @@ -296,15 +295,12 @@ public class Site implements Parcelable { public Site trans() { if (Trans.pass()) return this; - List categories = new ArrayList<>(); - for (String cate : getCategories()) categories.add(Trans.s2t(cate)); - setCategories(categories); + setName(Trans.s2t(getName())); + setCategories(getCategories().stream().map(Trans::s2t).toList()); return this; } - public Site sync() { - Site item = find(getKey()); - if (item == null) return this; + public Site sync(Site item) { if (getChangeable() != 0) setChangeable(Math.max(1, item.getChangeable())); if (getSearchable() != 0) setSearchable(Math.max(1, item.getSearchable())); return this; @@ -319,8 +315,8 @@ public class Site implements Parcelable { return BaseLoader.get().getSpider(getKey(), getApi(), getExt(), getJar()); } - public static Site find(String key) { - return AppDatabase.get().getSiteDao().find(key); + public static List findAll() { + return AppDatabase.get().getSiteDao().findAll(); } public void save() { @@ -334,6 +330,11 @@ public class Site implements Parcelable { return getKey().equals(it.getKey()); } + @Override + public int hashCode() { + return getKey().hashCode(); + } + @Override public int describeContents() { return 0; diff --git a/app/src/main/java/com/fongmi/android/tv/db/dao/SiteDao.java b/app/src/main/java/com/fongmi/android/tv/db/dao/SiteDao.java index c1dbb34d9..cc1569df8 100644 --- a/app/src/main/java/com/fongmi/android/tv/db/dao/SiteDao.java +++ b/app/src/main/java/com/fongmi/android/tv/db/dao/SiteDao.java @@ -12,7 +12,4 @@ public abstract class SiteDao extends BaseDao { @Query("SELECT * FROM Site") public abstract List findAll(); - - @Query("SELECT * FROM Site WHERE `key` = :key") - public abstract Site find(String key); }