From 9314cc6857059fedbfa50e49b367b839b2dededa Mon Sep 17 00:00:00 2001 From: FongMi Date: Tue, 26 Dec 2023 11:41:09 +0800 Subject: [PATCH] Clean code --- .../java/com/fongmi/android/tv/bean/Site.java | 8 +++++- .../android/tv/model/SiteViewModel.java | 1 + .../android/tv/ui/custom/CustomWebView.java | 25 ++++++++++++++++--- .../com/fongmi/android/tv/utils/Sniffer.java | 4 --- 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Site.java b/app/src/main/java/com/fongmi/android/tv/bean/Site.java index 657faced9..4536ff23e 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Site.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Site.java @@ -22,7 +22,7 @@ import java.util.List; import okhttp3.Headers; -@Entity(ignoredColumns = {"api", "ext", "jar", "playUrl", "type", "timeout", "playerType", "categories", "header", "style", "activated"}) +@Entity(ignoredColumns = {"api", "ext", "jar", "click", "playUrl", "type", "timeout", "playerType", "categories", "header", "style", "activated"}) public class Site implements Parcelable { @NonNull @@ -38,6 +38,8 @@ public class Site implements Parcelable { private String ext; @SerializedName("jar") private String jar; + @SerializedName("click") + private String click; @SerializedName("playUrl") private String playUrl; @SerializedName("type") @@ -121,6 +123,10 @@ public class Site implements Parcelable { return TextUtils.isEmpty(jar) ? "" : jar; } + public String getClick() { + return TextUtils.isEmpty(click) ? "" : click; + } + public String getPlayUrl() { return TextUtils.isEmpty(playUrl) ? "" : playUrl; } diff --git a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java index eed68f361..722defdae 100644 --- a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java +++ b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java @@ -190,6 +190,7 @@ public class SiteViewModel extends ViewModel { result.setHeader(site.getHeader()); result.setPlayUrl(site.getPlayUrl()); result.setParse(Sniffer.isVideoFormat(url.v()) && result.getPlayUrl().isEmpty() ? 0 : 1); + SpiderDebug.log(result.toString()); return result; } }); 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 468f2e9d5..9d79ad8b0 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 @@ -27,13 +27,18 @@ import com.fongmi.android.tv.impl.ParseCallback; import com.fongmi.android.tv.utils.Sniffer; import com.github.catvod.crawler.Spider; import com.google.common.net.HttpHeaders; +import com.orhanobut.logger.Logger; import java.io.ByteArrayInputStream; +import java.util.ArrayList; import java.util.List; import java.util.Map; public class CustomWebView extends WebView { + private static final String TAG = CustomWebView.class.getSimpleName(); + private static final String BLANK = "about:blank"; + private WebResourceResponse empty; private ParseCallback callback; private AlertDialog dialog; @@ -110,7 +115,8 @@ public class CustomWebView extends WebView { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); - evaluate(Sniffer.getScript(Uri.parse(url))); + if (url.equals(BLANK)) return; + evaluate(getScript(url)); } @Override @@ -137,12 +143,25 @@ public class CustomWebView extends WebView { dialog = null; } + private List getScript(String url) { + List script = new ArrayList<>(Sniffer.getScript(Uri.parse(url))); + String click = ApiConfig.get().getSite(key).getClick(); + if (click.length() > 0) script.add(0, click); + return script; + } + private void evaluate(List script) { - if (script.size() > 0) evaluateJavascript(script.get(0), value -> evaluate(script.subList(1, script.size()))); + if (script.isEmpty()) return; + if (TextUtils.isEmpty(script.get(0))) { + evaluate(script.subList(1, script.size())); + } else { + evaluateJavascript(script.get(0), value -> evaluate(script.subList(1, script.size()))); + } } private boolean isVideoFormat(Map headers, String url) { try { + Logger.t(TAG).d(url); Site site = ApiConfig.get().getSite(key); Spider spider = ApiConfig.get().getSpider(site); if (spider.manualVideoCheck()) return spider.isVideoFormat(url); @@ -176,7 +195,7 @@ public class CustomWebView extends WebView { public void stop(boolean error) { hideDialog(); stopLoading(); - loadUrl("about:blank"); + loadUrl(BLANK); App.removeCallbacks(timer); if (error) onParseError(); else callback = null; diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Sniffer.java b/app/src/main/java/com/fongmi/android/tv/utils/Sniffer.java index 8f67d149d..83a1a6856 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Sniffer.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Sniffer.java @@ -7,7 +7,6 @@ import com.fongmi.android.tv.api.ApiConfig; import com.fongmi.android.tv.bean.Rule; import com.github.catvod.utils.Json; import com.github.catvod.utils.Util; -import com.orhanobut.logger.Logger; import java.util.Arrays; import java.util.Collections; @@ -19,8 +18,6 @@ import java.util.regex.Pattern; public class Sniffer { - private static final String TAG = Sniffer.class.getSimpleName(); - public static final Pattern CLICKER = Pattern.compile("\\[a=cr:(\\{.*?\\})\\/](.*?)\\[\\/a]"); public static final Pattern AI_PUSH = Pattern.compile("(http|https|rtmp|rtsp|smb|thunder|magnet|ed2k|mitv|tvbox-xg|jianpian|video):[^\\s]+", Pattern.MULTILINE); public static final Pattern SNIFFER = Pattern.compile("http((?!http).){12,}?\\.(m3u8|mp4|mkv|flv|mp3|m4a|aac)\\?.*|http((?!http).){12,}\\.(m3u8|mp4|mkv|flv|mp3|m4a|aac)|http((?!http).)*?video/tos*"); @@ -47,7 +44,6 @@ public class Sniffer { } public static boolean isVideoFormat(String url, Map headers) { - Logger.t(TAG).d(url); if (containOrMatch(url)) return true; if (headers.containsKey("Accept") && headers.get("Accept").startsWith("image")) return false; if (url.contains("url=http") || url.contains("v=http") || url.contains(".css") || url.contains(".html")) return false;