diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java
index f398ced68..4ee5cf4c0 100644
--- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java
+++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java
@@ -63,6 +63,7 @@ public class SettingCustomActivity extends BaseActivity {
mBinding.aggregatedSearchText.setText(getSwitch(Setting.isAggregatedSearch()));
mBinding.homeUIText.setText((homeUI = ResUtil.getStringArray(R.array.select_home_ui))[Setting.getHomeUI()]);
mBinding.homeHistoryText.setText(getSwitch(Setting.isHomeHistory()));
+ mBinding.removeAdText.setText(getSwitch(Setting.isRemoveAd()));
mBinding.languageText.setText((ResUtil.getStringArray(R.array.select_language))[Setting.getLanguage()]);
mBinding.parseWebviewText.setText((parseWebview = ResUtil.getStringArray(R.array.select_parse_webview))[Setting.getParseWebView()]);
mBinding.configCacheText.setText((configCache = ResUtil.getStringArray(R.array.select_config_cache))[Setting.getConfigCache()]);
@@ -85,6 +86,7 @@ public class SettingCustomActivity extends BaseActivity {
mBinding.homeUI.setOnClickListener(this::setHomeUI);
mBinding.homeButtons.setOnClickListener(this::onHomeButtons);
mBinding.homeHistory.setOnClickListener(this::setHomeHistory);
+ mBinding.removeAd.setOnClickListener(this::setRemoveAd);
mBinding.setLanguage.setOnClickListener(this::setLanguage);
mBinding.parseWebview.setOnClickListener(this::setParseWebview);
mBinding.configCache.setOnClickListener(this::setConfigCache);
@@ -184,6 +186,11 @@ public class SettingCustomActivity extends BaseActivity {
mBinding.homeHistoryText.setText(getSwitch(Setting.isHomeHistory()));
}
+ private void setRemoveAd(View view) {
+ Setting.putRemoveAd(!Setting.isRemoveAd());
+ mBinding.removeAdText.setText(getSwitch(Setting.isRemoveAd()));
+ }
+
private void setLanguage(View view) {
LanguageDialog.create(this).show();
}
diff --git a/app/src/leanback/res/layout/activity_setting_custom.xml b/app/src/leanback/res/layout/activity_setting_custom.xml
index abeed7b17..8953447d7 100644
--- a/app/src/leanback/res/layout/activity_setting_custom.xml
+++ b/app/src/leanback/res/layout/activity_setting_custom.xml
@@ -588,5 +588,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/fongmi/android/tv/Setting.java b/app/src/main/java/com/fongmi/android/tv/Setting.java
index 9ebdf683e..68d890cf7 100644
--- a/app/src/main/java/com/fongmi/android/tv/Setting.java
+++ b/app/src/main/java/com/fongmi/android/tv/Setting.java
@@ -8,8 +8,6 @@ import com.fongmi.android.tv.player.Players;
import com.fongmi.android.tv.utils.LanguageUtil;
import com.github.catvod.utils.Prefers;
-import java.util.Locale;
-
public class Setting {
public static String getDoh() {
@@ -496,5 +494,12 @@ public class Setting {
return Prefers.getInt("parse_webview", 0);
}
+ public static boolean isRemoveAd() {
+ return Prefers.getBoolean("remove_ad", false);
+ }
+
+ public static void putRemoveAd(boolean remove) {
+ Prefers.put("remove_ad", remove);
+ }
}
diff --git a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java
index 64a7dd461..8f72cf86b 100644
--- a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java
+++ b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java
@@ -44,13 +44,14 @@ import com.fongmi.android.tv.bean.Channel;
import com.fongmi.android.tv.bean.Drm;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.bean.Sub;
-import com.fongmi.android.tv.utils.Sniffer;
+import com.fongmi.android.tv.server.Server;
import com.fongmi.android.tv.utils.UrlUtil;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Path;
import com.github.catvod.utils.Util;
import com.google.common.net.HttpHeaders;
+import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -140,6 +141,7 @@ public class ExoUtil {
String mimeType = getMimeType(format, errorCode);
if (uri.getUserInfo() != null) headers.put(HttpHeaders.AUTHORIZATION, Util.basic(uri.getUserInfo()));
if (url.contains("***") && url.contains("|||")) return getConcat(headers, url, format, subs, sub, drm, errorCode);
+ if (url.contains(".m3u8") && Setting.isRemoveAd()) uri = Uri.parse(Server.get().getAddress().concat("/m3u8?url=").concat(URLEncoder.encode(url)));
return new DefaultMediaSourceFactory(getDataSourceFactory(headers), getExtractorsFactory()).createMediaSource(getMediaItem(uri, mimeType, subs, drm));
}
@@ -160,7 +162,6 @@ public class ExoUtil {
if (drm != null) builder.setDrmConfiguration(drm.get());
builder.setAllowChunklessPreparation(Players.isHard(Players.EXO));
if (mimeType != null) builder.setMimeType(mimeType);
- builder.setAds(Sniffer.getRegex(uri));
return builder.build();
}
diff --git a/app/src/main/java/com/fongmi/android/tv/player/IjkUtil.java b/app/src/main/java/com/fongmi/android/tv/player/IjkUtil.java
index 4461eb76a..439675734 100644
--- a/app/src/main/java/com/fongmi/android/tv/player/IjkUtil.java
+++ b/app/src/main/java/com/fongmi/android/tv/player/IjkUtil.java
@@ -2,10 +2,10 @@ package com.fongmi.android.tv.player;
import android.net.Uri;
+import com.fongmi.android.tv.Setting;
import com.fongmi.android.tv.bean.Channel;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.server.Server;
-import com.fongmi.android.tv.utils.Sniffer;
import com.fongmi.android.tv.utils.UrlUtil;
import java.net.URLEncoder;
@@ -25,8 +25,7 @@ public class IjkUtil {
public static MediaSource getSource(Map headers, String url) {
Uri uri = UrlUtil.uri(url);
- boolean m3u8Ad = Sniffer.getRegex(uri).size() > 0;
- if (m3u8Ad) uri = Uri.parse(Server.get().getAddress().concat("/m3u8?url=").concat(URLEncoder.encode(uri.toString())));
+ if (url.contains(".m3u8") && Setting.isRemoveAd()) uri = Uri.parse(Server.get().getAddress().concat("/m3u8?url=").concat(URLEncoder.encode(url)));
return new MediaSource(Players.checkUa(headers), uri);
}
}
diff --git a/app/src/main/java/com/fongmi/android/tv/utils/M3U8.java b/app/src/main/java/com/fongmi/android/tv/utils/M3U8.java
index f1b056469..613796579 100644
--- a/app/src/main/java/com/fongmi/android/tv/utils/M3U8.java
+++ b/app/src/main/java/com/fongmi/android/tv/utils/M3U8.java
@@ -1,6 +1,5 @@
package com.fongmi.android.tv.utils;
-import android.net.Uri;
import android.text.TextUtils;
import androidx.media3.common.util.UriUtil;
@@ -8,8 +7,6 @@ import androidx.media3.common.util.UriUtil;
import com.github.catvod.net.OkHttp;
import com.google.common.net.HttpHeaders;
-import java.math.BigDecimal;
-import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -18,14 +15,7 @@ import okhttp3.Headers;
import okhttp3.Response;
public class M3U8 {
-
- private static final String TAG_DISCONTINUITY = "#EXT-X-DISCONTINUITY";
- private static final String TAG_MEDIA_DURATION = "#EXTINF";
- private static final String TAG_ENDLIST = "#EXT-X-ENDLIST";
private static final String TAG_KEY = "#EXT-X-KEY";
-
- private static final Pattern REGEX_X_DISCONTINUITY = Pattern.compile("#EXT-X-DISCONTINUITY[\\s\\S]*?(?=#EXT-X-DISCONTINUITY|$)");
- private static final Pattern REGEX_MEDIA_DURATION = Pattern.compile(TAG_MEDIA_DURATION + ":([\\d\\.]+)\\b");
private static final Pattern REGEX_URI = Pattern.compile("URI=\"(.+?)\"");
public static String get(String url, Map headers) {
@@ -38,31 +28,13 @@ public class M3U8 {
if (matcher.find() && matcher.groupCount() > 1) return get(UriUtil.resolve(url, matcher.group(2)), headers);
StringBuilder sb = new StringBuilder();
for (String line : result.split("\n")) sb.append(shouldResolve(line) ? resolve(url, line) : line).append("\n");
- List ads = Sniffer.getRegex(Uri.parse(url));
- return clean(sb.toString(), ads);
+ return clean(sb.toString());
} catch (Throwable ignored) {
return "";
}
}
- private static String clean(String line, List ads) {
- boolean scan = false;
- for (String ad : ads) {
- if (ad.contains(TAG_DISCONTINUITY) || ad.contains(TAG_MEDIA_DURATION)) line = line.replaceAll(ad, "");
- else if (isDouble(ad)) scan = true;
- }
- return scan ? scan(line, ads) : line;
- }
-
- private static String scan(String line, List ads) {
- Matcher m1 = REGEX_X_DISCONTINUITY.matcher(line);
- while (m1.find()) {
- String group = m1.group();
- BigDecimal t = BigDecimal.ZERO;
- Matcher m2 = REGEX_MEDIA_DURATION.matcher(group);
- while (m2.find()) t = t.add(new BigDecimal(m2.group(1)));
- for (String ad : ads) if (t.toString().startsWith(ad)) line = line.replace(group.replace(TAG_ENDLIST, ""), "");
- }
+ private static String clean(String line) {
return line;
}
@@ -73,14 +45,6 @@ public class M3U8 {
return builder.build();
}
- private static boolean isDouble(String ad) {
- try {
- return Double.parseDouble(ad) > 0;
- } catch (Exception e) {
- return false;
- }
- }
-
private static boolean shouldResolve(String line) {
return (!line.startsWith("#") && !line.startsWith("http")) || line.startsWith(TAG_KEY);
}
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 1b7f7cb31..b1a16ced5 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -86,6 +86,7 @@
首页菜单键
首页源锁定
无痕模式
+ AI去广告
小窗返回键
首页显示站源
首页UI
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 4897a7e3f..5a1dd4df9 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -86,8 +86,9 @@
首頁選單鍵
首頁源鎖定
無痕模式
+ AI去廣告
小窗返回鍵
- 首頁显示站源
+ 首頁顯示站源
首頁UI
首頁按鈕
DoH
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5f71105a9..2e00bf8a0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -86,6 +86,7 @@
Home menu key
Home site lock
Incognito mode
+ Remove ads
Small window back key
Home display name
Home ui style
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java
index 2a6ec3a66..6beebcd39 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java
@@ -49,6 +49,7 @@ public class SettingCustomFragment extends BaseFragment {
mBinding.incognitoText.setText(getSwitch(Setting.isIncognito()));
mBinding.aggregatedSearchText.setText(getSwitch(Setting.isAggregatedSearch()));
mBinding.homeDisplayNameText.setText(getSwitch(Setting.isHomeDisplayName()));
+ mBinding.removeAdText.setText(getSwitch(Setting.isRemoveAd()));
mBinding.languageText.setText((lang = ResUtil.getStringArray(R.array.select_language))[Setting.getLanguage()]);
mBinding.configCacheText.setText((configCache = ResUtil.getStringArray(R.array.select_config_cache))[Setting.getConfigCache()]);
}
@@ -63,6 +64,7 @@ public class SettingCustomFragment extends BaseFragment {
mBinding.incognito.setOnClickListener(this::setIncognito);
mBinding.aggregatedSearch.setOnClickListener(this::setAggregatedSearch);
mBinding.homeDisplayName.setOnClickListener(this::setHomeDisplayName);
+ mBinding.removeAd.setOnClickListener(this::setRemoveAd);
mBinding.language.setOnClickListener(this::setLanguage);
mBinding.configCache.setOnClickListener(this::setConfigCache);
mBinding.reset.setOnClickListener(this::onReset);
@@ -122,6 +124,11 @@ public class SettingCustomFragment extends BaseFragment {
RefreshEvent.config();
}
+ private void setRemoveAd(View view) {
+ Setting.putRemoveAd(!Setting.isRemoveAd());
+ mBinding.removeAdText.setText(getSwitch(Setting.isRemoveAd()));
+ }
+
private void setLanguage(View view) {
new MaterialAlertDialogBuilder(getActivity()).setTitle(R.string.setting_language).setNegativeButton(R.string.dialog_negative, null).setSingleChoiceItems(lang, Setting.getLanguage(), (dialog, which) -> {
mBinding.languageText.setText(lang[which]);
diff --git a/app/src/mobile/res/layout/fragment_setting_custom.xml b/app/src/mobile/res/layout/fragment_setting_custom.xml
index 5c3d90d21..b7cb91fed 100644
--- a/app/src/mobile/res/layout/fragment_setting_custom.xml
+++ b/app/src/mobile/res/layout/fragment_setting_custom.xml
@@ -206,6 +206,33 @@
+
+
+
+
+
+
+
+