added baseUrl param in linkhandlers. Required for multi instance services
This commit is contained in:
parent
f3a59a6cdc
commit
8a7aa6b9a9
|
@ -2,6 +2,7 @@ package org.schabi.newpipe.extractor.linkhandler;
|
|||
|
||||
import org.schabi.newpipe.extractor.exceptions.FoundAdException;
|
||||
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||
import org.schabi.newpipe.extractor.utils.Utils;
|
||||
|
||||
/*
|
||||
* Created by Christian Schabesberger on 26.07.16.
|
||||
|
@ -33,18 +34,27 @@ public abstract class LinkHandlerFactory {
|
|||
public abstract String getUrl(String id) throws ParsingException;
|
||||
public abstract boolean onAcceptUrl(final String url) throws ParsingException;
|
||||
|
||||
public String getUrl(String id, String baseUrl) throws ParsingException{
|
||||
return getUrl(id);
|
||||
}
|
||||
|
||||
///////////////////////////////////
|
||||
// Logic
|
||||
///////////////////////////////////
|
||||
|
||||
public LinkHandler fromUrl(String url) throws ParsingException {
|
||||
final String baseUrl = Utils.getBaseUrl(url);
|
||||
return fromUrl(url, baseUrl);
|
||||
}
|
||||
|
||||
public LinkHandler fromUrl(String url, String baseUrl) throws ParsingException {
|
||||
if(url == null) throw new IllegalArgumentException("url can not be null");
|
||||
if(!acceptUrl(url)) {
|
||||
throw new ParsingException("Malformed unacceptable url: " + url);
|
||||
}
|
||||
|
||||
final String id = getId(url);
|
||||
return new LinkHandler(url, getUrl(id), id);
|
||||
return new LinkHandler(url, getUrl(id,baseUrl), id);
|
||||
}
|
||||
|
||||
public LinkHandler fromId(String id) throws ParsingException {
|
||||
|
@ -53,6 +63,12 @@ public abstract class LinkHandlerFactory {
|
|||
return new LinkHandler(url, url, id);
|
||||
}
|
||||
|
||||
public LinkHandler fromId(String id, String baseUrl) throws ParsingException {
|
||||
if(id == null) throw new IllegalArgumentException("id can not be null");
|
||||
final String url = getUrl(id, baseUrl);
|
||||
return new LinkHandler(url, url, id);
|
||||
}
|
||||
|
||||
/**
|
||||
* When a VIEW_ACTION is caught this function will test if the url delivered within the calling
|
||||
* Intent was meant to be watched with this Service.
|
||||
|
@ -65,4 +81,5 @@ public abstract class LinkHandlerFactory {
|
|||
throw fe;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
package org.schabi.newpipe.extractor.linkhandler;
|
||||
|
||||
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||
import org.schabi.newpipe.extractor.utils.Utils;
|
||||
|
||||
public abstract class ListLinkHandlerFactory extends LinkHandlerFactory {
|
||||
|
||||
///////////////////////////////////
|
||||
|
@ -15,16 +16,25 @@ public abstract class ListLinkHandlerFactory extends LinkHandlerFactory {
|
|||
public String getSortFilter(String url) throws ParsingException {return ""; }
|
||||
public abstract String getUrl(String id, List<String> contentFilter, String sortFilter) throws ParsingException;
|
||||
|
||||
public String getUrl(String id, List<String> contentFilter, String sortFilter, String baseUrl) throws ParsingException {
|
||||
return getUrl(id, contentFilter, sortFilter);
|
||||
}
|
||||
|
||||
///////////////////////////////////
|
||||
// Logic
|
||||
///////////////////////////////////
|
||||
|
||||
|
||||
@Override
|
||||
public ListLinkHandler fromUrl(String url) throws ParsingException {
|
||||
String baseUrl = Utils.getBaseUrl(url);
|
||||
return fromUrl(url, baseUrl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListLinkHandler fromUrl(String url, String baseUrl) throws ParsingException {
|
||||
if(url == null) throw new IllegalArgumentException("url may not be null");
|
||||
|
||||
return new ListLinkHandler(super.fromUrl(url), getContentFilter(url), getSortFilter(url));
|
||||
return new ListLinkHandler(super.fromUrl(url, baseUrl), getContentFilter(url), getSortFilter(url));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -32,6 +42,11 @@ public abstract class ListLinkHandlerFactory extends LinkHandlerFactory {
|
|||
return new ListLinkHandler(super.fromId(id), new ArrayList<String>(0), "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListLinkHandler fromId(String id, String baseUrl) throws ParsingException {
|
||||
return new ListLinkHandler(super.fromId(id, baseUrl), new ArrayList<String>(0), "");
|
||||
}
|
||||
|
||||
public ListLinkHandler fromQuery(String id,
|
||||
List<String> contentFilters,
|
||||
String sortFilter) throws ParsingException {
|
||||
|
@ -39,6 +54,13 @@ public abstract class ListLinkHandlerFactory extends LinkHandlerFactory {
|
|||
return new ListLinkHandler(url, url, id, contentFilters, sortFilter);
|
||||
}
|
||||
|
||||
public ListLinkHandler fromQuery(String id,
|
||||
List<String> contentFilters,
|
||||
String sortFilter, String baseUrl) throws ParsingException {
|
||||
final String url = getUrl(id, contentFilters, sortFilter, baseUrl);
|
||||
return new ListLinkHandler(url, url, id, contentFilters, sortFilter);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* For makeing ListLinkHandlerFactory compatible with LinkHandlerFactory we need to override this,
|
||||
|
@ -50,6 +72,11 @@ public abstract class ListLinkHandlerFactory extends LinkHandlerFactory {
|
|||
return getUrl(id, new ArrayList<String>(0), "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrl(String id, String baseUrl) throws ParsingException {
|
||||
return getUrl(id, new ArrayList<String>(0), "", baseUrl);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will returns content filter the corresponding extractor can handle like "channels", "videos", "music", etc.
|
||||
*
|
||||
|
|
|
@ -17,6 +17,7 @@ import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector;
|
|||
import org.schabi.newpipe.extractor.utils.JsonUtils;
|
||||
import org.schabi.newpipe.extractor.utils.Parser;
|
||||
import org.schabi.newpipe.extractor.utils.Parser.RegexException;
|
||||
import org.schabi.newpipe.extractor.utils.Utils;
|
||||
|
||||
import com.grack.nanojson.JsonArray;
|
||||
import com.grack.nanojson.JsonObject;
|
||||
|
@ -89,10 +90,11 @@ public class PeertubeChannelExtractor extends ChannelExtractor {
|
|||
throw new ParsingException("unable to extract channel streams", e);
|
||||
}
|
||||
|
||||
String baseUrl = Utils.getBaseUrl(getUrl());
|
||||
for(Object c: contents) {
|
||||
if(c instanceof JsonObject) {
|
||||
final JsonObject item = (JsonObject) c;
|
||||
PeertubeStreamInfoItemExtractor extractor = new PeertubeStreamInfoItemExtractor(item);
|
||||
PeertubeStreamInfoItemExtractor extractor = new PeertubeStreamInfoItemExtractor(item, baseUrl);
|
||||
collector.commit(extractor);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ import org.schabi.newpipe.extractor.localization.DateWrapper;
|
|||
import org.schabi.newpipe.extractor.services.peertube.PeertubeParsingHelper;
|
||||
import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubeChannelLinkHandlerFactory;
|
||||
import org.schabi.newpipe.extractor.utils.JsonUtils;
|
||||
import org.schabi.newpipe.extractor.utils.Utils;
|
||||
|
||||
import com.grack.nanojson.JsonObject;
|
||||
|
||||
|
@ -97,7 +98,8 @@ public class PeertubeCommentsInfoItemExtractor implements CommentsInfoItemExtrac
|
|||
public String getAuthorEndpoint() throws ParsingException {
|
||||
String name = JsonUtils.getString(item, "account.name");
|
||||
String host = JsonUtils.getString(item, "account.host");
|
||||
return PeertubeChannelLinkHandlerFactory.getInstance().fromId(name + "@" + host).getUrl();
|
||||
String baseUrl = Utils.getBaseUrl(url);
|
||||
return ServiceList.PeerTube.getChannelLHFactory().fromId(name + "@" + host, baseUrl).getUrl();
|
||||
}
|
||||
|
||||
}
|
|
@ -17,6 +17,7 @@ import org.schabi.newpipe.extractor.search.SearchExtractor;
|
|||
import org.schabi.newpipe.extractor.utils.JsonUtils;
|
||||
import org.schabi.newpipe.extractor.utils.Parser;
|
||||
import org.schabi.newpipe.extractor.utils.Parser.RegexException;
|
||||
import org.schabi.newpipe.extractor.utils.Utils;
|
||||
|
||||
import com.grack.nanojson.JsonArray;
|
||||
import com.grack.nanojson.JsonObject;
|
||||
|
@ -58,10 +59,11 @@ public class PeertubeSearchExtractor extends SearchExtractor {
|
|||
throw new ParsingException("unable to extract search info", e);
|
||||
}
|
||||
|
||||
String baseUrl = Utils.getBaseUrl(getUrl());
|
||||
for(Object c: contents) {
|
||||
if(c instanceof JsonObject) {
|
||||
final JsonObject item = (JsonObject) c;
|
||||
PeertubeStreamInfoItemExtractor extractor = new PeertubeStreamInfoItemExtractor(item);
|
||||
PeertubeStreamInfoItemExtractor extractor = new PeertubeStreamInfoItemExtractor(item, baseUrl);
|
||||
collector.commit(extractor);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,6 @@ import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
|
|||
import org.schabi.newpipe.extractor.linkhandler.LinkHandler;
|
||||
import org.schabi.newpipe.extractor.localization.DateWrapper;
|
||||
import org.schabi.newpipe.extractor.services.peertube.PeertubeParsingHelper;
|
||||
import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubeChannelLinkHandlerFactory;
|
||||
import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubeSearchQueryHandlerFactory;
|
||||
import org.schabi.newpipe.extractor.stream.AudioStream;
|
||||
import org.schabi.newpipe.extractor.stream.Stream;
|
||||
|
@ -30,6 +29,7 @@ import org.schabi.newpipe.extractor.stream.StreamType;
|
|||
import org.schabi.newpipe.extractor.stream.SubtitlesStream;
|
||||
import org.schabi.newpipe.extractor.stream.VideoStream;
|
||||
import org.schabi.newpipe.extractor.utils.JsonUtils;
|
||||
import org.schabi.newpipe.extractor.utils.Utils;
|
||||
|
||||
import com.grack.nanojson.JsonArray;
|
||||
import com.grack.nanojson.JsonObject;
|
||||
|
@ -115,7 +115,8 @@ public class PeertubeStreamExtractor extends StreamExtractor {
|
|||
public String getUploaderUrl() throws ParsingException {
|
||||
String name = JsonUtils.getString(json, "account.name");
|
||||
String host = JsonUtils.getString(json, "account.host");
|
||||
return PeertubeChannelLinkHandlerFactory.getInstance().fromId(name + "@" + host).getUrl();
|
||||
String baseUrl = Utils.getBaseUrl(getUrl());
|
||||
return getService().getChannelLHFactory().fromId(name + "@" + host, baseUrl).getUrl();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -266,10 +267,11 @@ public class PeertubeStreamExtractor extends StreamExtractor {
|
|||
throw new ParsingException("unable to extract related videos", e);
|
||||
}
|
||||
|
||||
String baseUrl = Utils.getBaseUrl(getUrl());
|
||||
for(Object c: contents) {
|
||||
if(c instanceof JsonObject) {
|
||||
final JsonObject item = (JsonObject) c;
|
||||
PeertubeStreamInfoItemExtractor extractor = new PeertubeStreamInfoItemExtractor(item);
|
||||
PeertubeStreamInfoItemExtractor extractor = new PeertubeStreamInfoItemExtractor(item, baseUrl);
|
||||
//do not add the same stream in related streams
|
||||
if(!extractor.getUrl().equals(getUrl())) collector.commit(extractor);
|
||||
}
|
||||
|
|
|
@ -15,15 +15,17 @@ import com.grack.nanojson.JsonObject;
|
|||
public class PeertubeStreamInfoItemExtractor implements StreamInfoItemExtractor {
|
||||
|
||||
protected final JsonObject item;
|
||||
private final String baseUrl;
|
||||
|
||||
public PeertubeStreamInfoItemExtractor(JsonObject item) {
|
||||
public PeertubeStreamInfoItemExtractor(JsonObject item, String baseUrl) {
|
||||
this.item = item;
|
||||
this.baseUrl = baseUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrl() throws ParsingException {
|
||||
String uuid = JsonUtils.getString(item, "uuid");
|
||||
return PeertubeStreamLinkHandlerFactory.getInstance().fromId(uuid).getUrl();
|
||||
return ServiceList.PeerTube.getStreamLHFactory().fromId(uuid, baseUrl).getUrl();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -52,7 +54,7 @@ public class PeertubeStreamInfoItemExtractor implements StreamInfoItemExtractor
|
|||
public String getUploaderUrl() throws ParsingException {
|
||||
String name = JsonUtils.getString(item, "account.name");
|
||||
String host = JsonUtils.getString(item, "account.host");
|
||||
return PeertubeChannelLinkHandlerFactory.getInstance().fromId(name + "@" + host).getUrl();
|
||||
return ServiceList.PeerTube.getChannelLHFactory().fromId(name + "@" + host, baseUrl).getUrl();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -15,6 +15,7 @@ import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector;
|
|||
import org.schabi.newpipe.extractor.utils.JsonUtils;
|
||||
import org.schabi.newpipe.extractor.utils.Parser;
|
||||
import org.schabi.newpipe.extractor.utils.Parser.RegexException;
|
||||
import org.schabi.newpipe.extractor.utils.Utils;
|
||||
|
||||
import com.grack.nanojson.JsonArray;
|
||||
import com.grack.nanojson.JsonObject;
|
||||
|
@ -53,10 +54,11 @@ public class PeertubeTrendingExtractor extends KioskExtractor {
|
|||
throw new ParsingException("unable to extract kiosk info", e);
|
||||
}
|
||||
|
||||
String baseUrl = Utils.getBaseUrl(getUrl());
|
||||
for(Object c: contents) {
|
||||
if(c instanceof JsonObject) {
|
||||
final JsonObject item = (JsonObject) c;
|
||||
PeertubeStreamInfoItemExtractor extractor = new PeertubeStreamInfoItemExtractor(item);
|
||||
PeertubeStreamInfoItemExtractor extractor = new PeertubeStreamInfoItemExtractor(item, baseUrl);
|
||||
collector.commit(extractor);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,8 +23,14 @@ public class PeertubeChannelLinkHandlerFactory extends ListLinkHandlerFactory {
|
|||
}
|
||||
|
||||
@Override
|
||||
public String getUrl(String id, List<String> contentFilters, String searchFilter) {
|
||||
public String getUrl(String id, List<String> contentFilters, String searchFilter) throws ParsingException {
|
||||
String baseUrl = ServiceList.PeerTube.getBaseUrl();
|
||||
return getUrl(id, contentFilters, searchFilter, baseUrl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrl(String id, List<String> contentFilter, String sortFilter, String baseUrl)
|
||||
throws ParsingException {
|
||||
return baseUrl + ACCOUNTS_ENDPOINT + id;
|
||||
}
|
||||
|
||||
|
|
|
@ -18,12 +18,6 @@ public class PeertubeCommentsLinkHandlerFactory extends ListLinkHandlerFactory {
|
|||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrl(String id) {
|
||||
String baseUrl = ServiceList.PeerTube.getBaseUrl();
|
||||
return baseUrl + String.format(COMMENTS_ENDPOINT, id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getId(String url) throws ParsingException, IllegalArgumentException {
|
||||
return Parser.matchGroup(ID_PATTERN, url, 2);
|
||||
|
@ -36,6 +30,13 @@ public class PeertubeCommentsLinkHandlerFactory extends ListLinkHandlerFactory {
|
|||
|
||||
@Override
|
||||
public String getUrl(String id, List<String> contentFilter, String sortFilter) throws ParsingException {
|
||||
return getUrl(id);
|
||||
String baseUrl = ServiceList.PeerTube.getBaseUrl();
|
||||
return getUrl(id, contentFilter, sortFilter, baseUrl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrl(String id, List<String> contentFilter, String sortFilter, String baseUrl) throws ParsingException {
|
||||
return baseUrl + String.format(COMMENTS_ENDPOINT, id);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -21,6 +21,11 @@ public class PeertubePlaylistLinkHandlerFactory extends ListLinkHandlerFactory {
|
|||
@Override
|
||||
public String getUrl(String id, List<String> contentFilters, String sortFilter) {
|
||||
String baseUrl = ServiceList.PeerTube.getBaseUrl();
|
||||
return getUrl(id, contentFilters, sortFilter, baseUrl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrl(String id, List<String> contentFilters, String sortFilter, String baseUrl) {
|
||||
return baseUrl + VIDEO_CHANNELS_ENDPOINT + id;
|
||||
}
|
||||
|
||||
|
|
|
@ -21,6 +21,11 @@ public class PeertubeSearchQueryHandlerFactory extends SearchQueryHandlerFactory
|
|||
@Override
|
||||
public String getUrl(String searchString, List<String> contentFilters, String sortFilter) throws ParsingException {
|
||||
String baseUrl = ServiceList.PeerTube.getBaseUrl();
|
||||
return getUrl(searchString, contentFilters, sortFilter, baseUrl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrl(String searchString, List<String> contentFilters, String sortFilter, String baseUrl) throws ParsingException {
|
||||
try {
|
||||
final String url = baseUrl + SEARCH_ENDPOINT
|
||||
+ "?search=" + URLEncoder.encode(searchString, CHARSET_UTF_8);
|
||||
|
|
|
@ -22,6 +22,11 @@ public class PeertubeStreamLinkHandlerFactory extends LinkHandlerFactory {
|
|||
@Override
|
||||
public String getUrl(String id) {
|
||||
String baseUrl = ServiceList.PeerTube.getBaseUrl();
|
||||
return getUrl(id, baseUrl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrl(String id, String baseUrl) {
|
||||
return baseUrl + VIDEO_ENDPOINT + id;
|
||||
}
|
||||
|
||||
|
|
|
@ -38,8 +38,14 @@ public class PeertubeTrendingLinkHandlerFactory extends ListLinkHandlerFactory {
|
|||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrl(String id, List<String> contentFilters, String sortFilter) {
|
||||
String baseUrl = ServiceList.PeerTube.getBaseUrl();
|
||||
return getUrl(id, contentFilters, sortFilter, baseUrl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrl(String id, List<String> contentFilters, String sortFilter, String baseUrl) {
|
||||
return String.format(KIOSK_MAP.get(id), baseUrl);
|
||||
}
|
||||
|
||||
|
|
|
@ -144,9 +144,9 @@ public class Utils {
|
|||
try {
|
||||
return new URL(url);
|
||||
} catch (MalformedURLException e) {
|
||||
// if no protocol is given try prepending "http://"
|
||||
// if no protocol is given try prepending "https://"
|
||||
if (e.getMessage().equals("no protocol: " + url)) {
|
||||
return new URL(HTTP + url);
|
||||
return new URL(HTTPS + url);
|
||||
}
|
||||
|
||||
throw e;
|
||||
|
@ -175,4 +175,15 @@ public class Utils {
|
|||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
public static String getBaseUrl(String url) throws ParsingException {
|
||||
URL uri;
|
||||
try {
|
||||
uri = stringToURL(url);
|
||||
} catch (MalformedURLException e) {
|
||||
throw new ParsingException("Malformed url: " + url, e);
|
||||
}
|
||||
return uri.getProtocol() + "://" + uri.getAuthority();
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue