From 28146a74445f94d4178ec7491f84d14238305102 Mon Sep 17 00:00:00 2001 From: okjack Date: Sun, 11 Aug 2024 13:37:22 +0800 Subject: [PATCH] Optimize web parse --- app/src/main/assets/parse.html | 26 +++++++++++++++++ .../fongmi/android/tv/player/ParseJob.java | 15 ++++++---- .../com/fongmi/android/tv/server/Nano.java | 2 ++ .../android/tv/server/process/Parse.java | 29 +++++++++++++++++++ 4 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 app/src/main/assets/parse.html create mode 100644 app/src/main/java/com/fongmi/android/tv/server/process/Parse.java diff --git a/app/src/main/assets/parse.html b/app/src/main/assets/parse.html new file mode 100644 index 000000000..c73b0a8f8 --- /dev/null +++ b/app/src/main/assets/parse.html @@ -0,0 +1,26 @@ + + + + + + + 解析 + + + +
+ + + + \ No newline at end of file diff --git a/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java b/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java index d366acc0d..e63e815e1 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java +++ b/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java @@ -9,8 +9,10 @@ import com.fongmi.android.tv.api.loader.BaseLoader; import com.fongmi.android.tv.bean.Parse; import com.fongmi.android.tv.bean.Result; import com.fongmi.android.tv.impl.ParseCallback; +import com.fongmi.android.tv.server.Server; import com.fongmi.android.tv.ui.custom.CustomWebView; import com.fongmi.android.tv.utils.UrlUtil; +import com.fongmi.android.tv.utils.Util; import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Json; import com.google.common.net.HttpHeaders; @@ -133,11 +135,12 @@ public class ParseJob implements ParseCallback { private void godParse(String webUrl, String flag) throws Exception { List json = VodConfig.get().getParses(1, flag); List webs = VodConfig.get().getParses(0, flag); - CountDownLatch latch = new CountDownLatch(json.size()); + int count = json.size() + (webs.isEmpty() ? 0 : 1); + CountDownLatch latch = new CountDownLatch(count); for (Parse item : json) infinite.execute(() -> jsonParse(latch, item, webUrl)); + if (!webs.isEmpty()) startWeb(webs, webUrl); latch.await(); - if (webs.isEmpty()) onParseError(); - for (Parse item : webs) startWeb(item, webUrl); + onParseError(); } private void jsonParse(CountDownLatch latch, Parse item, String webUrl) { @@ -174,8 +177,10 @@ public class ParseJob implements ParseCallback { } } - private void startWeb(Parse item, String webUrl) { - startWeb("", item, webUrl); + private void startWeb(List items, String webUrl) { + StringBuilder sb = new StringBuilder(); + for (Parse item : items) sb.append(item.getUrl()).append(";"); + startWeb(new HashMap<>(), Server.get().getAddress("/parse?jxs=" + Util.substring(sb.toString()) + "&url=" + webUrl)); } private void startWeb(String key, Parse item, String webUrl) { 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 b120861de..558ba0fa2 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 @@ -6,6 +6,7 @@ import com.fongmi.android.tv.server.process.Action; import com.fongmi.android.tv.server.process.Cache; import com.fongmi.android.tv.server.process.Local; import com.fongmi.android.tv.server.process.Media; +import com.fongmi.android.tv.server.process.Parse; import com.fongmi.android.tv.server.process.Process; import com.fongmi.android.tv.server.process.Proxy; import com.github.catvod.utils.Asset; @@ -36,6 +37,7 @@ public class Nano extends NanoHTTPD { process.add(new Cache()); process.add(new Local()); process.add(new Media()); + process.add(new Parse()); process.add(new Proxy()); } diff --git a/app/src/main/java/com/fongmi/android/tv/server/process/Parse.java b/app/src/main/java/com/fongmi/android/tv/server/process/Parse.java new file mode 100644 index 000000000..b1b6d2680 --- /dev/null +++ b/app/src/main/java/com/fongmi/android/tv/server/process/Parse.java @@ -0,0 +1,29 @@ +package com.fongmi.android.tv.server.process; + +import com.fongmi.android.tv.server.Nano; +import com.github.catvod.utils.Asset; + +import java.util.Map; + +import fi.iki.elonen.NanoHTTPD; + +public class Parse implements Process { + + @Override + public boolean isRequest(NanoHTTPD.IHTTPSession session, String path) { + return "/parse".equals(path); + } + + @Override + public NanoHTTPD.Response doResponse(NanoHTTPD.IHTTPSession session, String path, Map files) { + try { + Map params = session.getParms(); + String jxs = params.get("jxs"); + String url = params.get("url"); + String html = String.format(Asset.read("parse.html"), jxs, url); + return NanoHTTPD.newFixedLengthResponse(NanoHTTPD.Response.Status.OK, NanoHTTPD.MIME_HTML, html); + } catch (Exception e) { + return Nano.error(e.getMessage()); + } + } +}