Skip to content

Commit 44882b3

Browse files
committed
Added support for importing Soundcloud likes.
1 parent 8b9ccec commit 44882b3

9 files changed

Lines changed: 57 additions & 4 deletions

File tree

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ allprojects {
88
sourceCompatibility = JavaVersion.VERSION_11
99
targetCompatibility = JavaVersion.VERSION_11
1010

11-
version 'v0.24.6'
11+
version 'v0.24.7'
1212
group 'com.github.TeamNewPipe'
1313

1414
repositories {

extractor/src/main/java/org/schabi/newpipe/extractor/channel/tabs/ChannelTabs.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public final class ChannelTabs {
1111
public static final String CHANNELS = "channels";
1212
public static final String PLAYLISTS = "playlists";
1313
public static final String ALBUMS = "albums";
14+
public static final String LIKES = "likes";
1415

1516
private ChannelTabs() {
1617
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudParsingHelper.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
2626
import org.schabi.newpipe.extractor.services.soundcloud.extractors.SoundcloudChannelInfoItemExtractor;
2727
import org.schabi.newpipe.extractor.services.soundcloud.extractors.SoundcloudPlaylistInfoItemExtractor;
28+
import org.schabi.newpipe.extractor.services.soundcloud.extractors.SoundcloudLikesInfoItemExtractor;
2829
import org.schabi.newpipe.extractor.services.soundcloud.extractors.SoundcloudStreamInfoItemExtractor;
2930
import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector;
3031
import org.schabi.newpipe.extractor.utils.ImageSuffix;
@@ -396,6 +397,9 @@ public static String getInfoItemsFromApi(final MultiInfoItemsCollector collector
396397
case "playlist":
397398
collector.commit(new SoundcloudPlaylistInfoItemExtractor(searchResult));
398399
break;
400+
case "like":
401+
collector.commit(new SoundcloudLikesInfoItemExtractor(searchResult));
402+
break;
399403
}
400404
});
401405

extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudChannelExtractor.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ public List<ListLinkHandler> getTabs() throws ParsingException {
123123
+ SoundcloudChannelTabLinkHandlerFactory.getUrlSuffix(ChannelTabs.PLAYLISTS);
124124
final String urlAlbums = url
125125
+ SoundcloudChannelTabLinkHandlerFactory.getUrlSuffix(ChannelTabs.ALBUMS);
126+
final String urlLikes = url
127+
+ SoundcloudChannelTabLinkHandlerFactory.getUrlSuffix(ChannelTabs.LIKES);
126128
final String id = getId();
127129

128130
return List.of(
@@ -131,6 +133,8 @@ public List<ListLinkHandler> getTabs() throws ParsingException {
131133
new ListLinkHandler(urlPlaylists, urlPlaylists, id,
132134
List.of(ChannelTabs.PLAYLISTS), ""),
133135
new ListLinkHandler(urlAlbums, urlAlbums, id,
134-
List.of(ChannelTabs.ALBUMS), ""));
136+
List.of(ChannelTabs.ALBUMS), ""),
137+
new ListLinkHandler(urlLikes, urlLikes, id,
138+
List.of(ChannelTabs.LIKES), ""));
135139
}
136140
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudChannelTabExtractor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ private String getEndpoint() throws ParsingException {
3939
return "/playlists_without_albums";
4040
case ChannelTabs.ALBUMS:
4141
return "/albums";
42+
case ChannelTabs.LIKES:
43+
return "/likes";
4244
}
4345
throw new ParsingException("Unsupported tab: " + getName());
4446
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.schabi.newpipe.extractor.services.soundcloud.extractors;
2+
3+
import com.grack.nanojson.JsonObject;
4+
5+
public class SoundcloudLikesInfoItemExtractor extends SoundcloudStreamInfoItemExtractor {
6+
7+
public SoundcloudLikesInfoItemExtractor(final JsonObject itemObject) {
8+
super(itemObject.getObject("track"));
9+
}
10+
11+
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/linkHandler/SoundcloudChannelTabLinkHandlerFactory.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ public static String getUrlSuffix(final String tab) throws UnsupportedOperationE
2828
return "/sets";
2929
case ChannelTabs.ALBUMS:
3030
return "/albums";
31+
case ChannelTabs.LIKES:
32+
return "/likes";
3133
}
3234
throw new UnsupportedTabException(tab);
3335
}
@@ -56,6 +58,7 @@ public String[] getAvailableContentFilter() {
5658
ChannelTabs.TRACKS,
5759
ChannelTabs.PLAYLISTS,
5860
ChannelTabs.ALBUMS,
61+
ChannelTabs.LIKES,
5962
};
6063
}
6164
}

extractor/src/test/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudChannelExtractorTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public void testVerified() throws Exception {
9999
@Override
100100
public void testTabs() throws Exception {
101101
assertTabsContain(extractor.getTabs(), ChannelTabs.TRACKS, ChannelTabs.PLAYLISTS,
102-
ChannelTabs.ALBUMS);
102+
ChannelTabs.ALBUMS, ChannelTabs.LIKES);
103103
}
104104

105105
@Test
@@ -187,7 +187,7 @@ public void testVerified() throws Exception {
187187
@Override
188188
public void testTabs() throws Exception {
189189
assertTabsContain(extractor.getTabs(), ChannelTabs.TRACKS, ChannelTabs.PLAYLISTS,
190-
ChannelTabs.ALBUMS);
190+
ChannelTabs.ALBUMS, ChannelTabs.LIKES);
191191
}
192192

193193
@Test

extractor/src/test/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudChannelTabExtractorTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,32 @@ static void setUp() throws IOException, ExtractionException {
9494
@Override public InfoItem.InfoType expectedInfoItemType() { return InfoItem.InfoType.PLAYLIST; }
9595
@Override public boolean expectedHasMoreItems() { return true; }
9696
}
97+
98+
static class Likes extends DefaultListExtractorTest<ChannelTabExtractor> {
99+
private static SoundcloudChannelTabExtractor extractor;
100+
101+
@BeforeAll
102+
static void setUp() throws IOException, ExtractionException {
103+
NewPipe.init(DownloaderTestImpl.getInstance());
104+
extractor = (SoundcloudChannelTabExtractor) SoundCloud
105+
.getChannelTabExtractorFromId("30854092", ChannelTabs.LIKES);
106+
extractor.fetchPage();
107+
}
108+
109+
@Override public ChannelTabExtractor extractor() throws Exception { return extractor; }
110+
@Override public StreamingService expectedService() throws Exception { return SoundCloud; }
111+
@Override public String expectedName() throws Exception { return ChannelTabs.LIKES; }
112+
@Override public String expectedId() throws Exception { return "30854092"; }
113+
@Override public String expectedUrlContains() throws Exception { return "https://soundcloud.com/lubenitza/likes"; }
114+
@Override public String expectedOriginalUrlContains() throws Exception { return "https://soundcloud.com/lubenitza/likes"; }
115+
@Override public InfoItem.InfoType expectedInfoItemType() { return InfoItem.InfoType.STREAM; }
116+
@Override public boolean expectedHasMoreItems() { return true; }
117+
118+
@Test
119+
void testGetPageInNewExtractor() throws Exception {
120+
final ChannelTabExtractor newTabExtractor =
121+
SoundCloud.getChannelTabExtractorFromId("30854092", ChannelTabs.LIKES);
122+
defaultTestGetPageInNewExtractor(extractor, newTabExtractor);
123+
}
124+
}
97125
}

0 commit comments

Comments
 (0)