Skip to content

Commit

Permalink
fix(twitch/block-embedded-ads): rewrite Kotlin classes to Java (#270)
Browse files Browse the repository at this point in the history
Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
  • Loading branch information
oSumAtrIX committed Jan 2, 2023
1 parent bc635a7 commit 843dd9d
Show file tree
Hide file tree
Showing 8 changed files with 276 additions and 224 deletions.
26 changes: 26 additions & 0 deletions app/src/main/java/app/revanced/twitch/adblock/IAdblockService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package app.revanced.twitch.adblock;

import okhttp3.Request;

public interface IAdblockService {
String friendlyName();

Integer maxAttempts();

Boolean isAvailable();

Request rewriteHlsRequest(Request originalRequest);

static boolean isVod(Request request){
return request.url().pathSegments().contains("vod");
}

static String channelName(Request request) {
for (String pathSegment : request.url().pathSegments()) {
if (pathSegment.endsWith(".m3u8")) {
return pathSegment.replace(".m3u8", "");
}
}
return null;
}
}
18 changes: 0 additions & 18 deletions app/src/main/java/app/revanced/twitch/adblock/IAdblockService.kt

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package app.revanced.twitch.adblock;

import java.util.HashMap;
import java.util.Map;

import app.revanced.twitch.api.RetrofitClient;
import app.revanced.twitch.utils.LogHelper;
import app.revanced.twitch.utils.ReVancedUtils;
import okhttp3.HttpUrl;
import okhttp3.Request;
import okhttp3.ResponseBody;

public class PurpleAdblockService implements IAdblockService {
private final Map<String, Boolean> tunnels = new HashMap<>() {{
put("https://eu1.jupter.ga", false);
put("https://eu2.jupter.ga", false);
}};

@Override
public String friendlyName() {
return ReVancedUtils.getString("revanced_proxy_purpleadblock");
}

@Override
public Integer maxAttempts() {
return 3;
}

@Override
public Boolean isAvailable() {
for (String tunnel : tunnels.keySet()) {
var success = true;

try {
var response = RetrofitClient.getInstance().getPurpleAdblockApi().ping(tunnel).execute();
if (!response.isSuccessful()) {
LogHelper.error("PurpleAdBlock tunnel $tunnel returned an error: HTTP code %d", response.code());
LogHelper.debug(response.message());
if (response.errorBody() != null) {
LogHelper.debug(((ResponseBody) response.errorBody()).string());
}
success = false;
}
} catch (Exception ex) {
LogHelper.printException("PurpleAdBlock tunnel $tunnel is unavailable", ex);
success = false;
}

// Cache availability data
tunnels.put(tunnel, success);

if (success)
return true;
}

return false;
}

@Override
public Request rewriteHlsRequest(Request originalRequest) {
for (Map.Entry<String, Boolean> entry : tunnels.entrySet()) {
if (!entry.getValue()) continue;

var server = entry.getKey();

// Compose new URL
var url = HttpUrl.parse(server + "/channel/" + IAdblockService.channelName(originalRequest));
if (url == null) {
LogHelper.error("Failed to parse rewritten URL");
return null;
}

// Overwrite old request
return new Request.Builder()
.get()
.url(url)
.build();
}

LogHelper.error("No tunnels are available");
return null;
}
}

This file was deleted.

70 changes: 70 additions & 0 deletions app/src/main/java/app/revanced/twitch/adblock/TTVLolService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
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";
}
52 changes: 0 additions & 52 deletions app/src/main/java/app/revanced/twitch/adblock/TTVLolService.kt

This file was deleted.

Loading

0 comments on commit 843dd9d

Please sign in to comment.