diff --git a/app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java b/app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java index aa4e858d..60ef536a 100644 --- a/app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java +++ b/app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java @@ -384,13 +384,28 @@ public class ApiConfig { for(JsonElement oneHostRule : infoJson.getAsJsonArray("rules")) { JsonObject obj = (JsonObject) oneHostRule; String host = obj.get("host").getAsString(); - JsonArray ruleJsonArr = obj.getAsJsonArray("rule"); - ArrayList rule = new ArrayList<>(); - for(JsonElement one : ruleJsonArr) { - String oneRule = one.getAsString(); - rule.add(oneRule); + if (obj.has("rule")) { + JsonArray ruleJsonArr = obj.getAsJsonArray("rule"); + ArrayList rule = new ArrayList<>(); + for(JsonElement one : ruleJsonArr) { + String oneRule = one.getAsString(); + rule.add(oneRule); + } + if (rule.size() > 0) { + VideoParseRuler.addHostRule(host, rule); + } + } + if (obj.has("filter")) { + JsonArray filterJsonArr = obj.getAsJsonArray("filter"); + ArrayList filter = new ArrayList<>(); + for(JsonElement one : filterJsonArr) { + String oneFilter = one.getAsString(); + filter.add(oneFilter); + } + if (filter.size() > 0) { + VideoParseRuler.addHostFilter(host, filter); + } } - VideoParseRuler.addHostRule(host, rule); } } // 广告地址 diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java index 2196962a..55597fcc 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java @@ -1437,6 +1437,13 @@ public class PlayActivity extends BaseActivity { } return null; } + + boolean isFilter = VideoParseRuler.isFilter(webUrl, url); + if (isFilter) { + LOG.i( "shouldInterceptLoadRequest filter:" + url); + return null; + } + boolean ad; if (!loadedUrls.containsKey(url)) { ad = AdBlocker.isAd(url); @@ -1608,6 +1615,13 @@ public class PlayActivity extends BaseActivity { } return null; } + + boolean isFilter = VideoParseRuler.isFilter(webUrl, url); + if (isFilter) { + LOG.i( "shouldInterceptLoadRequest filter:" + url); + return null; + } + boolean ad; if (!loadedUrls.containsKey(url)) { ad = AdBlocker.isAd(url); diff --git a/app/src/main/java/com/github/tvbox/osc/ui/adapter/CheckboxSearchAdapter.java b/app/src/main/java/com/github/tvbox/osc/ui/adapter/CheckboxSearchAdapter.java index 489e8403..2c7d0e91 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/adapter/CheckboxSearchAdapter.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/adapter/CheckboxSearchAdapter.java @@ -47,6 +47,7 @@ public class CheckboxSearchAdapter extends ListAdapter> mCheckSourcesForApi = Hawk.get(HawkConfig.SOURCES_FOR_SEARCH, new HashMap>()); + if (mCheckSourcesForApi == null || mCheckSourcesForApi.isEmpty()) { + mCheckSourcesForApi = new HashMap>(); + } + if (mCheckSourcesForApi.get(api) == null) { + mCheckSourcesForApi.put(api, new HashMap<>()); + } + if (checked) { + mCheckSourcesForApi.get(api).put(siteKey, "1"); + } else { + if (mCheckSourcesForApi.get(api).containsKey(siteKey)) { + mCheckSourcesForApi.get(api).remove(siteKey); + } + } + Hawk.put(HawkConfig.SOURCES_FOR_SEARCH, mCheckSourcesForApi); + } + } diff --git a/app/src/main/java/com/github/tvbox/osc/util/VideoParseRuler.java b/app/src/main/java/com/github/tvbox/osc/util/VideoParseRuler.java index ba066c37..f664a0eb 100644 --- a/app/src/main/java/com/github/tvbox/osc/util/VideoParseRuler.java +++ b/app/src/main/java/com/github/tvbox/osc/util/VideoParseRuler.java @@ -8,6 +8,7 @@ import java.util.regex.Pattern; public class VideoParseRuler { private static final HashMap>> HOSTS_RULE = new HashMap<>(); + private static final HashMap>> HOSTS_FILTER = new HashMap<>(); public static void addHostRule(String host, ArrayList rule) { ArrayList> rules = new ArrayList<>(); @@ -25,6 +26,22 @@ public class VideoParseRuler { return null; } + public static void addHostFilter(String host, ArrayList rule) { + ArrayList> filters = new ArrayList<>(); + if (HOSTS_FILTER.get(host) != null && HOSTS_FILTER.get(host).size() > 0) { + filters = HOSTS_FILTER.get(host); + } + filters.add(rule); + HOSTS_FILTER.put(host, filters); + } + + public static ArrayList> getHostFilters(String host) { + if (HOSTS_FILTER.containsKey(host)) { + return HOSTS_FILTER.get(host); + } + return null; + } + public static boolean checkIsVideoForParse(String webUrl, String url) { try { boolean isVideo = DefaultConfig.isVideoFormat(url); @@ -57,7 +74,7 @@ public class VideoParseRuler { checkIsVideo = false; break; } - LOG.i("RULE:" + hostRules.get(i).get(j)); + LOG.i("VIDEO RULE:" + hostRules.get(i).get(j)); } } else { checkIsVideo = false; @@ -74,4 +91,53 @@ public class VideoParseRuler { return isVideo; } + public static boolean isFilter(String webUrl, String url) { + try { + boolean isFilter = false; + if (!HOSTS_FILTER.isEmpty() && webUrl != null) { + Uri uri = Uri.parse(webUrl); + if(getHostFilters(uri.getHost()) != null){ + isFilter = checkIsFilterForOneHostRules(uri.getHost(), url); + } + } + return isFilter; + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + private static boolean checkIsFilterForOneHostRules(String host, String url) { + boolean isFilter = false; + ArrayList> hostFilters = getHostFilters(host); + if (hostFilters != null && hostFilters.size() > 0) { + boolean isFilterRuleCheck = false; + for(int i=0; i 0) { + for(int j=0; j + android:text="全选" />