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 PeertubePlaylistLinkHandlerFactory extends ListLinkHandlerFactory { private static final PeertubePlaylistLinkHandlerFactory INSTANCE = new PeertubePlaylistLinkHandlerFactory(); private static final String ID_PATTERN = "(/videos/watch/playlist/|/w/p/)([^/?&#]*)"; private static final String API_ID_PATTERN = "/video-playlists/([^/?&#]*)"; private PeertubePlaylistLinkHandlerFactory() { } public static PeertubePlaylistLinkHandlerFactory getInstance() { return INSTANCE; } @Override public String getUrl(final String id, final List contentFilters, final String sortFilter) { return getUrl(id, contentFilters, sortFilter, ServiceList.PeerTube.getBaseUrl()); } @Override public String getUrl(final String id, final List contentFilters, final String sortFilter, final String baseUrl) { return baseUrl + "/api/v1/video-playlists/" + id; } @Override public String getId(final String url) throws ParsingException { try { return Parser.matchGroup(ID_PATTERN, url, 2); } catch (final ParsingException ignored) { // might also be an API url, no reason to throw an exception here } return Parser.matchGroup1(API_ID_PATTERN, url); } @Override public boolean onAcceptUrl(final String url) { try { getId(url); return true; } catch (final ParsingException e) { return false; } } }