From 318cec76256bcd6f5fce0fabaf9aa729c6d8a177 Mon Sep 17 00:00:00 2001 From: TobiGr Date: Sun, 11 Apr 2021 21:19:40 +0200 Subject: [PATCH] [Bandcamp] Add Radio stream segments --- .../BandcampRadioStreamExtractor.java | 19 +++++++++++++++++++ .../extractor/stream/StreamSegment.java | 14 ++++++++++++++ .../BandcampRadioStreamExtractorTest.java | 1 + 3 files changed, 34 insertions(+) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioStreamExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioStreamExtractor.java index d1ef8d86..92e37b71 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioStreamExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioStreamExtractor.java @@ -1,5 +1,6 @@ package org.schabi.newpipe.extractor.services.bandcamp.extractors; +import com.grack.nanojson.JsonArray; import com.grack.nanojson.JsonObject; import com.grack.nanojson.JsonParser; import com.grack.nanojson.JsonParserException; @@ -15,6 +16,7 @@ import org.schabi.newpipe.extractor.exceptions.ReCaptchaException; import org.schabi.newpipe.extractor.linkhandler.LinkHandler; import org.schabi.newpipe.extractor.stream.AudioStream; import org.schabi.newpipe.extractor.stream.Description; +import org.schabi.newpipe.extractor.stream.StreamSegment; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -123,6 +125,23 @@ public class BandcampRadioStreamExtractor extends BandcampStreamExtractor { return list; } + @Nonnull + @Override + public List getStreamSegments() throws ParsingException { + final JsonArray tracks = showInfo.getArray("tracks"); + final List segments = new ArrayList<>(tracks.size()); + for (final Object t : tracks) { + final JsonObject track = (JsonObject) t; + final StreamSegment segment = new StreamSegment( + track.getString("title"), track.getInt("timecode")); + // "track art" is the track's album cover + segment.setPreviewUrl(getImageUrl(track.getLong("track_art_id"), true)); + segment.setChannelName(track.getString("artist")); + segments.add(segment); + } + return segments; + } + @Nonnull @Override public String getLicence() { diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamSegment.java b/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamSegment.java index 5b681073..d603cbe6 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamSegment.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamSegment.java @@ -10,6 +10,11 @@ public class StreamSegment implements Serializable { */ private String title; + /** + * The channel or creator linked to this segment + */ + private String channelName; + /** * Timestamp of the starting point in seconds */ @@ -49,6 +54,15 @@ public class StreamSegment implements Serializable { this.startTimeSeconds = startTimeSeconds; } + @Nullable + public String getChannelName() { + return channelName; + } + + public void setChannelName(@Nullable final String channelName) { + this.channelName = channelName; + } + @Nullable public String getUrl() { return url; diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampRadioStreamExtractorTest.java b/extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampRadioStreamExtractorTest.java index ac593842..1863dc3d 100644 --- a/extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampRadioStreamExtractorTest.java +++ b/extractor/src/test/java/org/schabi/newpipe/extractor/services/bandcamp/BandcampRadioStreamExtractorTest.java @@ -54,6 +54,7 @@ public class BandcampRadioStreamExtractorTest extends DefaultStreamExtractorTest @Override public StreamType expectedStreamType() { return StreamType.AUDIO_STREAM; } @Override public StreamingService expectedService() { return Bandcamp; } @Override public String expectedUploaderName() { return "Andrew Jervis"; } + @Override public int expectedStreamSegmentsCount() { return 30; } @Test(expected = ContentNotSupportedException.class) public void testGetUploaderUrl() throws ParsingException {