feat(Twitch - Block embedded ads): Switch from ttv.lol to luminous.dev

This commit is contained in:
oSumAtrIX 2023-09-14 21:27:33 +02:00
parent 4a242c7a91
commit 2c3418041c
No known key found for this signature in database
GPG Key ID: A9B3094ACDB604B4
4 changed files with 60 additions and 87 deletions

View File

@ -0,0 +1,46 @@
package app.revanced.twitch.adblock;
import app.revanced.twitch.utils.LogHelper;
import app.revanced.twitch.utils.ReVancedUtils;
import okhttp3.HttpUrl;
import okhttp3.Request;
public class LuminousService implements IAdblockService {
@Override
public String friendlyName() {
return ReVancedUtils.getString("revanced_proxy_luminous");
}
@Override
public Integer maxAttempts() {
return 2;
}
@Override
public Boolean isAvailable() {
return true;
}
@Override
public Request rewriteHlsRequest(Request originalRequest) {
var type = IAdblockService.isVod(originalRequest) ? "vod" : "playlist";
var url = HttpUrl.parse("https://eu.luminous.dev/" +
type +
"/" +
IAdblockService.channelName(originalRequest) +
".m3u8" +
"%3Fallow_source%3Dtrue%26allow_audio_only%3Dtrue%26fast_bread%3Dtrue"
);
if (url == null) {
LogHelper.error("Failed to parse rewritten URL");
return null;
}
// Overwrite old request
return new Request.Builder()
.get()
.url(url)
.build();
}
}

View File

@ -1,70 +0,0 @@
package app.revanced.twitch.adblock;
import java.util.ArrayList;
import java.util.Random;
import app.revanced.twitch.utils.LogHelper;
import app.revanced.twitch.utils.ReVancedUtils;
import okhttp3.HttpUrl;
import okhttp3.Request;
public class TTVLolService implements IAdblockService {
@Override
public String friendlyName() {
return ReVancedUtils.getString("revanced_proxy_ttv_lol");
}
// TTV.lol is sometimes unstable
@Override
public Integer maxAttempts() {
return 4;
}
@Override
public Boolean isAvailable() {
return true;
}
@Override
public Request rewriteHlsRequest(Request originalRequest) {
var type = "vod";
if (!IAdblockService.isVod(originalRequest))
type = "playlist";
var url = HttpUrl.parse("https://api.ttv.lol/" +
type + "/" +
IAdblockService.channelName(originalRequest) +
".m3u8" + nextQuery()
);
if (url == null) {
LogHelper.error("Failed to parse rewritten URL");
return null;
}
// Overwrite old request
return new Request.Builder()
.get()
.url(url)
.addHeader("X-Donate-To", "https://ttv.lol/donate")
.build();
}
private String nextQuery() {
return SAMPLE_QUERY.replace("<SESSION>", generateSessionId());
}
private String generateSessionId() {
final var chars = "abcdef0123456789".toCharArray();
var sessionId = new ArrayList<Character>();
for (int i = 0; i < 32; i++)
sessionId.add(chars[randomSource.nextInt(16)]);
return sessionId.toString();
}
private final Random randomSource = new Random();
private final String SAMPLE_QUERY = "%3Fallow_source%3Dtrue%26fast_bread%3Dtrue%26allow_audio_only%3Dtrue%26p%3D0%26play_session_id%3D<SESSION>%26player_backend%3Dmediaplayer%26warp%3Dfalse%26force_preroll%3Dfalse%26mobile_cellular%3Dfalse";
}

View File

@ -1,21 +1,20 @@
package app.revanced.twitch.api; package app.revanced.twitch.api;
import static app.revanced.twitch.adblock.IAdblockService.channelName;
import static app.revanced.twitch.adblock.IAdblockService.isVod;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import java.io.IOException;
import app.revanced.twitch.adblock.IAdblockService; import app.revanced.twitch.adblock.IAdblockService;
import app.revanced.twitch.adblock.LuminousService;
import app.revanced.twitch.adblock.PurpleAdblockService; import app.revanced.twitch.adblock.PurpleAdblockService;
import app.revanced.twitch.adblock.TTVLolService;
import app.revanced.twitch.settings.SettingsEnum; import app.revanced.twitch.settings.SettingsEnum;
import app.revanced.twitch.utils.LogHelper; import app.revanced.twitch.utils.LogHelper;
import app.revanced.twitch.utils.ReVancedUtils; import app.revanced.twitch.utils.ReVancedUtils;
import okhttp3.Interceptor; import okhttp3.Interceptor;
import okhttp3.Response; import okhttp3.Response;
import java.io.IOException;
import static app.revanced.twitch.adblock.IAdblockService.channelName;
import static app.revanced.twitch.adblock.IAdblockService.isVod;
public class RequestInterceptor implements Interceptor { public class RequestInterceptor implements Interceptor {
private IAdblockService activeService = null; private IAdblockService activeService = null;
@ -87,8 +86,8 @@ public class RequestInterceptor implements Interceptor {
private void updateActiveService() { private void updateActiveService() {
var current = SettingsEnum.BLOCK_EMBEDDED_ADS.getString(); var current = SettingsEnum.BLOCK_EMBEDDED_ADS.getString();
if (current.equals(ReVancedUtils.getString("key_revanced_proxy_ttv_lol")) && !(activeService instanceof TTVLolService)) if (current.equals(ReVancedUtils.getString("key_revanced_proxy_luminous")) && !(activeService instanceof LuminousService))
activeService = new TTVLolService(); activeService = new LuminousService();
else if (current.equals(ReVancedUtils.getString("key_revanced_proxy_purpleadblock")) && !(activeService instanceof PurpleAdblockService)) else if (current.equals(ReVancedUtils.getString("key_revanced_proxy_purpleadblock")) && !(activeService instanceof PurpleAdblockService))
activeService = new PurpleAdblockService(); activeService = new PurpleAdblockService();
else if (current.equals(ReVancedUtils.getString("key_revanced_proxy_disabled"))) else if (current.equals(ReVancedUtils.getString("key_revanced_proxy_disabled")))

View File

@ -1,23 +1,21 @@
package app.revanced.twitch.settings; package app.revanced.twitch.settings;
import static java.lang.Boolean.FALSE;
import static java.lang.Boolean.TRUE;
import static app.revanced.twitch.settings.SettingsEnum.ReturnType.BOOLEAN;
import static app.revanced.twitch.settings.SettingsEnum.ReturnType.STRING;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import app.revanced.twitch.utils.LogHelper; import app.revanced.twitch.utils.LogHelper;
import app.revanced.twitch.utils.ReVancedUtils; import app.revanced.twitch.utils.ReVancedUtils;
import static app.revanced.twitch.settings.SettingsEnum.ReturnType.BOOLEAN;
import static app.revanced.twitch.settings.SettingsEnum.ReturnType.STRING;
import static java.lang.Boolean.FALSE;
import static java.lang.Boolean.TRUE;
public enum SettingsEnum { public enum SettingsEnum {
/* Ads */ /* Ads */
BLOCK_VIDEO_ADS("revanced_block_video_ads", BOOLEAN, TRUE), BLOCK_VIDEO_ADS("revanced_block_video_ads", BOOLEAN, TRUE),
BLOCK_AUDIO_ADS("revanced_block_audio_ads", BOOLEAN, TRUE), BLOCK_AUDIO_ADS("revanced_block_audio_ads", BOOLEAN, TRUE),
BLOCK_EMBEDDED_ADS("revanced_block_embedded_ads", STRING, "ttv-lol"), BLOCK_EMBEDDED_ADS("revanced_block_embedded_ads", STRING, "luminous"),
/* Chat */ /* Chat */
SHOW_DELETED_MESSAGES("revanced_show_deleted_messages", STRING, "cross-out"), SHOW_DELETED_MESSAGES("revanced_show_deleted_messages", STRING, "cross-out"),