diff --git a/README.md b/README.md index a21e4a348..b9d8c33a8 100644 --- a/README.md +++ b/README.md @@ -146,13 +146,17 @@ scheme 支持 http, https, socks4, socks5 scheme://username:password@host:port ``` -配置 rules 新增 proxy 判斷 host 是否走代理 +配置新增 proxy 判斷域名是否走代理 +全局只需要加上一條規則 ".*." ```json { - "name": "proxy", - "hosts": [ - "api.nivodz.com" + "spider": "", + "proxy": [ + [ + "raw.githubusercontent.com", + "googlevideo.com" + ] ] } ``` diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java index e04d3704f..781995f59 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java @@ -200,6 +200,7 @@ public class LiveConfig { if (home == null) setHome(lives.isEmpty() ? new Live() : lives.get(0), true); setRules(Rule.arrayFrom(object.getAsJsonArray("rules"))); setHosts(Json.safeListString(object, "hosts")); + setProxy(Json.safeListString(object, "proxy")); setAds(Json.safeListString(object, "ads")); } @@ -264,8 +265,6 @@ public class LiveConfig { } public void setRules(List rules) { - for (Rule rule : rules) if ("proxy".equals(rule.getName())) OkHttp.selector().addAll(rule.getHosts()); - rules.remove(Rule.create("proxy")); this.rules = rules; } @@ -273,6 +272,10 @@ public class LiveConfig { OkHttp.dns().addAll(hosts); } + public void setProxy(List hosts) { + OkHttp.selector().addAll(hosts); + } + public List getAds() { return ads == null ? Collections.emptyList() : ads; } 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 6b0c5276f..84ab5c941 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 @@ -204,6 +204,7 @@ public class VodConfig { setDoh(Doh.arrayFrom(object.getAsJsonArray("doh"))); setFlags(Json.safeListString(object, "flags")); setHosts(Json.safeListString(object, "hosts")); + setProxy(Json.safeListString(object, "proxy")); setWall(Json.safeString(object, "wallpaper")); setAds(Json.safeListString(object, "ads")); } @@ -229,8 +230,6 @@ public class VodConfig { } public void setRules(List rules) { - for (Rule rule : rules) if ("proxy".equals(rule.getName())) OkHttp.selector().addAll(rule.getHosts()); - rules.remove(Rule.create("proxy")); this.rules = rules; } @@ -267,6 +266,10 @@ public class VodConfig { OkHttp.dns().addAll(hosts); } + public void setProxy(List hosts) { + OkHttp.selector().addAll(hosts); + } + public List getAds() { return ads == null ? Collections.emptyList() : ads; } 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 5554708a5..a0b4edbad 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 @@ -37,14 +37,6 @@ public class Sniffer { return SNIFFER.matcher(url).find(); } - public static Rule getRule(Uri uri) { - if (uri.getHost() == null) return Rule.empty(); - String hosts = TextUtils.join(",", Arrays.asList(UrlUtil.host(uri), UrlUtil.host(uri.getQueryParameter("url")))); - for (Rule rule : VodConfig.get().getRules()) for (String host : rule.getHosts()) if (Util.containOrMatch(hosts, host)) return rule; - for (Rule rule : LiveConfig.get().getRules()) for (String host : rule.getHosts()) if (Util.containOrMatch(hosts, host)) return rule; - return Rule.empty(); - } - public static List getRegex(Uri uri) { return getRule(uri).getRegex(); } @@ -52,4 +44,12 @@ public class Sniffer { public static List getScript(Uri uri) { return getRule(uri).getScript(); } + + private static Rule getRule(Uri uri) { + if (uri.getHost() == null) return Rule.empty(); + String hosts = TextUtils.join(",", Arrays.asList(UrlUtil.host(uri), UrlUtil.host(uri.getQueryParameter("url")))); + for (Rule rule : VodConfig.get().getRules()) for (String host : rule.getHosts()) if (Util.containOrMatch(hosts, host)) return rule; + for (Rule rule : LiveConfig.get().getRules()) for (String host : rule.getHosts()) if (Util.containOrMatch(hosts, host)) return rule; + return Rule.empty(); + } }