Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@
private JsonObject playlistHeader;

private boolean isNewPlaylistInterface;
private Boolean isCoursePlaylist = null;

public YoutubePlaylistExtractor(final StreamingService service,
final ListLinkHandler linkHandler) {
Expand Down Expand Up @@ -184,21 +183,6 @@
return playlistHeader;
}

private boolean isCoursePlaylist() {
if (isCoursePlaylist == null) {
isCoursePlaylist = getPlaylistHeader().getObject("onDescriptionTap")
.getObject(COMMAND_EXECUTOR_COMMAND)
.getArray("commands")
.streamAsJsonObjects()
.anyMatch(object -> "engagement-panel-course-metadata".equals(
object.getObject("showEngagementPanelEndpoint")
.getObject("identifier")
.getString("tag")));
}

return isCoursePlaylist;
}

@Nonnull
@Override
public String getName() throws ParsingException {
Expand Down Expand Up @@ -371,9 +355,18 @@
.getArray(CONTINUATION_ITEMS);
}

collectStreamsFrom(collector, initialItems);
final boolean isCoursePlaylist = getPlaylistHeader().getObject("onDescriptionTap")
.getObject(COMMAND_EXECUTOR_COMMAND)
.getArray("commands")
.streamAsJsonObjects()
.anyMatch(object -> "engagement-panel-course-metadata".equals(
object.getObject("showEngagementPanelEndpoint")
.getObject("identifier")
.getString("tag")));

collectStreamsFrom(collector, initialItems, isCoursePlaylist);

return new InfoItemsPage<>(collector, getNextPageFrom(initialItems));
return new InfoItemsPage<>(collector, getNextPageFrom(initialItems, isCoursePlaylist));
}

@Override
Expand All @@ -393,13 +386,15 @@
.getObject(APPEND_CONTINUATION_ITEMS_ACTION)
.getArray(CONTINUATION_ITEMS);

collectStreamsFrom(collector, continuation);
final boolean isCoursePlaylist = Boolean.parseBoolean(page.getId());

collectStreamsFrom(collector, continuation, isCoursePlaylist);

return new InfoItemsPage<>(collector, getNextPageFrom(continuation));
return new InfoItemsPage<>(collector, getNextPageFrom(continuation, isCoursePlaylist));
}

@Nullable
private Page getNextPageFrom(final JsonArray contents)
private Page getNextPageFrom(@Nullable final JsonArray contents, final boolean isCoursePlaylist)
throws IOException, ExtractionException {
if (isNullOrEmpty(contents)) {
return null;
Expand All @@ -407,7 +402,7 @@

final String continuation;

final JsonObject lastElement = contents.getObject(contents.size() - 1);

Check warning on line 405 in extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubePlaylistExtractor.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Fix this access on a value that can be null.

See more on https://sonarcloud.io/project/issues?id=TeamNewPipe_NewPipeExtractor&issues=AZ7_NNrMkv67atU5tuZB&open=AZ7_NNrMkv67atU5tuZB&pullRequest=1518
if (lastElement.has("continuationItemRenderer")) {
final JsonObject continuationEndpoint = lastElement
.getObject("continuationItemRenderer")
Expand Down Expand Up @@ -455,14 +450,15 @@
.done())
.getBytes(StandardCharsets.UTF_8);

return new Page(YOUTUBEI_V1_URL + "browse?" + DISABLE_PRETTY_PRINT_PARAMETER, body);
return new Page(YOUTUBEI_V1_URL + "browse?" + DISABLE_PRETTY_PRINT_PARAMETER,
String.valueOf(isCoursePlaylist), body);
}

private void collectStreamsFrom(@Nonnull final StreamInfoItemsCollector collector,
@Nonnull final JsonArray videos) {
@Nonnull final JsonArray videos,
final boolean isCoursePlaylist) {
final TimeAgoParser timeAgoParser = getTimeAgoParser();
final PlaylistExtractor playlistExtractor = this;
final boolean isCoursePlaylistResult = isCoursePlaylist();

videos.streamAsJsonObjects()
.forEach(video -> {
Expand All @@ -471,15 +467,15 @@
video.getObject(PLAYLIST_VIDEO_RENDERER), timeAgoParser) {
@Override
public String getUploaderName() throws ParsingException {
if (isCoursePlaylistResult) {
if (isCoursePlaylist) {
return playlistExtractor.getUploaderName();
}
return super.getUploaderName();
}

@Override
public String getUploaderUrl() throws ParsingException {
if (isCoursePlaylistResult) {
if (isCoursePlaylist) {
return playlistExtractor.getUploaderUrl();
}
return super.getUploaderUrl();
Expand All @@ -500,20 +496,20 @@
video.getObject(LOCKUP_VIEW_MODEL), timeAgoParser) {
@Override
public boolean isChannelOrCoursePlaylistLockupItem() {
return isCoursePlaylistResult;
return isCoursePlaylist;
}

@Override
public String getUploaderName() throws ParsingException {
if (isCoursePlaylistResult) {
if (isCoursePlaylist) {
return playlistExtractor.getUploaderName();
}
return super.getUploaderName();
}

@Override
public String getUploaderUrl() throws ParsingException {
if (isCoursePlaylistResult) {
if (isCoursePlaylist) {
return playlistExtractor.getUploaderUrl();
}
return super.getUploaderUrl();
Expand Down
Loading