From d47d0f982e8a95cef61d0ff3f8aceedc43d2e39b Mon Sep 17 00:00:00 2001 From: ThetaDev Date: Thu, 27 Apr 2023 11:47:19 +0200 Subject: [PATCH] fix: add Bandcamp URL suffixes --- .../extractors/BandcampChannelExtractor.java | 11 +++--- .../BandcampChannelTabLinkHandlerFactory.java | 36 +++++++++++++------ 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampChannelExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampChannelExtractor.java index 04bd774a1..54c25cd29 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampChannelExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampChannelExtractor.java @@ -18,6 +18,7 @@ import org.schabi.newpipe.extractor.exceptions.ReCaptchaException; import org.schabi.newpipe.extractor.linkhandler.ChannelTabs; import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler; import org.schabi.newpipe.extractor.linkhandler.ReadyChannelTabListLinkHandler; +import org.schabi.newpipe.extractor.services.bandcamp.linkHandler.BandcampChannelTabLinkHandlerFactory; import java.io.IOException; import java.util.ArrayList; @@ -116,14 +117,16 @@ public class BandcampChannelExtractor extends ChannelExtractor { if (discography.stream().anyMatch(o -> ( (JsonObject) o).getString("item_type").equals("track"))) { - tabs.add(new ReadyChannelTabListLinkHandler(getUrl(), getId(), - ChannelTabs.TRACKS, builder)); + tabs.add(new ReadyChannelTabListLinkHandler(getUrl() + + BandcampChannelTabLinkHandlerFactory.getUrlSuffix(ChannelTabs.TRACKS), + getId(), ChannelTabs.TRACKS, builder)); } if (discography.stream().anyMatch(o -> ( (JsonObject) o).getString("item_type").equals("album"))) { - tabs.add(new ReadyChannelTabListLinkHandler(getUrl(), getId(), - ChannelTabs.ALBUMS, builder)); + tabs.add(new ReadyChannelTabListLinkHandler(getUrl() + + BandcampChannelTabLinkHandlerFactory.getUrlSuffix(ChannelTabs.ALBUMS), + getId(), ChannelTabs.ALBUMS, builder)); } return tabs; diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/linkHandler/BandcampChannelTabLinkHandlerFactory.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/linkHandler/BandcampChannelTabLinkHandlerFactory.java index 5ccc4f141..24f9a8fbc 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/linkHandler/BandcampChannelTabLinkHandlerFactory.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/linkHandler/BandcampChannelTabLinkHandlerFactory.java @@ -10,10 +10,6 @@ public final class BandcampChannelTabLinkHandlerFactory extends ListLinkHandlerF private static final BandcampChannelTabLinkHandlerFactory INSTANCE = new BandcampChannelTabLinkHandlerFactory(); - // This is not an actual page on the Bandcamp website, but it auto-redirects - // to the main page and we need a unique URL for the album tab - public static final String URL_SUFFIX = "/album"; - private BandcampChannelTabLinkHandlerFactory() { } @@ -21,6 +17,27 @@ public final class BandcampChannelTabLinkHandlerFactory extends ListLinkHandlerF return INSTANCE; } + /** + * Get the tab's URL suffix + *

+ * These URLs dont actually exist on the Bandcamp website as both albums and tracks + * are listed on the main page, but they redirect to the main page and we need a + * unique URL for each tab. + * + * @param tab Tab value + * @return URL suffix + * @throws ParsingException if the tab is not supported + */ + public static String getUrlSuffix(final String tab) throws ParsingException { + switch (tab) { + case ChannelTabs.TRACKS: + return "/track"; + case ChannelTabs.ALBUMS: + return "/album"; + } + throw new ParsingException("tab " + tab + " not supported"); + } + @Override public String getId(final String url) throws ParsingException { return BandcampChannelLinkHandlerFactory.getInstance().getId(url); @@ -29,12 +46,8 @@ public final class BandcampChannelTabLinkHandlerFactory extends ListLinkHandlerF @Override public String getUrl(final String id, final List contentFilter, final String sortFilter) throws ParsingException { - final String tab = contentFilter.get(0); - if (!tab.equals(ChannelTabs.ALBUMS)) { - throw new ParsingException("tab " + tab + " not supported"); - } - - return BandcampChannelLinkHandlerFactory.getInstance().getUrl(id) + URL_SUFFIX; + return BandcampChannelLinkHandlerFactory.getInstance().getUrl(id) + + getUrlSuffix(contentFilter.get(0)); } @Override @@ -44,7 +57,8 @@ public final class BandcampChannelTabLinkHandlerFactory extends ListLinkHandlerF @Override public String[] getAvailableContentFilter() { - return new String[] { + return new String[]{ + ChannelTabs.TRACKS, ChannelTabs.ALBUMS, }; }