From de0e6cd5f4e773889537a20378fabe8eed4212f6 Mon Sep 17 00:00:00 2001 From: FongMi Date: Thu, 17 Aug 2023 18:49:56 +0800 Subject: [PATCH] Support site timeout --- .../tv/ui/activity/DetailActivity.java | 2 +- .../com/fongmi/android/tv/bean/Result.java | 20 +++++++++++-------- .../java/com/fongmi/android/tv/bean/Site.java | 16 ++++++++++++--- .../{StringAdapter.java => ExtAdapter.java} | 8 +------- .../fongmi/android/tv/gson/FilterAdapter.java | 8 -------- .../fongmi/android/tv/gson/UrlAdapter.java | 19 ++++++++++++++++++ .../android/tv/model/SiteViewModel.java | 2 +- .../tv/ui/activity/DetailActivity.java | 2 +- 8 files changed, 48 insertions(+), 29 deletions(-) rename app/src/main/java/com/fongmi/android/tv/gson/{StringAdapter.java => ExtAdapter.java} (68%) create mode 100644 app/src/main/java/com/fongmi/android/tv/gson/UrlAdapter.java diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index c7ee667c6..f7465a876 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -361,7 +361,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mViewModel.player.observe(this, result -> { setUseParse(ApiConfig.hasParse() && ((result.getPlayUrl().isEmpty() && ApiConfig.get().getFlags().contains(result.getFlag())) || result.getJx() == 1)); mBinding.control.parse.setVisibility(isUseParse() ? View.VISIBLE : View.GONE); - int timeout = getSite().isChangeable() ? Constant.TIMEOUT_PLAY : -1; + int timeout = getSite().isChangeable() ? getSite().getTimeout() : -1; mPlayers.start(result, isUseParse(), timeout); }); mViewModel.result.observe(this, result -> { 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 6bbc2bbfe..8c2d38d82 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 @@ -5,10 +5,12 @@ import android.text.TextUtils; import androidx.annotation.NonNull; import com.fongmi.android.tv.gson.FilterAdapter; -import com.github.catvod.utils.Trans; +import com.fongmi.android.tv.gson.UrlAdapter; import com.github.catvod.utils.Json; +import com.github.catvod.utils.Trans; import com.google.gson.Gson; import com.google.gson.JsonElement; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; import org.json.JSONObject; @@ -37,6 +39,7 @@ public class Result { private List list; @SerializedName("filters") + @JsonAdapter(FilterAdapter.class) private LinkedHashMap> filters; @SerializedName("header") @@ -54,6 +57,7 @@ public class Result { @SerializedName("format") private String format; @SerializedName("url") + @JsonAdapter(UrlAdapter.class) private String url; @SerializedName("key") private String key; @@ -64,26 +68,26 @@ public class Result { @SerializedName("msg") private String msg; - public static Result fromJson(String str) { + public static Result objectFrom(String str) { try { - Result result = FilterAdapter.gson().fromJson(str, Result.class); - return result == null ? empty() : result.trans(); + return new Gson().fromJson(str, Result.class); } catch (Exception e) { return empty(); } } - public static Result fromXml(String str) { + public static Result fromJson(String str) { try { - return new Persister().read(Result.class, str).trans(); + Result result = objectFrom(str); + return result == null ? empty() : result.trans(); } catch (Exception e) { return empty(); } } - public static Result objectFrom(String str) { + public static Result fromXml(String str) { try { - return new Gson().fromJson(str, Result.class); + return new Persister().read(Result.class, str).trans(); } catch (Exception e) { return empty(); } 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 e14250e3c..9d8b51730 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 @@ -6,15 +6,18 @@ import androidx.annotation.NonNull; import androidx.room.Entity; import androidx.room.PrimaryKey; +import com.fongmi.android.tv.Constant; import com.fongmi.android.tv.db.AppDatabase; -import com.fongmi.android.tv.gson.StringAdapter; +import com.fongmi.android.tv.gson.ExtAdapter; +import com.google.gson.Gson; import com.google.gson.JsonElement; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; import java.util.Collections; import java.util.List; -@Entity(ignoredColumns = {"type", "api", "playUrl", "playerType", "ext", "jar", "style", "categories"}) +@Entity(ignoredColumns = {"type", "api", "playUrl", "timeout", "playerType", "ext", "jar", "style", "categories"}) public class Site { @NonNull @@ -29,6 +32,8 @@ public class Site { private String api; @SerializedName("playUrl") private String playUrl; + @SerializedName("timeout") + private Integer timeout; @SerializedName("playerType") private Integer playerType; @SerializedName("searchable") @@ -39,6 +44,7 @@ public class Site { private Integer changeable; @SerializedName("recordable") private Integer recordable; + @JsonAdapter(ExtAdapter.class) @SerializedName("ext") private String ext; @SerializedName("jar") @@ -52,7 +58,7 @@ public class Site { public static Site objectFrom(JsonElement element) { try { - return StringAdapter.gson().fromJson(element, Site.class); + return new Gson().fromJson(element, Site.class); } catch (Exception e) { return new Site(); } @@ -107,6 +113,10 @@ public class Site { return TextUtils.isEmpty(playUrl) ? "" : playUrl; } + public Integer getTimeout() { + return timeout == null ? Constant.TIMEOUT_PLAY : timeout; + } + public int getPlayerType() { return playerType == null ? -1 : Math.min(playerType, 2); } diff --git a/app/src/main/java/com/fongmi/android/tv/gson/StringAdapter.java b/app/src/main/java/com/fongmi/android/tv/gson/ExtAdapter.java similarity index 68% rename from app/src/main/java/com/fongmi/android/tv/gson/StringAdapter.java rename to app/src/main/java/com/fongmi/android/tv/gson/ExtAdapter.java index 68190f01c..2536dce29 100644 --- a/app/src/main/java/com/fongmi/android/tv/gson/StringAdapter.java +++ b/app/src/main/java/com/fongmi/android/tv/gson/ExtAdapter.java @@ -1,7 +1,5 @@ package com.fongmi.android.tv.gson; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; @@ -9,11 +7,7 @@ import com.google.gson.JsonParseException; import java.lang.reflect.Type; -public class StringAdapter implements JsonDeserializer { - - public static Gson gson() { - return new GsonBuilder().registerTypeAdapter(String.class, new StringAdapter()).create(); - } +public class ExtAdapter implements JsonDeserializer { @Override public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { diff --git a/app/src/main/java/com/fongmi/android/tv/gson/FilterAdapter.java b/app/src/main/java/com/fongmi/android/tv/gson/FilterAdapter.java index 18eb7c60c..2fcd77872 100644 --- a/app/src/main/java/com/fongmi/android/tv/gson/FilterAdapter.java +++ b/app/src/main/java/com/fongmi/android/tv/gson/FilterAdapter.java @@ -1,14 +1,11 @@ package com.fongmi.android.tv.gson; import com.fongmi.android.tv.bean.Filter; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; -import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.ArrayList; @@ -17,11 +14,6 @@ import java.util.List; public class FilterAdapter implements JsonDeserializer>> { - public static Gson gson() { - Type type = new TypeToken>>() {}.getType(); - return new GsonBuilder().registerTypeAdapter(type, new FilterAdapter()).create(); - } - @Override public LinkedHashMap> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { LinkedHashMap> filterMap = new LinkedHashMap<>(); diff --git a/app/src/main/java/com/fongmi/android/tv/gson/UrlAdapter.java b/app/src/main/java/com/fongmi/android/tv/gson/UrlAdapter.java new file mode 100644 index 000000000..875c87ee1 --- /dev/null +++ b/app/src/main/java/com/fongmi/android/tv/gson/UrlAdapter.java @@ -0,0 +1,19 @@ +package com.fongmi.android.tv.gson; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; + +import java.lang.reflect.Type; +import java.util.List; + +public class UrlAdapter implements JsonDeserializer { + + @Override + public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + if (!json.isJsonArray()) return json.getAsString(); + List elements = json.getAsJsonArray().asList(); + return elements.size() < 2 ? "" : elements.get(1).getAsString(); + } +} 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 dc7f5ef17..9b102e3be 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 @@ -153,7 +153,7 @@ public class SiteViewModel extends ViewModel { String playerContent = spider.playerContent(flag, id, ApiConfig.get().getFlags()); SpiderDebug.log(playerContent); ApiConfig.get().setRecent(site); - Result result = Result.objectFrom(playerContent); + Result result = Result.fromJson(playerContent); if (result.getFlag().isEmpty()) result.setFlag(flag); result.setUrl(Source.get().fetch(result.getUrl())); result.setKey(key); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index a95d37ce1..cb7a58e65 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -457,7 +457,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust setUseParse(ApiConfig.hasParse() && ((result.getPlayUrl().isEmpty() && ApiConfig.get().getFlags().contains(result.getFlag())) || result.getJx() == 1)); if (mControlDialog != null && mControlDialog.isVisible()) mControlDialog.setParseVisible(isUseParse()); mBinding.control.parse.setVisibility(isFullscreen() && isUseParse() ? View.VISIBLE : View.GONE); - int timeout = getSite().isChangeable() ? Constant.TIMEOUT_PLAY : -1; + int timeout = getSite().isChangeable() ? getSite().getTimeout() : -1; mPlayers.start(result, isUseParse(), timeout); mBinding.swipeLayout.setRefreshing(false); }