WebView parse support header

pull/137/head
FongMi 3 years ago
parent da1a1f1960
commit 7395218de5
  1. 20
      app/src/main/java/com/fongmi/android/tv/bean/Parse.java
  2. 5
      app/src/main/java/com/fongmi/android/tv/bean/Result.java
  3. 14
      app/src/main/java/com/fongmi/android/tv/player/ParseTask.java
  4. 5
      app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.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<String, String> 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() {

@ -63,8 +63,7 @@ public class Result {
public static Result fromJson(String str) {
try {
Type type = new TypeToken<LinkedHashMap<String, List<Filter>>>() {
}.getType();
Type type = new TypeToken<LinkedHashMap<String, List<Filter>>>() {}.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;
}

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

@ -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<String, String> headers, ParseTask.Callback callback) {
this.callback = callback;
stopLoading();
loadUrl(url);
loadUrl(url, headers);
retry = 0;
}

Loading…
Cancel
Save