// Created by Fynn Godau 2019, licensed GNU GPL version 3 or later package org.schabi.newpipe.extractor.services.bandcamp; 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.KioskExtractor; import org.schabi.newpipe.extractor.kiosk.KioskList; import org.schabi.newpipe.extractor.linkhandler.*; import org.schabi.newpipe.extractor.playlist.PlaylistExtractor; import org.schabi.newpipe.extractor.search.SearchExtractor; import org.schabi.newpipe.extractor.services.bandcamp.extractors.*; import org.schabi.newpipe.extractor.services.bandcamp.linkHandler.*; import org.schabi.newpipe.extractor.stream.StreamExtractor; import org.schabi.newpipe.extractor.subscription.SubscriptionExtractor; import org.schabi.newpipe.extractor.suggestion.SuggestionExtractor; import java.io.IOException; import java.util.Collections; import static org.schabi.newpipe.extractor.StreamingService.ServiceInfo.MediaCapability.AUDIO; import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampFeaturedExtractor.FEATURED_API_URL; import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampFeaturedExtractor.KIOSK_FEATURED; import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampRadioExtractor.KIOSK_RADIO; import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampRadioExtractor.RADIO_API_URL; public class BandcampService extends StreamingService { public BandcampService(int id) { super(id, "bandcamp", Collections.singletonList(AUDIO)); } @Override public String getBaseUrl() { return "https://bandcamp.com"; } @Override public LinkHandlerFactory getStreamLHFactory() { return new BandcampStreamLinkHandlerFactory(); } @Override public ListLinkHandlerFactory getChannelLHFactory() { return new BandcampChannelLinkHandlerFactory(); } @Override public ListLinkHandlerFactory getPlaylistLHFactory() { return new BandcampPlaylistLinkHandlerFactory(); } @Override public SearchQueryHandlerFactory getSearchQHFactory() { return new BandcampSearchQueryHandlerFactory(); } @Override public ListLinkHandlerFactory getCommentsLHFactory() { return null; } @Override public SearchExtractor getSearchExtractor(SearchQueryHandler queryHandler) { return new BandcampSearchExtractor(this, queryHandler); } @Override public SuggestionExtractor getSuggestionExtractor() { return new BandcampSuggestionExtractor(this); } @Override public SubscriptionExtractor getSubscriptionExtractor() { return null; } @Override public KioskList getKioskList() throws ExtractionException { KioskList kioskList = new KioskList(this); try { kioskList.addKioskEntry(new KioskList.KioskExtractorFactory() { @Override public KioskExtractor createNewKiosk(StreamingService streamingService, String url, String kioskId) throws ExtractionException { return new BandcampFeaturedExtractor(BandcampService.this, new BandcampFeaturedLinkHandlerFactory().fromUrl(FEATURED_API_URL), kioskId); } }, new BandcampFeaturedLinkHandlerFactory(), KIOSK_FEATURED); kioskList.addKioskEntry(new KioskList.KioskExtractorFactory() { @Override public KioskExtractor createNewKiosk(StreamingService streamingService, String url, String kioskId) throws ExtractionException { return new BandcampRadioExtractor(BandcampService.this, new BandcampFeaturedLinkHandlerFactory().fromUrl(RADIO_API_URL), kioskId); } }, new BandcampFeaturedLinkHandlerFactory(), KIOSK_RADIO); kioskList.setDefaultKiosk(KIOSK_FEATURED); } catch (Exception e) { throw new ExtractionException(e); } return kioskList; } @Override public ChannelExtractor getChannelExtractor(ListLinkHandler linkHandler) throws ExtractionException { return new BandcampChannelExtractor(this, linkHandler); } @Override public PlaylistExtractor getPlaylistExtractor(ListLinkHandler linkHandler) { return new BandcampPlaylistExtractor(this, linkHandler); } @Override public StreamExtractor getStreamExtractor(LinkHandler linkHandler) { if (linkHandler.getUrl().matches("https?://bandcamp\\.com/\\?show=\\d+")) return new BandcampRadioStreamExtractor(this, linkHandler); else return new BandcampStreamExtractor(this, linkHandler); } @Override public CommentsExtractor getCommentsExtractor(ListLinkHandler linkHandler) { return null; } }