Skip to content

Commit 8a7aa6b

Browse files
committed
added baseUrl param in linkhandlers. Required for multi instance services
1 parent f3a59a6 commit 8a7aa6b

15 files changed

Lines changed: 125 additions & 30 deletions

extractor/src/main/java/org/schabi/newpipe/extractor/linkhandler/LinkHandlerFactory.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.schabi.newpipe.extractor.exceptions.FoundAdException;
44
import org.schabi.newpipe.extractor.exceptions.ParsingException;
5+
import org.schabi.newpipe.extractor.utils.Utils;
56

67
/*
78
* Created by Christian Schabesberger on 26.07.16.
@@ -33,26 +34,41 @@ public abstract class LinkHandlerFactory {
3334
public abstract String getUrl(String id) throws ParsingException;
3435
public abstract boolean onAcceptUrl(final String url) throws ParsingException;
3536

37+
public String getUrl(String id, String baseUrl) throws ParsingException{
38+
return getUrl(id);
39+
}
40+
3641
///////////////////////////////////
3742
// Logic
3843
///////////////////////////////////
3944

4045
public LinkHandler fromUrl(String url) throws ParsingException {
46+
final String baseUrl = Utils.getBaseUrl(url);
47+
return fromUrl(url, baseUrl);
48+
}
49+
50+
public LinkHandler fromUrl(String url, String baseUrl) throws ParsingException {
4151
if(url == null) throw new IllegalArgumentException("url can not be null");
4252
if(!acceptUrl(url)) {
4353
throw new ParsingException("Malformed unacceptable url: " + url);
4454
}
4555

4656
final String id = getId(url);
47-
return new LinkHandler(url, getUrl(id), id);
57+
return new LinkHandler(url, getUrl(id,baseUrl), id);
4858
}
49-
59+
5060
public LinkHandler fromId(String id) throws ParsingException {
5161
if(id == null) throw new IllegalArgumentException("id can not be null");
5262
final String url = getUrl(id);
5363
return new LinkHandler(url, url, id);
5464
}
5565

66+
public LinkHandler fromId(String id, String baseUrl) throws ParsingException {
67+
if(id == null) throw new IllegalArgumentException("id can not be null");
68+
final String url = getUrl(id, baseUrl);
69+
return new LinkHandler(url, url, id);
70+
}
71+
5672
/**
5773
* When a VIEW_ACTION is caught this function will test if the url delivered within the calling
5874
* Intent was meant to be watched with this Service.
@@ -65,4 +81,5 @@ public boolean acceptUrl(final String url) throws ParsingException {
6581
throw fe;
6682
}
6783
}
84+
6885
}

extractor/src/main/java/org/schabi/newpipe/extractor/linkhandler/ListLinkHandlerFactory.java

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package org.schabi.newpipe.extractor.linkhandler;
22

3-
import org.schabi.newpipe.extractor.exceptions.ParsingException;
4-
53
import java.util.ArrayList;
64
import java.util.List;
75

6+
import org.schabi.newpipe.extractor.exceptions.ParsingException;
7+
import org.schabi.newpipe.extractor.utils.Utils;
8+
89
public abstract class ListLinkHandlerFactory extends LinkHandlerFactory {
910

1011
///////////////////////////////////
@@ -14,32 +15,53 @@ public abstract class ListLinkHandlerFactory extends LinkHandlerFactory {
1415
public List<String> getContentFilter(String url) throws ParsingException { return new ArrayList<>(0);}
1516
public String getSortFilter(String url) throws ParsingException {return ""; }
1617
public abstract String getUrl(String id, List<String> contentFilter, String sortFilter) throws ParsingException;
18+
19+
public String getUrl(String id, List<String> contentFilter, String sortFilter, String baseUrl) throws ParsingException {
20+
return getUrl(id, contentFilter, sortFilter);
21+
}
1722

1823
///////////////////////////////////
1924
// Logic
2025
///////////////////////////////////
21-
22-
26+
2327
@Override
2428
public ListLinkHandler fromUrl(String url) throws ParsingException {
29+
String baseUrl = Utils.getBaseUrl(url);
30+
return fromUrl(url, baseUrl);
31+
}
32+
33+
@Override
34+
public ListLinkHandler fromUrl(String url, String baseUrl) throws ParsingException {
2535
if(url == null) throw new IllegalArgumentException("url may not be null");
2636

27-
return new ListLinkHandler(super.fromUrl(url), getContentFilter(url), getSortFilter(url));
37+
return new ListLinkHandler(super.fromUrl(url, baseUrl), getContentFilter(url), getSortFilter(url));
2838
}
2939

3040
@Override
3141
public ListLinkHandler fromId(String id) throws ParsingException {
3242
return new ListLinkHandler(super.fromId(id), new ArrayList<String>(0), "");
3343
}
44+
45+
@Override
46+
public ListLinkHandler fromId(String id, String baseUrl) throws ParsingException {
47+
return new ListLinkHandler(super.fromId(id, baseUrl), new ArrayList<String>(0), "");
48+
}
3449

3550
public ListLinkHandler fromQuery(String id,
3651
List<String> contentFilters,
3752
String sortFilter) throws ParsingException {
3853
final String url = getUrl(id, contentFilters, sortFilter);
3954
return new ListLinkHandler(url, url, id, contentFilters, sortFilter);
4055
}
56+
57+
public ListLinkHandler fromQuery(String id,
58+
List<String> contentFilters,
59+
String sortFilter, String baseUrl) throws ParsingException {
60+
final String url = getUrl(id, contentFilters, sortFilter, baseUrl);
61+
return new ListLinkHandler(url, url, id, contentFilters, sortFilter);
62+
}
4163

42-
64+
4365
/**
4466
* For makeing ListLinkHandlerFactory compatible with LinkHandlerFactory we need to override this,
4567
* however it should not be overridden by the actual implementation.
@@ -50,6 +72,11 @@ public String getUrl(String id) throws ParsingException {
5072
return getUrl(id, new ArrayList<String>(0), "");
5173
}
5274

75+
@Override
76+
public String getUrl(String id, String baseUrl) throws ParsingException {
77+
return getUrl(id, new ArrayList<String>(0), "", baseUrl);
78+
}
79+
5380
/**
5481
* Will returns content filter the corresponding extractor can handle like "channels", "videos", "music", etc.
5582
*

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeChannelExtractor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.schabi.newpipe.extractor.utils.JsonUtils;
1818
import org.schabi.newpipe.extractor.utils.Parser;
1919
import org.schabi.newpipe.extractor.utils.Parser.RegexException;
20+
import org.schabi.newpipe.extractor.utils.Utils;
2021

2122
import com.grack.nanojson.JsonArray;
2223
import com.grack.nanojson.JsonObject;
@@ -89,10 +90,11 @@ private void collectStreamsFrom(StreamInfoItemsCollector collector, JsonObject j
8990
throw new ParsingException("unable to extract channel streams", e);
9091
}
9192

93+
String baseUrl = Utils.getBaseUrl(getUrl());
9294
for(Object c: contents) {
9395
if(c instanceof JsonObject) {
9496
final JsonObject item = (JsonObject) c;
95-
PeertubeStreamInfoItemExtractor extractor = new PeertubeStreamInfoItemExtractor(item);
97+
PeertubeStreamInfoItemExtractor extractor = new PeertubeStreamInfoItemExtractor(item, baseUrl);
9698
collector.commit(extractor);
9799
}
98100
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeCommentsInfoItemExtractor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.schabi.newpipe.extractor.services.peertube.PeertubeParsingHelper;
1010
import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubeChannelLinkHandlerFactory;
1111
import org.schabi.newpipe.extractor.utils.JsonUtils;
12+
import org.schabi.newpipe.extractor.utils.Utils;
1213

1314
import com.grack.nanojson.JsonObject;
1415

@@ -97,7 +98,8 @@ public String getAuthorName() throws ParsingException {
9798
public String getAuthorEndpoint() throws ParsingException {
9899
String name = JsonUtils.getString(item, "account.name");
99100
String host = JsonUtils.getString(item, "account.host");
100-
return PeertubeChannelLinkHandlerFactory.getInstance().fromId(name + "@" + host).getUrl();
101+
String baseUrl = Utils.getBaseUrl(url);
102+
return ServiceList.PeerTube.getChannelLHFactory().fromId(name + "@" + host, baseUrl).getUrl();
101103
}
102104

103105
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeSearchExtractor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.schabi.newpipe.extractor.utils.JsonUtils;
1818
import org.schabi.newpipe.extractor.utils.Parser;
1919
import org.schabi.newpipe.extractor.utils.Parser.RegexException;
20+
import org.schabi.newpipe.extractor.utils.Utils;
2021

2122
import com.grack.nanojson.JsonArray;
2223
import com.grack.nanojson.JsonObject;
@@ -58,10 +59,11 @@ private InfoItemsCollector<InfoItem, InfoItemExtractor> collectStreamsFrom(JsonO
5859
throw new ParsingException("unable to extract search info", e);
5960
}
6061

62+
String baseUrl = Utils.getBaseUrl(getUrl());
6163
for(Object c: contents) {
6264
if(c instanceof JsonObject) {
6365
final JsonObject item = (JsonObject) c;
64-
PeertubeStreamInfoItemExtractor extractor = new PeertubeStreamInfoItemExtractor(item);
66+
PeertubeStreamInfoItemExtractor extractor = new PeertubeStreamInfoItemExtractor(item, baseUrl);
6567
collector.commit(extractor);
6668
}
6769
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamExtractor.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.schabi.newpipe.extractor.linkhandler.LinkHandler;
2020
import org.schabi.newpipe.extractor.localization.DateWrapper;
2121
import org.schabi.newpipe.extractor.services.peertube.PeertubeParsingHelper;
22-
import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubeChannelLinkHandlerFactory;
2322
import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubeSearchQueryHandlerFactory;
2423
import org.schabi.newpipe.extractor.stream.AudioStream;
2524
import org.schabi.newpipe.extractor.stream.Stream;
@@ -30,6 +29,7 @@
3029
import org.schabi.newpipe.extractor.stream.SubtitlesStream;
3130
import org.schabi.newpipe.extractor.stream.VideoStream;
3231
import org.schabi.newpipe.extractor.utils.JsonUtils;
32+
import org.schabi.newpipe.extractor.utils.Utils;
3333

3434
import com.grack.nanojson.JsonArray;
3535
import com.grack.nanojson.JsonObject;
@@ -115,7 +115,8 @@ public long getDislikeCount() throws ParsingException {
115115
public String getUploaderUrl() throws ParsingException {
116116
String name = JsonUtils.getString(json, "account.name");
117117
String host = JsonUtils.getString(json, "account.host");
118-
return PeertubeChannelLinkHandlerFactory.getInstance().fromId(name + "@" + host).getUrl();
118+
String baseUrl = Utils.getBaseUrl(getUrl());
119+
return getService().getChannelLHFactory().fromId(name + "@" + host, baseUrl).getUrl();
119120
}
120121

121122
@Override
@@ -266,10 +267,11 @@ private void collectStreamsFrom(StreamInfoItemsCollector collector, JsonObject j
266267
throw new ParsingException("unable to extract related videos", e);
267268
}
268269

270+
String baseUrl = Utils.getBaseUrl(getUrl());
269271
for(Object c: contents) {
270272
if(c instanceof JsonObject) {
271273
final JsonObject item = (JsonObject) c;
272-
PeertubeStreamInfoItemExtractor extractor = new PeertubeStreamInfoItemExtractor(item);
274+
PeertubeStreamInfoItemExtractor extractor = new PeertubeStreamInfoItemExtractor(item, baseUrl);
273275
//do not add the same stream in related streams
274276
if(!extractor.getUrl().equals(getUrl())) collector.commit(extractor);
275277
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamInfoItemExtractor.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,17 @@
1515
public class PeertubeStreamInfoItemExtractor implements StreamInfoItemExtractor {
1616

1717
protected final JsonObject item;
18+
private final String baseUrl;
1819

19-
public PeertubeStreamInfoItemExtractor(JsonObject item) {
20+
public PeertubeStreamInfoItemExtractor(JsonObject item, String baseUrl) {
2021
this.item = item;
22+
this.baseUrl = baseUrl;
2123
}
2224

2325
@Override
2426
public String getUrl() throws ParsingException {
2527
String uuid = JsonUtils.getString(item, "uuid");
26-
return PeertubeStreamLinkHandlerFactory.getInstance().fromId(uuid).getUrl();
28+
return ServiceList.PeerTube.getStreamLHFactory().fromId(uuid, baseUrl).getUrl();
2729
}
2830

2931
@Override
@@ -52,7 +54,7 @@ public long getViewCount() throws ParsingException {
5254
public String getUploaderUrl() throws ParsingException {
5355
String name = JsonUtils.getString(item, "account.name");
5456
String host = JsonUtils.getString(item, "account.host");
55-
return PeertubeChannelLinkHandlerFactory.getInstance().fromId(name + "@" + host).getUrl();
57+
return ServiceList.PeerTube.getChannelLHFactory().fromId(name + "@" + host, baseUrl).getUrl();
5658
}
5759

5860
@Override

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeTrendingExtractor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.schabi.newpipe.extractor.utils.JsonUtils;
1616
import org.schabi.newpipe.extractor.utils.Parser;
1717
import org.schabi.newpipe.extractor.utils.Parser.RegexException;
18+
import org.schabi.newpipe.extractor.utils.Utils;
1819

1920
import com.grack.nanojson.JsonArray;
2021
import com.grack.nanojson.JsonObject;
@@ -53,10 +54,11 @@ private void collectStreamsFrom(StreamInfoItemsCollector collector, JsonObject j
5354
throw new ParsingException("unable to extract kiosk info", e);
5455
}
5556

57+
String baseUrl = Utils.getBaseUrl(getUrl());
5658
for(Object c: contents) {
5759
if(c instanceof JsonObject) {
5860
final JsonObject item = (JsonObject) c;
59-
PeertubeStreamInfoItemExtractor extractor = new PeertubeStreamInfoItemExtractor(item);
61+
PeertubeStreamInfoItemExtractor extractor = new PeertubeStreamInfoItemExtractor(item, baseUrl);
6062
collector.commit(extractor);
6163
}
6264
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/linkHandler/PeertubeChannelLinkHandlerFactory.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,14 @@ public String getId(String url) throws ParsingException {
2323
}
2424

2525
@Override
26-
public String getUrl(String id, List<String> contentFilters, String searchFilter) {
26+
public String getUrl(String id, List<String> contentFilters, String searchFilter) throws ParsingException {
2727
String baseUrl = ServiceList.PeerTube.getBaseUrl();
28+
return getUrl(id, contentFilters, searchFilter, baseUrl);
29+
}
30+
31+
@Override
32+
public String getUrl(String id, List<String> contentFilter, String sortFilter, String baseUrl)
33+
throws ParsingException {
2834
return baseUrl + ACCOUNTS_ENDPOINT + id;
2935
}
3036

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/linkHandler/PeertubeCommentsLinkHandlerFactory.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,6 @@ public static PeertubeCommentsLinkHandlerFactory getInstance() {
1818
return instance;
1919
}
2020

21-
@Override
22-
public String getUrl(String id) {
23-
String baseUrl = ServiceList.PeerTube.getBaseUrl();
24-
return baseUrl + String.format(COMMENTS_ENDPOINT, id);
25-
}
26-
2721
@Override
2822
public String getId(String url) throws ParsingException, IllegalArgumentException {
2923
return Parser.matchGroup(ID_PATTERN, url, 2);
@@ -36,6 +30,13 @@ public boolean onAcceptUrl(final String url) throws FoundAdException {
3630

3731
@Override
3832
public String getUrl(String id, List<String> contentFilter, String sortFilter) throws ParsingException {
39-
return getUrl(id);
33+
String baseUrl = ServiceList.PeerTube.getBaseUrl();
34+
return getUrl(id, contentFilter, sortFilter, baseUrl);
35+
}
36+
37+
@Override
38+
public String getUrl(String id, List<String> contentFilter, String sortFilter, String baseUrl) throws ParsingException {
39+
return baseUrl + String.format(COMMENTS_ENDPOINT, id);
4040
}
41+
4142
}

0 commit comments

Comments
 (0)