Skip to content

Commit 1e94fe3

Browse files
committed
[YouTube] only apply course-playlists fallback for courses
1 parent 36d7bc0 commit 1e94fe3

1 file changed

Lines changed: 32 additions & 7 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubePlaylistExtractor.java

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.schabi.newpipe.extractor.stream.Description;
3232
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
3333
import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector;
34+
import org.schabi.newpipe.extractor.utils.JsonUtils;
3435
import org.schabi.newpipe.extractor.utils.Utils;
3536

3637
import java.io.IOException;
@@ -61,6 +62,7 @@ public class YoutubePlaylistExtractor extends PlaylistExtractor {
6162
private JsonObject playlistHeader;
6263

6364
private boolean isNewPlaylistInterface;
65+
private Boolean isCoursePlaylist = null;
6466

6567
public YoutubePlaylistExtractor(final StreamingService service,
6668
final ListLinkHandler linkHandler) {
@@ -175,6 +177,31 @@ private JsonObject getPlaylistHeader() {
175177
return playlistHeader;
176178
}
177179

180+
private Boolean isCoursePlaylist() {
181+
if (isCoursePlaylist == null) {
182+
try {
183+
isCoursePlaylist = JsonUtils.getArray(getPlaylistHeader(),
184+
"onDescriptionTap.commandExecutorCommand.commands")
185+
.stream()
186+
.filter(JsonObject.class::isInstance)
187+
.map(JsonObject.class::cast)
188+
.anyMatch(object -> {
189+
try {
190+
final String tag = JsonUtils.getString(object,
191+
"showEngagementPanelEndpoint.identifier.tag");
192+
return tag.equals("engagement-panel-course-metadata");
193+
} catch (final ParsingException e) {
194+
return false;
195+
}
196+
});
197+
System.out.println(isCoursePlaylist);
198+
} catch (final Exception e) {
199+
isCoursePlaylist = false;
200+
}
201+
}
202+
return isCoursePlaylist;
203+
}
204+
178205
@Nonnull
179206
@Override
180207
public String getName() throws ParsingException {
@@ -420,30 +447,28 @@ private Page getNextPageFrom(final JsonArray contents)
420447
private void collectStreamsFrom(@Nonnull final StreamInfoItemsCollector collector,
421448
@Nonnull final JsonArray videos) {
422449
final TimeAgoParser timeAgoParser = getTimeAgoParser();
450+
final PlaylistExtractor playlistExtractor = this;
423451
videos.stream()
424452
.filter(JsonObject.class::isInstance)
425453
.map(JsonObject.class::cast)
426454
.forEach(video -> {
427455
if (video.has(PLAYLIST_VIDEO_RENDERER)) {
428-
final PlaylistExtractor playlistExtractor = this;
429456
collector.commit(new YoutubeStreamInfoItemExtractor(
430457
video.getObject(PLAYLIST_VIDEO_RENDERER), timeAgoParser) {
431458
@Override
432459
public String getUploaderName() throws ParsingException {
433-
try {
434-
return super.getUploaderName();
435-
} catch (final ParsingException e) {
460+
if (isCoursePlaylist()) {
436461
return playlistExtractor.getUploaderName();
437462
}
463+
return super.getUploaderName();
438464
}
439465

440466
@Override
441467
public String getUploaderUrl() throws ParsingException {
442-
try {
443-
return super.getUploaderUrl();
444-
} catch (final ParsingException e) {
468+
if (isCoursePlaylist()) {
445469
return playlistExtractor.getUploaderUrl();
446470
}
471+
return super.getUploaderUrl();
447472
}
448473
});
449474
} else if (video.has(RICH_ITEM_RENDERER)) {

0 commit comments

Comments
 (0)