Support site timeout

pull/137/head
FongMi 3 years ago
parent b5acfedab6
commit de0e6cd5f4
  1. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 20
      app/src/main/java/com/fongmi/android/tv/bean/Result.java
  3. 16
      app/src/main/java/com/fongmi/android/tv/bean/Site.java
  4. 8
      app/src/main/java/com/fongmi/android/tv/gson/ExtAdapter.java
  5. 8
      app/src/main/java/com/fongmi/android/tv/gson/FilterAdapter.java
  6. 19
      app/src/main/java/com/fongmi/android/tv/gson/UrlAdapter.java
  7. 2
      app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java
  8. 2
      app/src/mobile/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 -> {

@ -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<Vod> list;
@SerializedName("filters")
@JsonAdapter(FilterAdapter.class)
private LinkedHashMap<String, List<Filter>> 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();
}

@ -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);
}

@ -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<String> {
public static Gson gson() {
return new GsonBuilder().registerTypeAdapter(String.class, new StringAdapter()).create();
}
public class ExtAdapter implements JsonDeserializer<String> {
@Override
public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {

@ -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<LinkedHashMap<String, List<Filter>>> {
public static Gson gson() {
Type type = new TypeToken<LinkedHashMap<String, List<Filter>>>() {}.getType();
return new GsonBuilder().registerTypeAdapter(type, new FilterAdapter()).create();
}
@Override
public LinkedHashMap<String, List<Filter>> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
LinkedHashMap<String, List<Filter>> filterMap = new LinkedHashMap<>();

@ -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<String> {
@Override
public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
if (!json.isJsonArray()) return json.getAsString();
List<JsonElement> elements = json.getAsJsonArray().asList();
return elements.size() < 2 ? "" : elements.get(1).getAsString();
}
}

@ -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);

@ -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);
}

Loading…
Cancel
Save