From 0fd4d67840eb333f4e8cc1146dd4815225a1bec8 Mon Sep 17 00:00:00 2001 From: FongMi Date: Thu, 16 May 2024 11:18:13 +0800 Subject: [PATCH] Optimize ads check --- .../com/fongmi/android/tv/api/config/VodConfig.java | 12 ++++++------ .../fongmi/android/tv/ui/custom/CustomWebView.java | 9 ++++++++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java index c23a18d60..dd74cf53a 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java @@ -41,6 +41,7 @@ public class VodConfig { private List sites; private List parses; private List flags; + private List ads; private JarLoader jarLoader; private PyLoader pyLoader; private JsLoader jsLoader; @@ -48,7 +49,6 @@ public class VodConfig { private Config config; private Parse parse; private String wall; - private String ads; private Site home; private static class Loader { @@ -84,11 +84,11 @@ public class VodConfig { } public VodConfig init() { - this.ads = null; this.wall = null; this.home = null; this.parse = null; this.config = Config.vod(); + this.ads = new ArrayList<>(); this.doh = new ArrayList<>(); this.rules = new ArrayList<>(); this.sites = new ArrayList<>(); @@ -107,10 +107,10 @@ public class VodConfig { } public VodConfig clear() { - this.ads = null; this.wall = null; this.home = null; this.parse = null; + this.ads.clear(); this.doh.clear(); this.rules.clear(); this.sites.clear(); @@ -326,12 +326,12 @@ public class VodConfig { this.flags.addAll(flags); } - public String getAds() { - return TextUtils.isEmpty(ads) ? "" : ads; + public List getAds() { + return ads == null ? Collections.emptyList() : ads; } private void setAds(List ads) { - this.ads = TextUtils.join(",", ads); + this.ads = ads; } public Config getConfig() { 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 e26f52621..c69b1b6bd 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 @@ -33,6 +33,7 @@ import java.io.ByteArrayInputStream; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; public class CustomWebView extends WebView implements DialogInterface.OnDismissListener { @@ -106,8 +107,8 @@ public class CustomWebView extends WebView implements DialogInterface.OnDismissL public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { String url = request.getUrl().toString(); String host = request.getUrl().getHost(); + if (TextUtils.isEmpty(host) || isAd(host)) return empty; Map headers = request.getRequestHeaders(); - if (TextUtils.isEmpty(host) || VodConfig.get().getAds().contains(host)) return empty; if (url.contains("challenges.cloudflare.com/turnstile")) App.post(() -> showDialog()); if (detect && url.contains("player/?url=")) onParseAdd(headers, url); else if (isVideoFormat(url)) onParseSuccess(headers, url); @@ -167,6 +168,12 @@ public class CustomWebView extends WebView implements DialogInterface.OnDismissL } } + private boolean isAd(String host) { + for (String ad : VodConfig.get().getAds()) if (host.contains(ad)) return true; + for (String ad : VodConfig.get().getAds()) if (Pattern.compile(ad).matcher(host).find()) return true; + return false; + } + private boolean isVideoFormat(String url) { try { Logger.t(TAG).d(url);