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

78 lines
2.5 KiB
Java

package org.schabi.newpipe.extractor.services.peertube.linkHandler;
import org.schabi.newpipe.extractor.ServiceList;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
import org.schabi.newpipe.extractor.utils.Parser;
import java.util.List;
public final class PeertubeChannelLinkHandlerFactory extends ListLinkHandlerFactory {
private static final PeertubeChannelLinkHandlerFactory INSTANCE
= new PeertubeChannelLinkHandlerFactory();
private static final String ID_PATTERN = "((accounts|a)|(video-channels|c))/([^/?&#]*)";
public static final String API_ENDPOINT = "/api/v1/";
private PeertubeChannelLinkHandlerFactory() {
}
public static PeertubeChannelLinkHandlerFactory getInstance() {
return INSTANCE;
}
@Override
public String getId(final String url) throws ParsingException {
return fixId(Parser.matchGroup(ID_PATTERN, url, 0));
}
@Override
public String getUrl(final String id,
final List<String> contentFilters,
final String searchFilter) throws ParsingException {
return getUrl(id, contentFilters, searchFilter, ServiceList.PeerTube.getBaseUrl());
}
@Override
public String getUrl(final String id,
final List<String> contentFilter,
final String sortFilter,
final String baseUrl)
throws ParsingException {
if (id.matches(ID_PATTERN)) {
return baseUrl + "/" + fixId(id);
} else {
// This is needed for compatibility with older versions were we didn't support
// video channels yet
return baseUrl + "/accounts/" + id;
}
}
@Override
public boolean onAcceptUrl(final String url) {
return url.contains("/accounts/") || url.contains("/a/")
|| url.contains("/video-channels/") || url.contains("/c/");
}
/**
* Fix id
*
* <p>
* a/:accountName and c/:channelName ids are supported
* by the PeerTube web client (>= v3.3.0)
* but not by the API.
* </p>
*
* @param id the id to fix
* @return the fixed id
*/
private String fixId(final String id) {
if (id.startsWith("a/")) {
return "accounts" + id.substring(1);
} else if (id.startsWith("c/")) {
return "video-channels" + id.substring(1);
}
return id;
}
}