|
37 | 37 | import java.nio.charset.StandardCharsets; |
38 | 38 | import java.util.Base64; |
39 | 39 | import java.util.List; |
| 40 | +import java.util.Optional; |
40 | 41 |
|
41 | 42 | import javax.annotation.Nonnull; |
42 | 43 | import javax.annotation.Nullable; |
@@ -266,52 +267,25 @@ public boolean isUploaderVerified() throws ParsingException { |
266 | 267 |
|
267 | 268 | @Override |
268 | 269 | public long getStreamCount() throws ParsingException { |
269 | | - if (isNewPlaylistInterface) { |
270 | | - final String numVideosText = |
271 | | - getTextFromObject(getPlaylistHeader().getObject("numVideosText")) |
272 | | - .orElse(null); |
273 | | - if (numVideosText != null) { |
274 | | - try { |
275 | | - return Long.parseLong(Utils.removeNonDigitCharacters(numVideosText)); |
276 | | - } catch (final NumberFormatException ignored) { |
277 | | - } |
278 | | - } |
279 | | - |
280 | | - final String firstByLineRendererText = getTextFromObject( |
281 | | - getPlaylistHeader().getArray("byline") |
282 | | - .getObject(0) |
283 | | - .getObject("text")) |
284 | | - .orElse(null); |
285 | | - |
286 | | - if (firstByLineRendererText != null) { |
287 | | - try { |
288 | | - return Long.parseLong(Utils.removeNonDigitCharacters(firstByLineRendererText)); |
289 | | - } catch (final NumberFormatException ignored) { |
290 | | - } |
291 | | - } |
292 | | - } |
293 | | - |
294 | | - // These data structures are returned in both layouts |
295 | | - final JsonArray briefStats = |
296 | | - (isNewPlaylistInterface ? getPlaylistHeader() : getPlaylistInfo()) |
297 | | - .getArray("briefStats"); |
298 | | - if (!briefStats.isEmpty()) { |
299 | | - final var briefsStatsText = getTextFromObject(briefStats.getObject(0)).orElse(null); |
300 | | - if (briefsStatsText != null) { |
301 | | - return Long.parseLong(Utils.removeNonDigitCharacters(briefsStatsText)); |
302 | | - } |
303 | | - } |
304 | | - |
305 | | - final JsonArray stats = (isNewPlaylistInterface ? getPlaylistHeader() : getPlaylistInfo()) |
306 | | - .getArray("stats"); |
307 | | - if (!stats.isEmpty()) { |
308 | | - final var statsText = getTextFromObject(stats.getObject(0)).orElse(null); |
309 | | - if (statsText != null) { |
310 | | - return Long.parseLong(Utils.removeNonDigitCharacters(statsText)); |
311 | | - } |
312 | | - } |
313 | | - |
314 | | - return ITEM_COUNT_UNKNOWN; |
| 270 | + final var header = getPlaylistHeader(); |
| 271 | + final Optional<String> count = isNewPlaylistInterface |
| 272 | + ? getTextFromObject(header.getObject("numVideosText")) |
| 273 | + .or(() -> getTextFromObject(header.getArray("byline") |
| 274 | + .getObject(0).getObject("text"))) |
| 275 | + : Optional.empty(); |
| 276 | + final var playlist = isNewPlaylistInterface ? header : getPlaylistInfo(); |
| 277 | + |
| 278 | + // "briefStats" and "stats" are returned in both layouts |
| 279 | + return count.or(() -> getTextFromObject(playlist.getArray("briefStats").getObject(0))) |
| 280 | + .or(() -> getTextFromObject(playlist.getArray("stats").getObject(0))) |
| 281 | + .map(numText -> { |
| 282 | + try { |
| 283 | + return Long.parseLong(Utils.removeNonDigitCharacters(numText)); |
| 284 | + } catch (final NumberFormatException e) { |
| 285 | + return null; |
| 286 | + } |
| 287 | + }) |
| 288 | + .orElse(ITEM_COUNT_UNKNOWN); |
315 | 289 | } |
316 | 290 |
|
317 | 291 | @Nonnull |
|
0 commit comments