Update parse system - part 5

pull/123/head
FongMi 3 years ago
parent 8ddac062a3
commit 5dde8df0a6
  1. 9
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 14
      app/src/main/java/com/fongmi/android/tv/Constant.java
  3. 39
      app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java
  4. 17
      app/src/main/java/com/fongmi/android/tv/player/ParseTask.java
  5. 4
      app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java

@ -285,9 +285,8 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
mViewModel.search.observe(this, result -> setSearch(result.getList()));
mViewModel.player.observe(this, result -> {
boolean useParse = (result.getPlayUrl().isEmpty() && ApiConfig.get().getFlags().contains(result.getFlag())) || result.getJx() == 1;
mBinding.control.parseLayout.setVisibility(useParse ? View.VISIBLE : View.GONE);
startPlay(result, useParse);
resetFocus(useParse);
resetFocus();
});
mViewModel.result.observe(this, result -> {
if (result.getList().isEmpty()) setEmpty();
@ -296,7 +295,8 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
});
}
private void resetFocus(boolean useParse) {
private void resetFocus() {
boolean useParse = isVisible(mBinding.control.parseLayout);
findViewById(R.id.timeBar).setNextFocusUpId(useParse ? R.id.parse : R.id.next);
for (int i = 0; i < mBinding.control.actionLayout.getChildCount(); i++) {
mBinding.control.actionLayout.getChildAt(i).setNextFocusDownId(useParse ? R.id.parse : R.id.timeBar);
@ -331,6 +331,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private void startPlay(Result result, boolean useParse) {
if (result != null) {
mBinding.control.parseLayout.setVisibility(mParseAdapter.size() > 0 && useParse ? View.VISIBLE : View.GONE);
mPlayers.start(result, useParse);
setR3Callback();
} else {
@ -817,7 +818,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
}
private void checkError(ErrorEvent event) {
if (event.isParse() && mParseAdapter.size() > 0) checkParse();
if (event.isParse() && isVisible(mBinding.control.parseLayout)) checkParse();
else if (event.isAds()) onNext();
else checkFlag();
}

@ -8,12 +8,18 @@ public class Constant {
public static final int INTERVAL_HIDE = 5 * 1000;
//網路偵測間隔 0.5 秒
public static final int INTERVAL_TRAFFIC = 500;
//點播超時時間 30
public static final int TIMEOUT_VOD = 10 * 1000;
//點播超時時間 15
public static final int TIMEOUT_VOD = 15 * 1000;
//直播超時時間 10 秒
public static final int TIMEOUT_LIVE = 10 * 1000;
//解析超時時間 5 秒
public static final int TIMEOUT_PARSE = 5 * 1000;
//解析超時時間 30 秒
public static final int TIMEOUT_PARSE_WEB = 15 * 1000;
//解析超時時間 10 秒
public static final int TIMEOUT_PARSE_JSON = 10 * 1000;
//解析超時時間 15 秒
public static final int TIMEOUT_PARSE_JSON_EXT = 15 * 1000;
//解析超時時間 15 秒
public static final int TIMEOUT_PARSE_JSON_MIX = 15 * 1000;
//網路超時時間 30 秒
public static final int TIMEOUT_HTTP = 30 * 1000;
//代理超時時間 5 秒

@ -9,7 +9,6 @@ import com.fongmi.android.tv.bean.Parse;
import com.fongmi.android.tv.bean.Site;
import com.fongmi.android.tv.net.Callback;
import com.fongmi.android.tv.utils.Json;
import com.fongmi.android.tv.utils.Prefers;
import com.fongmi.android.tv.utils.Utils;
import com.github.catvod.crawler.Spider;
import com.github.catvod.crawler.SpiderNull;
@ -28,7 +27,6 @@ import java.util.Map;
public class ApiConfig {
private List<String> ads;
private List<String> flags;
private List<Parse> parses;
private List<Site> sites;
@ -36,9 +34,10 @@ public class ApiConfig {
private PyLoader pyLoader;
private JsLoader jsLoader;
private Config config;
private String wall;
private Parse parse;
private Site home;
private String wall;
private String ads;
private static class Loader {
static volatile ApiConfig INSTANCE = new ApiConfig();
@ -65,10 +64,10 @@ public class ApiConfig {
}
public ApiConfig init() {
this.ads = null;
this.home = null;
this.wall = null;
this.config = Config.vod();
this.ads = new ArrayList<>();
this.sites = new ArrayList<>();
this.flags = new ArrayList<>();
this.parses = new ArrayList<>();
@ -84,9 +83,9 @@ public class ApiConfig {
}
public ApiConfig clear() {
this.ads = null;
this.home = null;
this.wall = null;
this.ads.clear();
this.sites.clear();
this.flags.clear();
this.parses.clear();
@ -152,8 +151,8 @@ public class ApiConfig {
if (home == null) setHome(sites.isEmpty() ? new Site() : sites.get(0));
if (parse == null) setParse(parses.isEmpty() ? new Parse() : parses.get(0));
flags.addAll(Json.safeListString(object, "flags"));
ads.addAll(Json.safeListString(object, "ads"));
setWall(Json.safeString(object, "wallpaper"));
setAds(Json.safeListString(object, "ads"));
}
private void parseLive(JsonObject object) {
@ -227,22 +226,15 @@ public class ApiConfig {
}
public String getAds() {
return ads == null ? "" : ads.toString();
return ads;
}
public Config getConfig() {
return config == null ? Config.vod() : config;
private void setAds(List<String> ads) {
this.ads = TextUtils.join(",", ads);
}
public Parse getParse() {
return parse == null ? new Parse() : parse;
}
public void setParse(Parse parse) {
this.parse = parse;
this.parse.setActivated(true);
config.parse(parse.getName()).update();
for (Parse item : parses) item.setActivated(parse);
public Config getConfig() {
return config == null ? Config.vod() : config;
}
public String getWall() {
@ -264,4 +256,15 @@ public class ApiConfig {
config.home(home.getKey()).update();
for (Site item : getSites()) item.setActivated(home);
}
public Parse getParse() {
return parse == null ? new Parse() : parse;
}
public void setParse(Parse parse) {
this.parse = parse;
this.parse.setActivated(true);
config.parse(parse.getName()).update();
for (Parse item : parses) item.setActivated(parse);
}
}

@ -56,7 +56,7 @@ public class ParseTask {
private void execute(Result result) {
executor.execute(() -> {
try {
executor.submit(getTask(result)).get(Constant.TIMEOUT_PARSE, TimeUnit.MILLISECONDS);
executor.submit(getTask(result)).get(getTimeout(), TimeUnit.MILLISECONDS);
} catch (Throwable e) {
onParseError();
}
@ -73,6 +73,21 @@ public class ParseTask {
};
}
private int getTimeout() {
switch (parse.getType()) {
case 0: //嗅探
return Constant.TIMEOUT_PARSE_WEB;
case 1: //Json
return Constant.TIMEOUT_PARSE_JSON;
case 2: //Json 擴展
return Constant.TIMEOUT_PARSE_JSON_EXT;
case 3: //聚合
return Constant.TIMEOUT_PARSE_JSON_MIX;
default:
return Constant.TIMEOUT_VOD;
}
}
private void doInBackground(String key, String webUrl, String flag) throws Exception {
switch (parse.getType()) {
case 0: //嗅探

@ -34,7 +34,6 @@ public class CustomWebView extends WebView {
private WebResourceResponse empty;
private List<String> keys;
private String key;
private String ads;
public static CustomWebView create(@NonNull Context context) {
return new CustomWebView(context);
@ -47,7 +46,6 @@ public class CustomWebView extends WebView {
@SuppressLint("SetJavaScriptEnabled")
public void initSettings() {
this.ads = ApiConfig.get().getAds();
this.keys = Arrays.asList("user-agent", "referer", "origin");
this.empty = new WebResourceResponse("text/plain", "utf-8", new ByteArrayInputStream("".getBytes()));
getSettings().setUseWideViewPort(true);
@ -84,7 +82,7 @@ public class CustomWebView extends WebView {
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
String host = request.getUrl().getHost();
if (ads.contains(host)) return empty;
if (ApiConfig.get().getAds().contains(host)) return empty;
Map<String, String> headers = request.getRequestHeaders();
if (isVideoFormat(url, headers)) post(headers, url);
return super.shouldInterceptRequest(view, request);

Loading…
Cancel
Save