mirror of
https://github.com/TeamPiped/Piped-Backend.git
synced 2024-08-14 23:51:41 +00:00
Improvements to reqwest4j init, warm up extractor, init youtube country on new thread
This commit is contained in:
parent
1bb0356c8b
commit
68bbf3c0f8
3 changed files with 30 additions and 15 deletions
|
@ -21,15 +21,18 @@ import org.schabi.newpipe.extractor.localization.ContentCountry;
|
||||||
import org.schabi.newpipe.extractor.localization.Localization;
|
import org.schabi.newpipe.extractor.localization.Localization;
|
||||||
import org.schabi.newpipe.extractor.services.youtube.YoutubeJavaScriptPlayerManager;
|
import org.schabi.newpipe.extractor.services.youtube.YoutubeJavaScriptPlayerManager;
|
||||||
import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor;
|
import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor;
|
||||||
|
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
||||||
|
import rocks.kavin.reqwest4j.ReqwestUtils;
|
||||||
|
|
||||||
import java.security.Security;
|
import java.security.Security;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static me.kavin.piped.consts.Constants.MATRIX_SERVER;
|
import static me.kavin.piped.consts.Constants.*;
|
||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
|
|
||||||
|
@ -38,10 +41,32 @@ public class Main {
|
||||||
Security.setProperty("crypto.policy", "unlimited");
|
Security.setProperty("crypto.policy", "unlimited");
|
||||||
Security.addProvider(new BouncyCastleProvider());
|
Security.addProvider(new BouncyCastleProvider());
|
||||||
|
|
||||||
|
ReqwestUtils.init(REQWEST_PROXY_USER, REQWEST_PROXY, REQWEST_PROXY_PASS);
|
||||||
|
|
||||||
NewPipe.init(new DownloaderImpl(), new Localization("en", "US"), ContentCountry.DEFAULT, Multithreading.getCachedExecutor());
|
NewPipe.init(new DownloaderImpl(), new Localization("en", "US"), ContentCountry.DEFAULT, Multithreading.getCachedExecutor());
|
||||||
YoutubeStreamExtractor.forceFetchAndroidClient(true);
|
YoutubeStreamExtractor.forceFetchAndroidClient(true);
|
||||||
YoutubeStreamExtractor.forceFetchIosClient(true);
|
YoutubeStreamExtractor.forceFetchIosClient(true);
|
||||||
|
|
||||||
|
// Warm up the extractor
|
||||||
|
try {
|
||||||
|
StreamInfo.getInfo("https://www.youtube.com/watch?v=dQw4w9WgXcQ");
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find country code, used for georestricted videos
|
||||||
|
Thread.ofVirtual().start(() -> {
|
||||||
|
try {
|
||||||
|
var html = RequestUtils.sendGet("https://www.youtube.com/").get();
|
||||||
|
var regex = Pattern.compile("GL\":\"([A-Z]{2})\"", Pattern.MULTILINE);
|
||||||
|
var matcher = regex.matcher(html);
|
||||||
|
if (matcher.find()) {
|
||||||
|
YOUTUBE_COUNTRY = matcher.group(1);
|
||||||
|
}
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
System.err.println("Failed to get country from YouTube!");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
Sentry.init(options -> {
|
Sentry.init(options -> {
|
||||||
options.setDsn(Constants.SENTRY_DSN);
|
options.setDsn(Constants.SENTRY_DSN);
|
||||||
options.setRelease(Constants.VERSION);
|
options.setRelease(Constants.VERSION);
|
||||||
|
|
|
@ -103,7 +103,7 @@ public class Constants {
|
||||||
|
|
||||||
public static final String GEO_RESTRICTION_CHECKER_URL;
|
public static final String GEO_RESTRICTION_CHECKER_URL;
|
||||||
|
|
||||||
public static final String YOUTUBE_COUNTRY;
|
public static String YOUTUBE_COUNTRY;
|
||||||
|
|
||||||
public static final String VERSION;
|
public static final String VERSION;
|
||||||
|
|
||||||
|
@ -140,7 +140,6 @@ public class Constants {
|
||||||
REQWEST_PROXY = getProperty(prop, "REQWEST_PROXY");
|
REQWEST_PROXY = getProperty(prop, "REQWEST_PROXY");
|
||||||
REQWEST_PROXY_USER = getProperty(prop, "REQWEST_PROXY_USER");
|
REQWEST_PROXY_USER = getProperty(prop, "REQWEST_PROXY_USER");
|
||||||
REQWEST_PROXY_PASS = getProperty(prop, "REQWEST_PROXY_PASS");
|
REQWEST_PROXY_PASS = getProperty(prop, "REQWEST_PROXY_PASS");
|
||||||
ReqwestUtils.init(REQWEST_PROXY, REQWEST_PROXY_USER, REQWEST_PROXY_PASS);
|
|
||||||
FRONTEND_URL = getProperty(prop, "FRONTEND_URL", "https://piped.video");
|
FRONTEND_URL = getProperty(prop, "FRONTEND_URL", "https://piped.video");
|
||||||
COMPROMISED_PASSWORD_CHECK = Boolean.parseBoolean(getProperty(prop, "COMPROMISED_PASSWORD_CHECK", "true"));
|
COMPROMISED_PASSWORD_CHECK = Boolean.parseBoolean(getProperty(prop, "COMPROMISED_PASSWORD_CHECK", "true"));
|
||||||
DISABLE_REGISTRATION = Boolean.parseBoolean(getProperty(prop, "DISABLE_REGISTRATION", "false"));
|
DISABLE_REGISTRATION = Boolean.parseBoolean(getProperty(prop, "DISABLE_REGISTRATION", "false"));
|
||||||
|
@ -202,18 +201,6 @@ public class Constants {
|
||||||
.addInterceptor(BrotliInterceptor.INSTANCE);
|
.addInterceptor(BrotliInterceptor.INSTANCE);
|
||||||
h2client = builder.build();
|
h2client = builder.build();
|
||||||
h2_no_redir_client = builder_noredir.build();
|
h2_no_redir_client = builder_noredir.build();
|
||||||
String temp = null;
|
|
||||||
try {
|
|
||||||
var html = RequestUtils.sendGet("https://www.youtube.com/").get();
|
|
||||||
var regex = Pattern.compile("GL\":\"([A-Z]{2})\"", Pattern.MULTILINE);
|
|
||||||
var matcher = regex.matcher(html);
|
|
||||||
if (matcher.find()) {
|
|
||||||
temp = matcher.group(1);
|
|
||||||
}
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
System.err.println("Failed to get country from YouTube!");
|
|
||||||
}
|
|
||||||
YOUTUBE_COUNTRY = temp;
|
|
||||||
VERSION = new File("VERSION").exists() ?
|
VERSION = new File("VERSION").exists() ?
|
||||||
IOUtils.toString(new FileReader("VERSION")) :
|
IOUtils.toString(new FileReader("VERSION")) :
|
||||||
"unknown";
|
"unknown";
|
||||||
|
|
|
@ -132,6 +132,9 @@ public class SyncRunner implements Runnable {
|
||||||
if (!UNAUTHENTICATED && type.startsWith("video.piped.stream.bypass.")) {
|
if (!UNAUTHENTICATED && type.startsWith("video.piped.stream.bypass.")) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case "video.piped.stream.bypass.request" -> {
|
case "video.piped.stream.bypass.request" -> {
|
||||||
|
if (Constants.YOUTUBE_COUNTRY == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
FederatedGeoBypassRequest bypassRequest = mapper.treeToValue(content, FederatedGeoBypassRequest.class);
|
FederatedGeoBypassRequest bypassRequest = mapper.treeToValue(content, FederatedGeoBypassRequest.class);
|
||||||
if (bypassRequest.getAllowedCountries().contains(Constants.YOUTUBE_COUNTRY)) {
|
if (bypassRequest.getAllowedCountries().contains(Constants.YOUTUBE_COUNTRY)) {
|
||||||
// We're capable of helping another instance!
|
// We're capable of helping another instance!
|
||||||
|
|
Loading…
Reference in a new issue