Skip to content

Commit 9a46992

Browse files
committed
Don't call fetch page in constructor
1 parent 5272468 commit 9a46992

14 files changed

Lines changed: 51 additions & 35 deletions

src/main/java/org/schabi/newpipe/extractor/Extractor.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,16 @@ public abstract class Extractor {
3333
*/
3434
@Nullable
3535
private String cleanUrl;
36+
private boolean pageFetched = false;
37+
private final Downloader downloader;
3638

3739
public Extractor(StreamingService service, String url) throws ExtractionException {
3840
if(service == null) throw new NullPointerException("service is null");
3941
if(url == null) throw new NullPointerException("url is null");
4042
this.service = service;
4143
this.originalUrl = url;
44+
this.downloader = NewPipe.getDownloader();
45+
if(downloader == null) throw new NullPointerException("downloader is null");
4246
}
4347

4448
/**
@@ -49,8 +53,26 @@ public Extractor(StreamingService service, String url) throws ExtractionExceptio
4953

5054
/**
5155
* Fetch the current page.
56+
* @throws IOException if the page can not be loaded
57+
* @throws ExtractionException if the pages content is not understood
5258
*/
53-
public abstract void fetchPage() throws IOException, ExtractionException;
59+
public void fetchPage() throws IOException, ExtractionException {
60+
if(pageFetched) return;
61+
onFetchPage(downloader);
62+
pageFetched = true;
63+
}
64+
65+
protected void assertPageFetched() {
66+
if(!pageFetched) throw new IllegalStateException("Page is not fetched. Make sure you call fetchPage()");
67+
}
68+
69+
/**
70+
* Fetch the current page.
71+
* @param downloader the download to use
72+
* @throws IOException if the page can not be loaded
73+
* @throws ExtractionException if the pages content is not understood
74+
*/
75+
public abstract void onFetchPage(@Nonnull Downloader downloader) throws IOException, ExtractionException;
5476

5577
@Nonnull
5678
public abstract String getId() throws ParsingException;

src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudChannelExtractor.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,13 @@ public SoundcloudChannelExtractor(StreamingService service, String url, String n
2424
}
2525

2626
@Override
27-
public void fetchPage() throws IOException, ExtractionException {
28-
Downloader dl = NewPipe.getDownloader();
27+
public void onFetchPage(@Nonnull Downloader downloader) throws IOException, ExtractionException {
2928

3029
userId = getUrlIdHandler().getId(getOriginalUrl());
3130
String apiUrl = "https://api.soundcloud.com/users/" + userId +
3231
"?client_id=" + SoundcloudParsingHelper.clientId();
3332

34-
String response = dl.download(apiUrl);
33+
String response = downloader.download(apiUrl);
3534
try {
3635
user = JsonParser.object().from(response);
3736
} catch (JsonParserException e) {

src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudChartsExtractor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.Arrays;
55
import java.util.List;
66

7+
import org.schabi.newpipe.extractor.Downloader;
78
import org.schabi.newpipe.extractor.StreamingService;
89
import org.schabi.newpipe.extractor.UrlIdHandler;
910
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
@@ -23,7 +24,7 @@ public SoundcloudChartsExtractor(StreamingService service, String url, String ne
2324
}
2425

2526
@Override
26-
public void fetchPage() {
27+
public void onFetchPage(@Nonnull Downloader downloader) {
2728
}
2829

2930
@Nonnull

src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudParsingHelper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,13 @@ public static String toDateString(String time) throws ParsingException {
6666
* Call the endpoint "/resolve" of the api.<br/>
6767
* See https://developers.soundcloud.com/docs/api/reference#resolve
6868
*/
69-
public static JsonObject resolveFor(String url) throws IOException, ReCaptchaException, ParsingException {
69+
public static JsonObject resolveFor(Downloader downloader, String url) throws IOException, ReCaptchaException, ParsingException {
7070
String apiUrl = "https://api.soundcloud.com/resolve"
7171
+ "?url=" + URLEncoder.encode(url, "UTF-8")
7272
+ "&client_id=" + clientId();
7373

7474
try {
75-
return JsonParser.object().from(NewPipe.getDownloader().download(apiUrl));
75+
return JsonParser.object().from(downloader.download(apiUrl));
7676
} catch (JsonParserException e) {
7777
throw new ParsingException("Could not parse json response", e);
7878
}

src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudPlaylistExtractor.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,14 @@ public SoundcloudPlaylistExtractor(StreamingService service, String url, String
2424
}
2525

2626
@Override
27-
public void fetchPage() throws IOException, ExtractionException {
28-
Downloader dl = NewPipe.getDownloader();
27+
public void onFetchPage(@Nonnull Downloader downloader) throws IOException, ExtractionException {
2928

3029
playlistId = getUrlIdHandler().getId(getOriginalUrl());
3130
String apiUrl = "https://api.soundcloud.com/playlists/" + playlistId +
3231
"?client_id=" + SoundcloudParsingHelper.clientId() +
3332
"&representation=compact";
3433

35-
String response = dl.download(apiUrl);
34+
String response = downloader.download(apiUrl);
3635
try {
3736
playlist = JsonParser.object().from(response);
3837
} catch (JsonParserException e) {

src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudStreamExtractor.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,11 @@ public class SoundcloudStreamExtractor extends StreamExtractor {
2121

2222
public SoundcloudStreamExtractor(StreamingService service, String url) throws IOException, ExtractionException {
2323
super(service, url);
24-
fetchPage();
2524
}
2625

2726
@Override
28-
public void fetchPage() throws IOException, ExtractionException {
29-
track = SoundcloudParsingHelper.resolveFor(getOriginalUrl());
27+
public void onFetchPage(@Nonnull Downloader downloader) throws IOException, ExtractionException {
28+
track = SoundcloudParsingHelper.resolveFor(downloader, getOriginalUrl());
3029

3130
String policy = track.getString("policy", "");
3231
if (!policy.equals("ALLOW") && !policy.equals("MONETIZE")) {

src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeChannelExtractor.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,7 @@ public YoutubeChannelExtractor(StreamingService service, String url, String next
5959
}
6060

6161
@Override
62-
public void fetchPage() throws IOException, ExtractionException {
63-
Downloader downloader = NewPipe.getDownloader();
64-
62+
public void onFetchPage(@Nonnull Downloader downloader) throws IOException, ExtractionException {
6563
String channelUrl = super.getCleanUrl() + CHANNEL_URL_PARAMETERS;
6664
String pageContent = downloader.download(channelUrl);
6765
doc = Jsoup.parse(pageContent, channelUrl);

src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubePlaylistExtractor.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,7 @@ public YoutubePlaylistExtractor(StreamingService service, String url, String nex
3636
}
3737

3838
@Override
39-
public void fetchPage() throws IOException, ExtractionException {
40-
Downloader downloader = NewPipe.getDownloader();
41-
39+
public void onFetchPage(@Nonnull Downloader downloader) throws IOException, ExtractionException {
4240
String pageContent = downloader.download(getCleanUrl());
4341
doc = Jsoup.parse(pageContent, getCleanUrl());
4442

src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamExtractor.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ public class LiveStreamException extends ContentNotAvailableException {
8686

8787
public YoutubeStreamExtractor(StreamingService service, String url) throws IOException, ExtractionException {
8888
super(service, url);
89-
fetchPage();
9089
}
9190

9291
/*//////////////////////////////////////////////////////////////////////////
@@ -415,7 +414,8 @@ public List<Subtitles> getSubtitles(SubtitlesFormat format) throws IOException,
415414
// If the video is age restricted getPlayerConfig will fail
416415
return null;
417416
}
418-
JsonObject playerConfig = getPlayerConfig(getPageHtml());
417+
// TODO: This should be done in onFetchPage()
418+
JsonObject playerConfig = getPlayerConfig(getPageHtml(NewPipe.getDownloader()));
419419
String playerResponse = playerConfig.getObject("args").getString("player_response");
420420

421421
JsonObject captions;
@@ -530,26 +530,23 @@ public String getErrorMessage() {
530530

531531
private static String pageHtml = null;
532532

533-
private String getPageHtml() throws IOException, ExtractionException{
533+
private String getPageHtml(Downloader downloader) throws IOException, ExtractionException{
534534
if (pageHtml == null) {
535-
Downloader dl = NewPipe.getDownloader();
536-
pageHtml = dl.download(getCleanUrl());
535+
pageHtml = downloader.download(getCleanUrl());
537536
}
538537
return pageHtml;
539538
}
540539

541540
@Override
542-
public void fetchPage() throws IOException, ExtractionException {
543-
Downloader dl = NewPipe.getDownloader();
544-
545-
String pageContent = getPageHtml();
541+
public void onFetchPage(@Nonnull Downloader downloader) throws IOException, ExtractionException {
542+
String pageContent = getPageHtml(downloader);
546543
doc = Jsoup.parse(pageContent, getCleanUrl());
547544

548545

549546
String playerUrl;
550547
// Check if the video is age restricted
551548
if (pageContent.contains("<meta property=\"og:restrictions:age")) {
552-
String infoPageResponse = dl.download(String.format(GET_VIDEO_INFO_URL, getId()));
549+
String infoPageResponse = downloader.download(String.format(GET_VIDEO_INFO_URL, getId()));
553550
videoInfoPage.putAll(Parser.compatParseMap(infoPageResponse));
554551
playerUrl = getPlayerUrlFromRestrictedVideo();
555552
isAgeRestricted = true;

src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeTrendingExtractor.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,7 @@ public YoutubeTrendingExtractor(StreamingService service, String url, String nex
4242
}
4343

4444
@Override
45-
public void fetchPage() throws IOException, ExtractionException {
46-
Downloader downloader = NewPipe.getDownloader();
47-
45+
public void onFetchPage(@Nonnull Downloader downloader) throws IOException, ExtractionException {
4846
final String contentCountry = getContentCountry();
4947
String url = getCleanUrl();
5048
if(contentCountry != null && !contentCountry.isEmpty()) {

0 commit comments

Comments
 (0)