Live support ads and rules

pull/551/head
okjack 2 years ago
parent 053fa6d502
commit 415cbafebf
  1. 1
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java
  2. 65
      app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java
  3. 8
      app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java
  4. 3
      app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java
  5. 2
      app/src/main/java/com/fongmi/android/tv/utils/Sniffer.java
  6. 1
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java
  7. 17
      catvod/src/main/java/com/github/catvod/net/OkProxySelector.java

@ -312,6 +312,7 @@ public class SettingActivity extends BaseActivity implements BackupCallback, Con
public void setProxy(String proxy) {
Source.get().stop();
Setting.putProxy(proxy);
OkHttp.selector().clear();
OkHttp.get().setProxy(proxy);
Notify.progress(getActivity());
VodConfig.load(Config.vod(), getCallback());

@ -13,20 +13,25 @@ import com.fongmi.android.tv.bean.Depot;
import com.fongmi.android.tv.bean.Group;
import com.fongmi.android.tv.bean.Keep;
import com.fongmi.android.tv.bean.Live;
import com.fongmi.android.tv.bean.Rule;
import com.fongmi.android.tv.db.AppDatabase;
import com.fongmi.android.tv.impl.Callback;
import com.fongmi.android.tv.ui.activity.LiveActivity;
import com.fongmi.android.tv.utils.Notify;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Json;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class LiveConfig {
private List<Live> lives;
private List<Rule> rules;
private List<String> ads;
private Config config;
private boolean sync;
private Live home;
@ -73,6 +78,9 @@ public class LiveConfig {
public LiveConfig init() {
this.home = null;
this.ads = new ArrayList<>();
this.rules = new ArrayList<>();
this.lives = new ArrayList<>();
return config(Config.live());
}
@ -84,8 +92,10 @@ public class LiveConfig {
}
public LiveConfig clear() {
getLives().clear();
this.home = null;
this.ads.clear();
this.rules.clear();
this.lives.clear();
return this;
}
@ -118,8 +128,7 @@ public class LiveConfig {
private void parseText(String text, Callback callback) {
Live live = new Live(config.getUrl()).sync();
LiveParser.text(live, text);
getLives().remove(live);
getLives().add(live);
lives.add(live);
setHome(live, true);
App.post(callback::success);
}
@ -144,15 +153,33 @@ public class LiveConfig {
}
private void parseConfig(JsonObject object, Callback callback) {
List<JsonElement> lives = Json.safeListElement(object, "lives");
if (lives.size() > 0) for (JsonElement element : lives) add(Live.objectFrom(element).check());
for (Live live : getLives()) if (live.getName().equals(config.getHome())) setHome(live, true);
if (home == null) setHome(getLives().isEmpty() ? new Live() : getLives().get(0), true);
if (callback != null) App.post(callback::success);
try {
initLive(object);
initOther(object);
} catch (Throwable e) {
e.printStackTrace();
} finally {
if (callback != null) App.post(callback::success);
}
}
private void initLive(JsonObject object) {
for (JsonElement element : Json.safeListElement(object, "lives")) {
Live live = Live.objectFrom(element);
if (lives.contains(live)) continue;
lives.add(live.sync());
}
for (Live live : lives) {
if (live.getName().equals(config.getHome())) {
setHome(live, true);
}
}
}
private void add(Live live) {
if (!getLives().contains(live)) getLives().add(live.sync());
private void initOther(JsonObject object) {
if (home == null) setHome(lives.isEmpty() ? new Live() : lives.get(0), true);
setRules(Rule.arrayFrom(object.getAsJsonArray("rules")));
setAds(Json.safeListString(object, "ads"));
}
private void bootLive() {
@ -208,6 +235,24 @@ public class LiveConfig {
return sync || TextUtils.isEmpty(config.getUrl()) || url.equals(config.getUrl());
}
public List<Rule> getRules() {
return rules == null ? Collections.emptyList() : rules;
}
public void setRules(List<Rule> rules) {
for (Rule rule : rules) if ("proxy".equals(rule.getName())) OkHttp.selector().addAll(rule.getHosts());
rules.remove(Rule.create("proxy"));
this.rules = rules;
}
public List<String> getAds() {
return ads == null ? Collections.emptyList() : ads;
}
private void setAds(List<String> ads) {
this.ads = ads;
}
public List<Live> getLives() {
return lives == null ? lives = new ArrayList<>() : lives;
}

@ -75,8 +75,12 @@ public class VodConfig {
return get().getSites().indexOf(get().getHome());
}
public static boolean hasUrl() {
return getUrl() != null && getUrl().length() > 0;
}
public static boolean hasParse() {
return get().getParses().size() > 0;
return !get().getParses().isEmpty();
}
public static void load(Config config, Callback callback) {
@ -302,7 +306,7 @@ public class VodConfig {
}
public void setRules(List<Rule> rules) {
for (Rule rule : rules) if ("proxy".equals(rule.getName())) OkHttp.selector().setHosts(rule.getHosts());
for (Rule rule : rules) if ("proxy".equals(rule.getName())) OkHttp.selector().addAll(rule.getHosts());
rules.remove(Rule.create("proxy"));
this.rules = rules;
}

@ -26,6 +26,7 @@ import com.fongmi.android.tv.App;
import com.fongmi.android.tv.Constant;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.Setting;
import com.fongmi.android.tv.api.config.LiveConfig;
import com.fongmi.android.tv.api.config.VodConfig;
import com.fongmi.android.tv.bean.Site;
import com.fongmi.android.tv.impl.ParseCallback;
@ -201,7 +202,9 @@ 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 : LiveConfig.get().getAds()) if (host.contains(ad)) return true;
for (String ad : VodConfig.get().getAds()) if (Pattern.compile(ad).matcher(host).find()) return true;
for (String ad : LiveConfig.get().getAds()) if (Pattern.compile(ad).matcher(host).find()) return true;
return false;
}

@ -3,6 +3,7 @@ package com.fongmi.android.tv.utils;
import android.net.Uri;
import android.text.TextUtils;
import com.fongmi.android.tv.api.config.LiveConfig;
import com.fongmi.android.tv.api.config.VodConfig;
import com.fongmi.android.tv.bean.Rule;
import com.github.catvod.utils.Json;
@ -40,6 +41,7 @@ public class Sniffer {
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();
}

@ -323,6 +323,7 @@ public class SettingFragment extends BaseFragment implements BackupCallback, Con
public void setProxy(String proxy) {
Source.get().stop();
Setting.putProxy(proxy);
OkHttp.selector().clear();
OkHttp.get().setProxy(proxy);
Notify.progress(getActivity());
VodConfig.load(Config.vod(), getCallback());

@ -12,16 +12,25 @@ import java.net.Proxy;
import java.net.ProxySelector;
import java.net.SocketAddress;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class OkProxySelector extends ProxySelector {
private List<String> hosts;
private final List<String> hosts;
private Proxy proxy;
public void setHosts(List<String> hosts) {
this.hosts = hosts;
public OkProxySelector() {
this.hosts = new ArrayList<>();
}
public void addAll(List<String> hosts) {
this.hosts.addAll(hosts);
}
public void clear() {
this.hosts.clear();
}
public void setProxy(String proxy) {
@ -30,7 +39,7 @@ public class OkProxySelector extends ProxySelector {
@Override
public List<Proxy> select(URI uri) {
if (proxy == null || hosts == null || hosts.isEmpty() || uri.getHost() == null || "127.0.0.1".equals(uri.getHost())) return Collections.singletonList(Proxy.NO_PROXY);
if (proxy == null || hosts.isEmpty() || uri.getHost() == null || "127.0.0.1".equals(uri.getHost())) return Collections.singletonList(Proxy.NO_PROXY);
for (String host : hosts) if (Util.containOrMatch(uri.getHost(), host)) return Collections.singletonList(proxy);
return Collections.singletonList(Proxy.NO_PROXY);
}

Loading…
Cancel
Save