package org.schabi.newpipe.extractor.services.peertube; import static org.schabi.newpipe.extractor.StreamingService.ServiceInfo.MediaCapability.COMMENTS; import static org.schabi.newpipe.extractor.StreamingService.ServiceInfo.MediaCapability.VIDEO; import static java.util.Arrays.asList; import org.schabi.newpipe.extractor.StreamingService; import org.schabi.newpipe.extractor.channel.ChannelExtractor; import org.schabi.newpipe.extractor.comments.CommentsExtractor; import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.extractor.kiosk.KioskList; import org.schabi.newpipe.extractor.linkhandler.LinkHandler; import org.schabi.newpipe.extractor.linkhandler.LinkHandlerFactory; import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler; import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory; import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandler; import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandlerFactory; import org.schabi.newpipe.extractor.playlist.PlaylistExtractor; import org.schabi.newpipe.extractor.search.SearchExtractor; import org.schabi.newpipe.extractor.services.peertube.extractors.PeertubeAccountExtractor; import org.schabi.newpipe.extractor.services.peertube.extractors.PeertubeChannelExtractor; import org.schabi.newpipe.extractor.services.peertube.extractors.PeertubeCommentsExtractor; import org.schabi.newpipe.extractor.services.peertube.extractors.PeertubePlaylistExtractor; import org.schabi.newpipe.extractor.services.peertube.extractors.PeertubeSearchExtractor; import org.schabi.newpipe.extractor.services.peertube.extractors.PeertubeStreamExtractor; import org.schabi.newpipe.extractor.services.peertube.extractors.PeertubeSuggestionExtractor; import org.schabi.newpipe.extractor.services.peertube.extractors.PeertubeTrendingExtractor; import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubeChannelLinkHandlerFactory; import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubeCommentsLinkHandlerFactory; import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubePlaylistLinkHandlerFactory; import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubeSearchQueryHandlerFactory; import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubeStreamLinkHandlerFactory; import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubeTrendingLinkHandlerFactory; import org.schabi.newpipe.extractor.stream.StreamExtractor; import org.schabi.newpipe.extractor.subscription.SubscriptionExtractor; import org.schabi.newpipe.extractor.suggestion.SuggestionExtractor; import java.util.List; public class PeertubeService extends StreamingService { private PeertubeInstance instance; public PeertubeService(final int id) { this(id, PeertubeInstance.DEFAULT_INSTANCE); } public PeertubeService(final int id, final PeertubeInstance instance) { super(id, "PeerTube", asList(VIDEO, COMMENTS)); this.instance = instance; } @Override public LinkHandlerFactory getStreamLHFactory() { return PeertubeStreamLinkHandlerFactory.getInstance(); } @Override public ListLinkHandlerFactory getChannelLHFactory() { return PeertubeChannelLinkHandlerFactory.getInstance(); } @Override public ListLinkHandlerFactory getPlaylistLHFactory() { return PeertubePlaylistLinkHandlerFactory.getInstance(); } @Override public SearchQueryHandlerFactory getSearchQHFactory() { return PeertubeSearchQueryHandlerFactory.getInstance(); } @Override public ListLinkHandlerFactory getCommentsLHFactory() { return PeertubeCommentsLinkHandlerFactory.getInstance(); } @Override public SearchExtractor getSearchExtractor(final SearchQueryHandler queryHandler) { final List contentFilters = queryHandler.getContentFilters(); return new PeertubeSearchExtractor(this, queryHandler, !contentFilters.isEmpty() && contentFilters.get(0).startsWith("sepia_")); } @Override public SuggestionExtractor getSuggestionExtractor() { return new PeertubeSuggestionExtractor(this); } @Override public SubscriptionExtractor getSubscriptionExtractor() { return null; } @Override public ChannelExtractor getChannelExtractor(final ListLinkHandler linkHandler) throws ExtractionException { if (linkHandler.getUrl().contains("/video-channels/")) { return new PeertubeChannelExtractor(this, linkHandler); } else { return new PeertubeAccountExtractor(this, linkHandler); } } @Override public PlaylistExtractor getPlaylistExtractor(final ListLinkHandler linkHandler) throws ExtractionException { return new PeertubePlaylistExtractor(this, linkHandler); } @Override public StreamExtractor getStreamExtractor(final LinkHandler linkHandler) throws ExtractionException { return new PeertubeStreamExtractor(this, linkHandler); } @Override public CommentsExtractor getCommentsExtractor(final ListLinkHandler linkHandler) throws ExtractionException { return new PeertubeCommentsExtractor(this, linkHandler); } @Override public String getBaseUrl() { return instance.getUrl(); } public PeertubeInstance getInstance() { return this.instance; } public void setInstance(final PeertubeInstance instance) { this.instance = instance; } @Override public KioskList getKioskList() throws ExtractionException { final KioskList.KioskExtractorFactory kioskFactory = (streamingService, url, id) -> new PeertubeTrendingExtractor( PeertubeService.this, new PeertubeTrendingLinkHandlerFactory().fromId(id), id ); final KioskList list = new KioskList(this); // add kiosks here e.g.: final PeertubeTrendingLinkHandlerFactory h = new PeertubeTrendingLinkHandlerFactory(); try { list.addKioskEntry(kioskFactory, h, PeertubeTrendingLinkHandlerFactory.KIOSK_TRENDING); list.addKioskEntry(kioskFactory, h, PeertubeTrendingLinkHandlerFactory.KIOSK_MOST_LIKED); list.addKioskEntry(kioskFactory, h, PeertubeTrendingLinkHandlerFactory.KIOSK_RECENT); list.addKioskEntry(kioskFactory, h, PeertubeTrendingLinkHandlerFactory.KIOSK_LOCAL); list.setDefaultKiosk(PeertubeTrendingLinkHandlerFactory.KIOSK_TRENDING); } catch (final Exception e) { throw new ExtractionException(e); } return list; } }