Skip to content

Commit d3d3c47

Browse files
committed
Fix fetching YouTube item duration
1 parent 504d099 commit d3d3c47

1 file changed

Lines changed: 24 additions & 11 deletions

File tree

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

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -151,17 +151,30 @@ public long getDuration() throws ParsingException {
151151
return -1;
152152
}
153153

154-
final List<String> potentialDurations = JsonUtils.getArray(lockupViewModel,
155-
"contentImage.thumbnailViewModel.overlays")
156-
.streamAsJsonObjects()
157-
.flatMap(jsonObject -> jsonObject
158-
.getObject("thumbnailOverlayBadgeViewModel")
159-
.getArray("thumbnailBadges")
160-
.streamAsJsonObjects())
161-
.map(jsonObject -> jsonObject
162-
.getObject("thumbnailBadgeViewModel")
163-
.getString("text"))
164-
.collect(Collectors.toList());
154+
final JsonArray overlays = JsonUtils.getArray(lockupViewModel,
155+
"contentImage.thumbnailViewModel.overlays");
156+
157+
List<JsonObject> thumbnailBadges = overlays.streamAsJsonObjects()
158+
.flatMap(jsonObject -> jsonObject
159+
.getObject("thumbnailOverlayBadgeViewModel")
160+
.getArray("thumbnailBadges")
161+
.streamAsJsonObjects())
162+
.collect(Collectors.toList());
163+
164+
if (thumbnailBadges.isEmpty()) {
165+
thumbnailBadges = overlays.streamAsJsonObjects()
166+
.flatMap(jsonObject -> jsonObject
167+
.getObject("thumbnailBottomOverlayViewModel")
168+
.getArray("badges")
169+
.streamAsJsonObjects())
170+
.collect(Collectors.toList());
171+
}
172+
173+
final List<String> potentialDurations = thumbnailBadges.stream()
174+
.map(jsonObject -> jsonObject
175+
.getObject("thumbnailBadgeViewModel")
176+
.getString("text"))
177+
.collect(Collectors.toList());
165178

166179
if (potentialDurations.isEmpty()) {
167180
throw new ParsingException("Could not get duration: No parsable durations detected");

0 commit comments

Comments
 (0)