diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Parse.java b/app/src/main/java/com/fongmi/android/tv/bean/Parse.java index f7a206af9..7ff1e2604 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Parse.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Parse.java @@ -4,6 +4,7 @@ import android.text.TextUtils; import androidx.annotation.NonNull; +import com.fongmi.android.tv.utils.Json; import com.fongmi.android.tv.utils.Utils; import com.google.gson.Gson; import com.google.gson.JsonElement; @@ -11,6 +12,7 @@ import com.google.gson.annotations.SerializedName; import java.util.HashMap; import java.util.List; +import java.util.Map; public class Parse { @@ -42,6 +44,14 @@ public class Parse { return parse; } + public static Parse get(Integer type, String url, JsonElement header) { + Parse parse = new Parse(); + parse.setType(type); + parse.setUrl(url); + parse.getExt().setHeader(header); + return parse; + } + public String getName() { return TextUtils.isEmpty(name) ? "" : name; } @@ -67,7 +77,7 @@ public class Parse { } public Ext getExt() { - return ext == null ? new Ext() : ext; + return ext = ext == null ? new Ext() : ext; } public boolean isActivated() { @@ -82,8 +92,8 @@ public class Parse { this.activated = item.equals(this); } - public JsonElement getHeader() { - return getExt().getHeader(); + public Map getHeaders() { + return Json.toMap(getExt().getHeader()); } public String extUrl() { @@ -123,6 +133,10 @@ public class Parse { return header; } + public void setHeader(JsonElement header) { + this.header = header; + } + @NonNull @Override public String toString() { 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 1fc370c4d..65a5a9c4a 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 @@ -63,8 +63,7 @@ public class Result { public static Result fromJson(String str) { try { - Type type = new TypeToken>>() { - }.getType(); + Type type = new TypeToken>>() {}.getType(); Gson gson = new GsonBuilder().registerTypeAdapter(type, new FiltersAdapter()).create(); Result result = gson.fromJson(str, Result.class); return result == null ? empty() : result; @@ -117,7 +116,7 @@ public class Result { return filters == null ? new LinkedHashMap<>() : filters; } - private JsonElement getHeader() { + public JsonElement getHeader() { return header; } diff --git a/app/src/main/java/com/fongmi/android/tv/player/ParseTask.java b/app/src/main/java/com/fongmi/android/tv/player/ParseTask.java index 999470870..5122b4621 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/ParseTask.java +++ b/app/src/main/java/com/fongmi/android/tv/player/ParseTask.java @@ -10,7 +10,6 @@ import com.fongmi.android.tv.bean.Result; import com.fongmi.android.tv.net.OKHttp; import com.fongmi.android.tv.server.Server; import com.fongmi.android.tv.ui.custom.CustomWebView; -import com.fongmi.android.tv.utils.Json; import com.google.gson.JsonObject; import com.google.gson.JsonParser; @@ -43,16 +42,17 @@ public class ParseTask { } public ParseTask run(Result result, boolean useParse) { - setParse(result.getPlayUrl(), useParse); + setParse(result, useParse); executor.submit(() -> doInBackground(result.getUrl(), result.getFlag())); return this; } - private void setParse(String url, boolean useParse) { + private void setParse(Result result, boolean useParse) { + String url = result.getPlayUrl(); if (useParse) parse = ApiConfig.get().getParse(); else if (url.startsWith("json:")) parse = Parse.get(1, url.substring(5)); else if (url.startsWith("parse:")) parse = ApiConfig.get().getParse(url.substring(6)); - if (parse == null) parse = Parse.get(0, url); + if (parse == null) parse = Parse.get(0, url, result.getHeader()); } private void doInBackground(String webUrl, String flag) { @@ -62,7 +62,7 @@ public class ParseTask { } switch (parse.getType()) { case 0: //嗅探 - handler.post(() -> webView.start(parse.getUrl() + webUrl, callback)); + handler.post(() -> webView.start(parse.getUrl() + webUrl, parse.getHeaders(), callback)); break; case 1: //Json jsonParse(webUrl); @@ -78,7 +78,7 @@ public class ParseTask { private void jsonParse(String webUrl) { try { - Response response = OKHttp.newCall(parse.getUrl() + webUrl, Headers.of(Json.toMap(parse.getHeader()))).execute(); + Response response = OKHttp.newCall(parse.getUrl() + webUrl, Headers.of(parse.getHeaders())).execute(); JsonObject object = JsonParser.parseString(response.body().string()).getAsJsonObject(); HashMap headers = new HashMap<>(); for (String key : object.keySet()) if (key.equalsIgnoreCase("user-agent") || key.equalsIgnoreCase("referer")) headers.put(key, object.get(key).getAsString()); @@ -105,7 +105,7 @@ public class ParseTask { if (result.getUrl().isEmpty()) { onParseError(); } else if (result.getParse(0) == 1) { - handler.post(() -> webView.start(Server.proxy(result.getUrl()), callback)); + handler.post(() -> webView.start(Server.proxy(result.getUrl()), result.getHeaders(), callback)); } else { onParseSuccess(result.getHeaders(), result.getUrl(), result.getJxFrom()); } 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 a0e9dc984..652b681a4 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 @@ -55,10 +55,9 @@ public class CustomWebView extends WebView { setWebViewClient(webViewClient()); } - public void start(String url, ParseTask.Callback callback) { + public void start(String url, Map headers, ParseTask.Callback callback) { this.callback = callback; - stopLoading(); - loadUrl(url); + loadUrl(url, headers); retry = 0; }