Skip to content

Commit 9dc1832

Browse files
committed
[Bandcamp] Handle paywalled tracks
1 parent 3fdb6ee commit 9dc1832

2 files changed

Lines changed: 30 additions & 0 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampStreamExtractor.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.schabi.newpipe.extractor.StreamingService;
1616
import org.schabi.newpipe.extractor.downloader.Downloader;
1717
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
18+
import org.schabi.newpipe.extractor.exceptions.PaidContentException;
1819
import org.schabi.newpipe.extractor.exceptions.ParsingException;
1920
import org.schabi.newpipe.extractor.linkhandler.LinkHandler;
2021
import org.schabi.newpipe.extractor.localization.DateWrapper;
@@ -57,6 +58,10 @@ public void onFetchPage(@Nonnull final Downloader downloader)
5758
// In this case, we are actually viewing an album page!
5859
throw new ExtractionException("Page is actually an album, not a track");
5960
}
61+
62+
if (albumJson.getArray("trackinfo").getObject(0).isNull("file")) {
63+
throw new PaidContentException("This track is not available without being purchased");
64+
}
6065
}
6166

6267
/**
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.schabi.newpipe.extractor.services.bandcamp;
2+
3+
import static org.junit.jupiter.api.Assertions.assertThrows;
4+
import static org.schabi.newpipe.extractor.ServiceList.Bandcamp;
5+
6+
import org.junit.jupiter.api.BeforeAll;
7+
import org.junit.jupiter.api.Test;
8+
import org.schabi.newpipe.downloader.DownloaderTestImpl;
9+
import org.schabi.newpipe.extractor.NewPipe;
10+
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
11+
import org.schabi.newpipe.extractor.exceptions.PaidContentException;
12+
13+
public class BandcampPaidStreamExtractorTest {
14+
15+
@BeforeAll
16+
public static void setUp() {
17+
NewPipe.init(DownloaderTestImpl.getInstance());
18+
}
19+
20+
@Test
21+
public void testPaidTrack() throws ExtractionException {
22+
final var extractor = Bandcamp.getStreamExtractor("https://radicaldreamland.bandcamp.com/track/hackmud-continuous-mix");
23+
assertThrows(PaidContentException.class, extractor::fetchPage);
24+
}
25+
}

0 commit comments

Comments
 (0)