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 f4015ba27..bd85803d2 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
@@ -813,8 +813,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private void checkParse() {
int position = getParsePosition();
- if (position == mParseAdapter.size() - 1) initParse();
- if (position == 0 || position == mParseAdapter.size() - 1) checkFlag();
+ boolean last = position == mParseAdapter.size() - 1;
+ boolean pass = position < 2 || last;
+ if (last) initParse();
+ if (pass) checkFlag();
else nextParse(position);
}
diff --git a/app/src/main/assets/parse.html b/app/src/main/assets/parse.html
deleted file mode 100644
index 5550ce890..000000000
--- a/app/src/main/assets/parse.html
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
- 解析
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java b/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java
index c6f7ea5cb..5f3eb7ddc 100644
--- a/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java
+++ b/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java
@@ -158,10 +158,13 @@ public class ApiConfig {
Parse item = Parse.objectFrom(element);
if (!parses.contains(item)) parses.add(item);
}
+ if (parses.size() > 0) {
+ parses.add(0, Parse.mixWeb());
+ parses.add(0, Parse.mixJson());
+ }
}
private void initOther(JsonObject object) {
- if (parses.size() > 0) parses.add(0, Parse.mix());
if (home == null) setHome(sites.isEmpty() ? new Site() : sites.get(0));
if (parse == null) setParse(parses.isEmpty() ? new Parse() : parses.get(0));
setFlags(Json.safeListString(object, "flags"));
@@ -223,10 +226,16 @@ public class ApiConfig {
return parses == null ? Collections.emptyList() : parses;
}
+ public List getParses(int type) {
+ List items = new ArrayList<>();
+ for (Parse item : getParses()) if (item.getType() == type) items.add(item);
+ return items;
+ }
+
public List getParses(int type, String flag) {
List items = new ArrayList<>();
- for (Parse item : getParses()) if (item.getType() == type && item.getExt().getFlag().contains(flag)) items.add(item);
- if (items.isEmpty()) for (Parse item : getParses()) if (item.getType() == type) items.add(item);
+ for (Parse item : getParses(type)) if (item.getExt().getFlag().contains(flag)) items.add(item);
+ if (items.isEmpty()) items.addAll(getParses(type));
return items;
}
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 9aa03663e..9bef9ab35 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
@@ -52,9 +52,16 @@ public class Parse {
return parse;
}
- public static Parse mix() {
+ public static Parse mixJson() {
Parse parse = new Parse();
- parse.setName("超級解析");
+ parse.setName("Json聚合");
+ parse.setType(2);
+ return parse;
+ }
+
+ public static Parse mixWeb() {
+ Parse parse = new Parse();
+ parse.setName("Web聚合");
parse.setType(3);
return parse;
}
diff --git a/app/src/main/java/com/fongmi/android/tv/player/parse/ParseJob.java b/app/src/main/java/com/fongmi/android/tv/player/parse/ParseJob.java
index dd7faf4fa..80652b9d5 100644
--- a/app/src/main/java/com/fongmi/android/tv/player/parse/ParseJob.java
+++ b/app/src/main/java/com/fongmi/android/tv/player/parse/ParseJob.java
@@ -8,12 +8,12 @@ import com.fongmi.android.tv.api.ApiConfig;
import com.fongmi.android.tv.bean.Parse;
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;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -27,9 +27,9 @@ import okhttp3.Response;
public class ParseJob {
+ private final List webViews;
private ExecutorService executor;
private ExecutorService infinite;
- private CustomWebView webView;
private Callback callback;
private Parse parse;
@@ -40,6 +40,7 @@ public class ParseJob {
public ParseJob(Callback callback) {
this.executor = Executors.newFixedThreadPool(2);
this.infinite = Executors.newCachedThreadPool();
+ this.webViews = new ArrayList<>();
this.callback = callback;
}
@@ -79,15 +80,17 @@ public class ParseJob {
private void doInBackground(String key, String webUrl, String flag) throws Exception {
switch (parse.getType()) {
case 0: //嗅探
- App.post(() -> startWeb(key, parse.getUrl() + webUrl, parse.getHeaders(), callback));
+ App.post(() -> startWeb(key, parse, webUrl, callback));
break;
case 1: //Json
jsonParse(parse, webUrl, false);
break;
- case 3: //聚合
- mixWeb(webUrl, flag);
+ case 2: //Json聚合
mixJson(webUrl, flag);
break;
+ case 3: //Web聚合
+ mixWeb(webUrl, flag);
+ break;
}
}
@@ -108,10 +111,9 @@ public class ParseJob {
}
private void mixWeb(String webUrl, String flag) {
- StringBuilder sb = new StringBuilder();
List items = ApiConfig.get().getParses(0, flag);
- for (Parse item : items) sb.append(item.getUrl()).append(";");
- if (sb.length() > 0) App.post(() -> startWeb(Server.getParse(sb.toString(), webUrl), callback));
+ for (Parse item : items) App.post(() -> startWeb(item, webUrl, callback));
+ if (items.isEmpty()) onParseError();
}
private void jsonParse(CountDownLatch latch, Parse item, String webUrl) {
@@ -133,16 +135,12 @@ public class ParseJob {
if (code == 200) onParseSuccess(headers, url, item.getName());
}
- private void startWeb(String url, Callback callback) {
- startWeb(url, new HashMap<>(), callback);
+ private void startWeb(Parse item, String webUrl, Callback callback) {
+ startWeb("", item, webUrl, callback);
}
- private void startWeb(String url, Map headers, Callback callback) {
- startWeb("", url, headers, callback);
- }
-
- private void startWeb(String key, String url, Map headers, Callback callback) {
- webView = CustomWebView.create(App.get()).start(key, url, headers, callback);
+ private void startWeb(String key, Parse item, String webUrl, Callback callback) {
+ webViews.add(CustomWebView.create(App.get()).start(key, item.getUrl() + webUrl, item.getHeaders(), callback));
}
private HashMap getHeader(JsonObject object) {
@@ -165,14 +163,17 @@ public class ParseJob {
});
}
+ private void stopWeb() {
+ for (CustomWebView webView : webViews) webView.stop(false);
+ }
+
public void stop() {
if (executor != null) executor.shutdownNow();
if (infinite != null) infinite.shutdownNow();
- if (webView != null) webView.stop(false);
infinite = null;
executor = null;
callback = null;
- webView = null;
+ stopWeb();
}
public interface Callback {
diff --git a/app/src/main/java/com/fongmi/android/tv/server/Nano.java b/app/src/main/java/com/fongmi/android/tv/server/Nano.java
index 1313e9850..d2b3ef573 100644
--- a/app/src/main/java/com/fongmi/android/tv/server/Nano.java
+++ b/app/src/main/java/com/fongmi/android/tv/server/Nano.java
@@ -70,7 +70,6 @@ public class Nano extends NanoHTTPD {
switch (session.getMethod()) {
case GET:
if (url.startsWith("/file")) return doFile(url);
- else if (url.startsWith("/parse")) return doParse(session.getParms());
else if (url.startsWith("/proxy")) return doProxy(session.getParms());
break;
case POST:
@@ -106,17 +105,6 @@ public class Nano extends NanoHTTPD {
}
}
- private Response doParse(Map params) {
- try {
- String jxs = params.get("jxs");
- String url = params.get("url");
- String html = String.format(FileUtil.getAsset("parse.html"), jxs, url);
- return newFixedLengthResponse(Response.Status.OK, MIME_HTML, html);
- } catch (Exception e) {
- return newFixedLengthResponse(Response.Status.INTERNAL_ERROR, MIME_PLAINTEXT, "500");
- }
- }
-
private Response doProxy(Map params) {
try {
Object[] rs = ApiConfig.get().proxyLocal(params);
diff --git a/app/src/main/java/com/fongmi/android/tv/server/Server.java b/app/src/main/java/com/fongmi/android/tv/server/Server.java
index 37981a5a3..36f84efa5 100644
--- a/app/src/main/java/com/fongmi/android/tv/server/Server.java
+++ b/app/src/main/java/com/fongmi/android/tv/server/Server.java
@@ -6,7 +6,6 @@ import android.text.format.Formatter;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.event.ServerEvent;
-import com.fongmi.android.tv.utils.Utils;
import java.net.Inet4Address;
import java.net.InetAddress;
@@ -27,14 +26,6 @@ public class Server implements Nano.Listener {
return Loader.INSTANCE;
}
- public static String getParse(String jxs, String url) {
- return get().getAddress(true) + "/parse?jxs=" + Utils.substring(jxs) + "&url=" + url;
- }
-
- public static String getProxy() {
- return get().getAddress(true) + "/proxy?";
- }
-
public Server() {
this.port = 9978;
}
@@ -43,6 +34,10 @@ public class Server implements Nano.Listener {
return "http://" + (local ? "127.0.0.1" : getIP()) + ":" + port;
}
+ public String getAddress(String path) {
+ return getAddress(true) + "/" + path;
+ }
+
public void start() {
if (nano != null) return;
do {
diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Utils.java b/app/src/main/java/com/fongmi/android/tv/utils/Utils.java
index 8f39e8169..a0addbce2 100644
--- a/app/src/main/java/com/fongmi/android/tv/utils/Utils.java
+++ b/app/src/main/java/com/fongmi/android/tv/utils/Utils.java
@@ -84,7 +84,7 @@ public class Utils {
}
public static String checkProxy(String url) {
- if (url.startsWith("proxy://")) return url.replace("proxy://", Server.getProxy());
+ if (url.startsWith("proxy://")) return url.replace("proxy://", Server.get().getAddress("proxy?"));
return url;
}
@@ -95,7 +95,7 @@ public class Utils {
}
public static String convert(String text) {
- return text.startsWith("file") ? Server.get().getAddress(true) + "/" + text : text;
+ return text.startsWith("file") ? Server.get().getAddress(text) : text;
}
public static String convert(String baseUrl, String text) {