diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/localization/Localization.java b/extractor/src/main/java/org/schabi/newpipe/extractor/localization/Localization.java index 5727150fe3..5caf5557da 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/localization/Localization.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/localization/Localization.java @@ -99,7 +99,7 @@ public boolean equals(final Object o) { return false; } - final Localization that = (Localization) o; + final var that = (Localization) o; return languageCode.equals(that.languageCode) && Objects.equals(countryCode, that.countryCode); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampChannelExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampChannelExtractor.java index ac44cbb8d8..72b7cedc54 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampChannelExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampChannelExtractor.java @@ -121,7 +121,7 @@ public boolean isVerified() throws ParsingException { @Override public List getTabs() throws ParsingException { final JsonArray discography = channelInfo.getArray("discography"); - final TabExtractorBuilder builder = new TabExtractorBuilder(discography); + final var builder = new TabExtractorBuilder(discography); final List tabs = new ArrayList<>(); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampChannelTabExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampChannelTabExtractor.java index b4110e9e93..46c71389f4 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampChannelTabExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampChannelTabExtractor.java @@ -41,8 +41,7 @@ public BandcampChannelTabExtractor(final StreamingService service, public static BandcampChannelTabExtractor fromDiscography(final StreamingService service, final ListLinkHandler linkHandler, final JsonArray discography) { - final BandcampChannelTabExtractor tabExtractor = - new BandcampChannelTabExtractor(service, linkHandler); + final var tabExtractor = new BandcampChannelTabExtractor(service, linkHandler); tabExtractor.discography = discography; return tabExtractor; } @@ -58,7 +57,7 @@ public void onFetchPage(@Nonnull final Downloader downloader) throws ParsingExce @Nonnull @Override public InfoItemsPage getInitialPage() throws IOException, ExtractionException { - final MultiInfoItemsCollector collector = new MultiInfoItemsCollector(getServiceId()); + final var collector = new MultiInfoItemsCollector(getServiceId()); for (final Object discograph : discography) { // A discograph is as an item appears in a discography diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampCommentsExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampCommentsExtractor.java index 5d38ea87de..196fbf3915 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampCommentsExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampCommentsExtractor.java @@ -50,7 +50,7 @@ public void onFetchPage(@Nonnull final Downloader downloader) public InfoItemsPage getInitialPage() throws IOException, ExtractionException { - final CommentsInfoItemsCollector collector = new CommentsInfoItemsCollector(getServiceId()); + final var collector = new CommentsInfoItemsCollector(getServiceId()); final JsonObject collectorsData = JsonUtils.toJsonObject( document.getElementById("collectors-data").attr("data-blob")); @@ -74,7 +74,7 @@ public InfoItemsPage getInitialPage() public InfoItemsPage getPage(final Page page) throws IOException, ExtractionException { - final CommentsInfoItemsCollector collector = new CommentsInfoItemsCollector(getServiceId()); + final var collector = new CommentsInfoItemsCollector(getServiceId()); final List pageIds = page.getIds(); final String trackId = pageIds.get(0); @@ -114,9 +114,7 @@ private JsonObject fetchReviewsData(final String trackId, final String token) } private String getNextPageToken(final JsonArray reviews) throws ParsingException { - return reviews.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + return reviews.streamAsJsonObjects() .map(review -> review.getString("token")) .reduce((a, b) -> b) // keep only the last element .orElseThrow(() -> new ParsingException("Could not get token")); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampFeaturedExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampFeaturedExtractor.java index cf17961970..c774052d48 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampFeaturedExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampFeaturedExtractor.java @@ -70,7 +70,7 @@ public InfoItemsPage getInitialPage() } private InfoItemsPage extractItems(final JsonArray featuredStories) { - final PlaylistInfoItemsCollector c = new PlaylistInfoItemsCollector(getServiceId()); + final var c = new PlaylistInfoItemsCollector(getServiceId()); for (int i = 0; i < featuredStories.size(); i++) { final JsonObject featuredStory = featuredStories.getObject(i); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampPlaylistExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampPlaylistExtractor.java index ee5dc92134..eff4e10116 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampPlaylistExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampPlaylistExtractor.java @@ -130,7 +130,7 @@ public Description getDescription() throws ParsingException { if (about.isEmpty() && credits.isEmpty() && license == null) { return Description.EMPTY_DESCRIPTION; } - final StringBuilder sb = new StringBuilder(); + final var sb = new StringBuilder(); if (!about.isEmpty()) { sb.append(Objects.requireNonNull(about.first()).html()); } @@ -147,7 +147,7 @@ public Description getDescription() throws ParsingException { @Override public InfoItemsPage getInitialPage() throws ExtractionException { - final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); + final var collector = new StreamInfoItemsCollector(getServiceId()); for (int i = 0; i < trackInfo.size(); i++) { final JsonObject track = trackInfo.getObject(i); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioExtractor.java index 8a8c97a8c6..6fe73df201 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioExtractor.java @@ -54,7 +54,7 @@ public String getName() throws ParsingException { @Nonnull @Override public InfoItemsPage getInitialPage() { - final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); + final var collector = new StreamInfoItemsCollector(getServiceId()); final JsonArray radioShows = json.getArray("results"); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioStreamExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioStreamExtractor.java index 2b28f03a79..f500421c4a 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioStreamExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioStreamExtractor.java @@ -155,7 +155,7 @@ public List getStreamSegments() throws ParsingException { final List segments = new ArrayList<>(tracks.size()); for (final Object t : tracks) { final JsonObject track = (JsonObject) t; - final StreamSegment segment = new StreamSegment( + final var segment = new StreamSegment( track.getString("title"), track.getInt("timecode")); // "track art" is the track's album cover segment.setPreviewUrl(getImageUrl(track.getLong("track_art_id"), true)); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampSearchExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampSearchExtractor.java index 11b20e41b1..d3bc79cf13 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampSearchExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampSearchExtractor.java @@ -51,7 +51,7 @@ public List getMetaInfo() throws ParsingException { @Override public InfoItemsPage getPage(final Page page) throws IOException, ExtractionException { - final MultiInfoItemsCollector collector = new MultiInfoItemsCollector(getServiceId()); + final var collector = new MultiInfoItemsCollector(getServiceId()); final Document d = Jsoup.parse(getDownloader().get(page.getUrl()).responseBody()); for (final Element searchResult : d.getElementsByClass("searchresult")) { diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampStreamExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampStreamExtractor.java index dfdbb56965..bd628f9103 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampStreamExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampStreamExtractor.java @@ -187,7 +187,7 @@ public StreamType getStreamType() { @Override public PlaylistInfoItemsCollector getRelatedItems() { - final PlaylistInfoItemsCollector collector = new PlaylistInfoItemsCollector(getServiceId()); + final var collector = new PlaylistInfoItemsCollector(getServiceId()); document.getElementsByClass("recommended-album") .stream() .map(BandcampRelatedPlaylistInfoItemExtractor::new) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampSuggestionExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampSuggestionExtractor.java index 935641ce11..d4758cc78e 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampSuggestionExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampSuggestionExtractor.java @@ -48,9 +48,7 @@ public List suggestionList(final String query) throws IOException, Extra .done() .getBytes(StandardCharsets.UTF_8)).responseBody()); - return fuzzyResults.getObject("auto").getArray("results").stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + return fuzzyResults.getObject("auto").getArray("results").streamAsJsonObjects() .map(jsonObject -> jsonObject.getString("name")) .distinct() .collect(Collectors.toList()); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/MediaCCCService.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/MediaCCCService.java index 78d6e4093e..d719e3fd92 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/MediaCCCService.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/MediaCCCService.java @@ -110,7 +110,7 @@ public SuggestionExtractor getSuggestionExtractor() { @Override public KioskList getKioskList() throws ExtractionException { - final KioskList list = new KioskList(this); + final var list = new KioskList(this); final ListLinkHandlerFactory h = MediaCCCConferencesListLinkHandlerFactory.getInstance(); // add kiosks here e.g.: diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCChannelTabExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCChannelTabExtractor.java index aef9daabf9..5214fb15ad 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCChannelTabExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCChannelTabExtractor.java @@ -51,13 +51,10 @@ public void onFetchPage(@Nonnull final Downloader downloader) @Nonnull @Override public ListExtractor.InfoItemsPage getInitialPage() { - final MultiInfoItemsCollector collector = - new MultiInfoItemsCollector(getServiceId()); + final var collector = new MultiInfoItemsCollector(getServiceId()); Objects.requireNonNull(conferenceData) // will surely be != null after onFetchPage .getArray("events") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .forEach(event -> collector.commit(new MediaCCCStreamInfoItemExtractor(event))); return new ListExtractor.InfoItemsPage<>(collector, null); } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCConferenceKiosk.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCConferenceKiosk.java index 3ce00ac431..55aeac5a58 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCConferenceKiosk.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCConferenceKiosk.java @@ -35,7 +35,7 @@ public MediaCCCConferenceKiosk(final StreamingService streamingService, @Override public InfoItemsPage getInitialPage() { final JsonArray conferences = doc.getArray("conferences"); - final ChannelInfoItemsCollector collector = new ChannelInfoItemsCollector(getServiceId()); + final var collector = new ChannelInfoItemsCollector(getServiceId()); for (int i = 0; i < conferences.size(); i++) { collector.commit(new MediaCCCConferenceInfoItemExtractor(conferences.getObject(i))); } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCLiveStreamExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCLiveStreamExtractor.java index 4c3edbd06c..3c02047e08 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCLiveStreamExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCLiveStreamExtractor.java @@ -145,9 +145,7 @@ public String getHlsUrl() { @Nonnull private String getManifestOfDeliveryMethodWanted(@Nonnull final String deliveryMethod) { - return room.getArray(STREAMS).stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + return room.getArray(STREAMS).streamAsJsonObjects() .map(streamObject -> streamObject.getObject(URLS)) .filter(urls -> urls.has(deliveryMethod)) .map(urls -> urls.getObject(deliveryMethod).getString(URL, "")) @@ -228,11 +226,7 @@ private static final class MediaCCCLiveStreamMapperDTO { private List getStreams( @Nonnull final String streamType, @Nonnull final Function converter) { - return room.getArray(STREAMS).stream() - // Ensure that we use only process JsonObjects - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) - // Only process streams of requested type + return room.getArray(STREAMS).streamAsJsonObjects() .filter(streamJsonObj -> streamType.equals(streamJsonObj.getString("type"))) // Flatmap Urls and ensure that we use only process JsonObjects .flatMap(streamJsonObj -> streamJsonObj.getObject(URLS).entrySet().stream() diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCLiveStreamKiosk.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCLiveStreamKiosk.java index 2d34d011a6..f5b8eafbe1 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCLiveStreamKiosk.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCLiveStreamKiosk.java @@ -35,7 +35,7 @@ public void onFetchPage(@Nonnull final Downloader downloader) @Nonnull @Override public InfoItemsPage getInitialPage() throws IOException, ExtractionException { - final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); + final var collector = new StreamInfoItemsCollector(getServiceId()); for (int c = 0; c < doc.size(); c++) { final JsonObject conference = doc.getObject(c); if (conference.getBoolean("isCurrentlyStreaming")) { diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCRecentKiosk.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCRecentKiosk.java index 6223304597..c0cc396fad 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCRecentKiosk.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCRecentKiosk.java @@ -57,9 +57,7 @@ public InfoItemsPage getInitialPage() throws IOException, Extrac .reversed(); final var collector = new StreamInfoItemsCollector(getServiceId(), comparator); - events.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + events.streamAsJsonObjects() .map(MediaCCCRecentKioskExtractor::new) // #813 / voc/voctoweb#609 -> returns faulty data -> filter it out .filter(extractor -> extractor.getDuration() > 0) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCSearchExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCSearchExtractor.java index e72d26cb22..f0d233c0d6 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCSearchExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCSearchExtractor.java @@ -67,7 +67,7 @@ public List getMetaInfo() { @Nonnull @Override public InfoItemsPage getInitialPage() { - final MultiInfoItemsCollector searchItems = new MultiInfoItemsCollector(getServiceId()); + final var searchItems = new MultiInfoItemsCollector(getServiceId()); if (getLinkHandler().getContentFilters().contains(CONFERENCES) || getLinkHandler().getContentFilters().contains(ALL) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/PeertubeParsingHelper.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/PeertubeParsingHelper.java index 3d87ad88cb..45f3a49b6f 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/PeertubeParsingHelper.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/PeertubeParsingHelper.java @@ -293,9 +293,7 @@ private static List getImagesFromAvatarsOrBanners( private static List getImagesFromAvatarOrBannerArray( @Nonnull final String baseUrl, @Nonnull final JsonArray avatarsOrBannersArray) { - return avatarsOrBannersArray.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + return avatarsOrBannersArray.streamAsJsonObjects() .filter(image -> !isNullOrEmpty(image.getString("path"))) .map(image -> new Image(baseUrl + image.getString("path"), HEIGHT_UNKNOWN, image.getInt("width", WIDTH_UNKNOWN), ResolutionLevel.UNKNOWN)) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeChannelTabExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeChannelTabExtractor.java index fe8462bf8e..3b50d34213 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeChannelTabExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeChannelTabExtractor.java @@ -71,7 +71,7 @@ public InfoItemsPage getPage(final Page page) } PeertubeParsingHelper.validate(pageJson); - final MultiInfoItemsCollector collector = new MultiInfoItemsCollector(getServiceId()); + final var collector = new MultiInfoItemsCollector(getServiceId()); collectItemsFrom(collector, pageJson, getBaseUrl()); return new InfoItemsPage<>(collector, diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeCommentsExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeCommentsExtractor.java index d7c523bcf3..6ee678c353 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeCommentsExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeCommentsExtractor.java @@ -105,7 +105,7 @@ public InfoItemsPage getPage(final Page page) } JsonObject json = null; - final CommentsInfoItemsCollector collector = new CommentsInfoItemsCollector(getServiceId()); + final var collector = new CommentsInfoItemsCollector(getServiceId()); final long total; if (page.getBody() == null) { final Response response = getDownloader().get(page.getUrl()); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubePlaylistExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubePlaylistExtractor.java index e1d05417c2..9481947258 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubePlaylistExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubePlaylistExtractor.java @@ -129,7 +129,7 @@ public InfoItemsPage getPage(final Page page) PeertubeParsingHelper.validate(json); final long total = json.getLong("total"); - final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); + final var collector = new StreamInfoItemsCollector(getServiceId()); collectItemsFrom(collector, json, getBaseUrl()); return new InfoItemsPage<>(collector, diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeSearchExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeSearchExtractor.java index 5f7ac45d49..f9e1c6f5e4 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeSearchExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeSearchExtractor.java @@ -92,7 +92,7 @@ public InfoItemsPage getPage(final Page page) PeertubeParsingHelper.validate(json); final long total = json.getLong("total"); - final MultiInfoItemsCollector collector = new MultiInfoItemsCollector(getServiceId()); + final var collector = new MultiInfoItemsCollector(getServiceId()); collectItemsFrom(collector, json, getBaseUrl(), sepia); return new InfoItemsPage<>(collector, diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamExtractor.java index bf0e02b593..3316ca6480 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamExtractor.java @@ -288,8 +288,7 @@ public StreamInfoItemsCollector getRelatedItems() throws IOException, Extraction if (Utils.isBlank(apiUrl)) { return null; } else { - final StreamInfoItemsCollector collector = new StreamInfoItemsCollector( - getServiceId()); + final var collector = new StreamInfoItemsCollector(getServiceId()); getStreamsFromApi(collector, apiUrl); return collector; } @@ -374,7 +373,7 @@ public List getFrames() throws ExtractionException { @Nonnull private String getRelatedItemsUrl(@Nonnull final List tags) { final String url = baseUrl + PeertubeSearchQueryHandlerFactory.SEARCH_ENDPOINT_VIDEOS; - final StringBuilder params = new StringBuilder(); + final var params = new StringBuilder(); params.append("start=0&count=8&sort=-createdAt"); for (final String tag : tags) { params.append("&tagsOneOf=").append(Utils.encodeUrlUtf8(tag)); @@ -481,9 +480,7 @@ private void loadSubtitles() { private void extractLiveVideoStreams() throws ParsingException { try { final JsonArray streamingPlaylists = json.getArray(STREAMING_PLAYLISTS); - streamingPlaylists.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + streamingPlaylists.streamAsJsonObjects() .map(stream -> new VideoStream.Builder() .setId(String.valueOf(stream.getInt("id", -1))) .setContent(stream.getString(PLAYLIST_URL, ""), true) @@ -507,9 +504,8 @@ private void getStreams() throws ParsingException { // HLS streams try { - for (final JsonObject playlist : json.getArray(STREAMING_PLAYLISTS).stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + for (final JsonObject playlist : json.getArray(STREAMING_PLAYLISTS) + .streamAsJsonObjects() .collect(Collectors.toList())) { getStreamsFromArray(playlist.getArray(FILES), playlist.getString(PLAYLIST_URL)); } @@ -531,9 +527,7 @@ private void getStreamsFromArray(@Nonnull final JsonArray streams, final boolean isInstanceUsingRandomUuidsForHlsStreams = !isNullOrEmpty(playlistUrl) && playlistUrl.endsWith("-master.m3u8"); - for (final JsonObject stream : streams.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + for (final JsonObject stream : streams.streamAsJsonObjects() .collect(Collectors.toList())) { // Extract stream version of streams first diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeTrendingExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeTrendingExtractor.java index df4e4b7eaa..aeceb0f7a0 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeTrendingExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeTrendingExtractor.java @@ -68,7 +68,7 @@ public InfoItemsPage getPage(final Page page) PeertubeParsingHelper.validate(json); final long total = json.getLong("total"); - final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); + final var collector = new StreamInfoItemsCollector(getServiceId()); collectItemsFrom(collector, json, getBaseUrl()); return new InfoItemsPage<>(collector, diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudParsingHelper.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudParsingHelper.java index aeff6bd363..368c4f5c40 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudParsingHelper.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudParsingHelper.java @@ -383,9 +383,7 @@ public static String getInfoItemsFromApi(final MultiInfoItemsCollector collector } responseObject.getArray("collection") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .forEach(searchResult -> { final String kind = searchResult.getString("kind", ""); switch (kind) { diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudChannelTabExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudChannelTabExtractor.java index b1df654839..c82d6a2f25 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudChannelTabExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudChannelTabExtractor.java @@ -74,7 +74,7 @@ public InfoItemsPage getPage(final Page page) throw new IllegalArgumentException("Page doesn't contain an URL"); } - final MultiInfoItemsCollector collector = new MultiInfoItemsCollector(getServiceId()); + final var collector = new MultiInfoItemsCollector(getServiceId()); final Set visitedPages = new HashSet<>(); String currentPageUrl = page.getUrl(); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudChartsExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudChartsExtractor.java index 3e2fb67433..637fc799b5 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudChartsExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudChartsExtractor.java @@ -78,7 +78,7 @@ public InfoItemsPage getPage(final Page page) throws IOException throw new IllegalArgumentException("Page doesn't contain an URL"); } - final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); + final var collector = new StreamInfoItemsCollector(getServiceId()); final String nextPageUrl = SoundcloudParsingHelper.getStreamsFromApi(collector, page.getUrl(), true); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudCommentsExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudCommentsExtractor.java index 7dba601bca..5e04f09c5d 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudCommentsExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudCommentsExtractor.java @@ -59,8 +59,7 @@ private InfoItemsPage getPage(@Nonnull final String url) throw new ParsingException("Could not parse json", e); } - final CommentsInfoItemsCollector collector = new CommentsInfoItemsCollector( - getServiceId()); + final var collector = new CommentsInfoItemsCollector(getServiceId()); collectStreamsFrom(collector, json.getArray("collection")); return new InfoItemsPage<>(collector, new Page(json.getString("next_href", null))); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudPlaylistExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudPlaylistExtractor.java index 46bba0a0d9..f938859cbf 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudPlaylistExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudPlaylistExtractor.java @@ -84,7 +84,7 @@ public List getThumbnails() { try { final InfoItemsPage infoItems = getInitialPage(); - for (final StreamInfoItem item : infoItems.getItems()) { + for (final var item : infoItems.getItems()) { final List thumbnails = item.getThumbnails(); if (!isNullOrEmpty(thumbnails)) { return thumbnails; @@ -135,14 +135,11 @@ public Description getDescription() throws ParsingException { @Nonnull @Override public InfoItemsPage getInitialPage() { - final StreamInfoItemsCollector streamInfoItemsCollector = - new StreamInfoItemsCollector(getServiceId()); + final var streamInfoItemsCollector = new StreamInfoItemsCollector(getServiceId()); final List ids = new ArrayList<>(); playlist.getArray("tracks") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .forEachOrdered(track -> { // i.e. if full info is available if (track.has("title")) { @@ -179,7 +176,7 @@ public InfoItemsPage getPage(final Page page) throws IOException final String currentPageUrl = SOUNDCLOUD_API_V2_URL + "tracks?client_id=" + SoundcloudParsingHelper.clientId() + "&ids=" + String.join(",", currentIds); - final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); + final var collector = new StreamInfoItemsCollector(getServiceId()); final String response = NewPipe.getDownloader().get(currentPageUrl, getExtractorLocalization()).responseBody(); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudSearchExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudSearchExtractor.java index b26728873d..7c5a53b02b 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudSearchExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudSearchExtractor.java @@ -119,7 +119,7 @@ public void onFetchPage(@Nonnull final Downloader downloader) throws IOException private InfoItemsCollector collectItems( final JsonArray searchCollection) { - final MultiInfoItemsCollector collector = new MultiInfoItemsCollector(getServiceId()); + final var collector = new MultiInfoItemsCollector(getServiceId()); for (final Object result : searchCollection) { if (!(result instanceof JsonObject)) { diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudStreamExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudStreamExtractor.java index 4de7114de6..0d442c1471 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudStreamExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudStreamExtractor.java @@ -204,9 +204,7 @@ private String getTranscodingUrl(final String endpointUrl) private void extractAudioStreams(@Nonnull final JsonArray transcodings, final List audioStreams) { - transcodings.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + transcodings.streamAsJsonObjects() .forEachOrdered(transcoding -> { final String url = transcoding.getString("url"); if (isNullOrEmpty(url)) { @@ -276,7 +274,7 @@ public StreamType getStreamType() { @Nullable @Override public StreamInfoItemsCollector getRelatedItems() throws IOException, ExtractionException { - final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); + final var collector = new StreamInfoItemsCollector(getServiceId()); final String apiUrl = SOUNDCLOUD_API_V2_URL + "tracks/" + Utils.encodeUrlUtf8(getId()) + "/related?client_id=" + Utils.encodeUrlUtf8(clientId()); @@ -307,7 +305,7 @@ public List getTags() { // Tags are separated by spaces, but they can be multiple words escaped by quotes " final String[] tagList = track.getString("tag_list").split(" "); final List tags = new ArrayList<>(); - final StringBuilder escapedTag = new StringBuilder(); + final var escapedTag = new StringBuilder(); boolean isEscaped = false; for (final String tag : tagList) { if (tag.startsWith("\"")) { diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudSubscriptionExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudSubscriptionExtractor.java index 6e08174e81..8cb45a2d17 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudSubscriptionExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudSubscriptionExtractor.java @@ -47,8 +47,7 @@ public List fromChannelUrl(final String channelUrl) throws IOE final String apiUrl = SOUNDCLOUD_API_V2_URL + "users/" + id + "/followings" + "?client_id=" + SoundcloudParsingHelper.clientId() + "&limit=200"; - final ChannelInfoItemsCollector collector = new ChannelInfoItemsCollector(service - .getServiceId()); + final var collector = new ChannelInfoItemsCollector(service.getServiceId()); // ± 2000 is the limit of followings on SoundCloud, so this minimum should be enough SoundcloudParsingHelper.getUsersFromApiMinItems(2500, collector, apiUrl); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeChannelHelper.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeChannelHelper.java index c3faf673f8..1ea17d853d 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeChannelHelper.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeChannelHelper.java @@ -346,9 +346,7 @@ public static ChannelHeader getChannelHeader( } else if (header.has(CAROUSEL_HEADER_RENDERER)) { return header.getObject(CAROUSEL_HEADER_RENDERER) .getArray(CONTENTS) - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .filter(item -> item.has(TOPIC_CHANNEL_DETAILS_RENDERER)) .findFirst() .map(item -> item.getObject(TOPIC_CHANNEL_DETAILS_RENDERER)) @@ -465,9 +463,7 @@ public static String getChannelId( final String navigationCarouselChannelId = channelHeader.json.getObject(HEADER) .getObject(CAROUSEL_HEADER_RENDERER) .getArray(CONTENTS) - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .filter(item -> item.has(TOPIC_CHANNEL_DETAILS_RENDERER)) .findFirst() .orElse(new JsonObject()) @@ -551,16 +547,12 @@ public static JsonObject getChannelAgeGateRenderer(@Nonnull final JsonObject jso return jsonResponse.getObject(CONTENTS) .getObject("twoColumnBrowseResultsRenderer") .getArray("tabs") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .flatMap(tab -> tab.getObject(TAB_RENDERER) .getObject(CONTENT) .getObject("sectionListRenderer") .getArray(CONTENTS) - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast)) + .streamAsJsonObjects()) .filter(content -> content.has("channelAgeGateRenderer")) .map(content -> content.getObject("channelAgeGateRenderer")) .findFirst() diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeDescriptionHelper.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeDescriptionHelper.java index afe053a358..00c6c60160 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeDescriptionHelper.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeDescriptionHelper.java @@ -146,7 +146,7 @@ static String runsToHtml( final String content = rawContent.replace('\u00a0', ' '); final Stack openRuns = new Stack<>(); final Stack tempStack = new Stack<>(); - final StringBuilder textBuilder = new StringBuilder(); + final var textBuilder = new StringBuilder(); int currentTextPos = 0; int openersIndex = 0; int closersIndex = 0; @@ -224,9 +224,7 @@ private static void addAllCommandRuns( @Nonnull final List closers ) { attributedDescription.getArray("commandRuns") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .forEach(run -> { final JsonObject navigationEndpoint = run.getObject("onTap") .getObject("innertubeCommand"); @@ -285,9 +283,7 @@ private static void addAllStyleRuns( @Nonnull final List closers ) { attributedDescription.getArray("styleRuns") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .forEach(run -> { final int start = run.getInt("startIndex", -1); final int length = run.getInt("length", 0); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeMetaInfoHelper.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeMetaInfoHelper.java index 214a13c405..51272f6948 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeMetaInfoHelper.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeMetaInfoHelper.java @@ -66,8 +66,8 @@ public static List getMetaInfo(@Nonnull final JsonArray contents) @Nonnull private static MetaInfo getInfoPanelContent(@Nonnull final JsonObject infoPanelContentRenderer) throws ParsingException { - final MetaInfo metaInfo = new MetaInfo(); - final StringBuilder sb = new StringBuilder(); + final var metaInfo = new MetaInfo(); + final var sb = new StringBuilder(); for (final Object paragraph : infoPanelContentRenderer.getArray("paragraphs")) { if (sb.length() != 0) { sb.append("
"); @@ -99,7 +99,7 @@ private static MetaInfo getInfoPanelContent(@Nonnull final JsonObject infoPanelC @Nonnull private static MetaInfo getClarificationRenderer( @Nonnull final JsonObject clarificationRenderer) throws ParsingException { - final MetaInfo metaInfo = new MetaInfo(); + final var metaInfo = new MetaInfo(); final String title = getTextFromObject(clarificationRenderer .getObject("contentTitle")); @@ -166,7 +166,7 @@ private static void getEmergencyOneboxRenderer( } for (final JsonObject r : supportRenderers) { - final MetaInfo metaInfo = new MetaInfo(); + final var metaInfo = new MetaInfo(); // usually an encouragement like "We are with you" final String title = getTextFromObjectOrThrow(r.getObject("title"), "title"); @@ -177,7 +177,7 @@ private static void getEmergencyOneboxRenderer( action = "\n" + getTextFromObjectOrThrow(r.getObject("actionText"), "action"); } else if (r.has("contacts")) { final JsonArray contacts = r.getArray("contacts"); - final StringBuilder stringBuilder = new StringBuilder(); + final var stringBuilder = new StringBuilder(); // Loop over contacts item from the first contact to the last one for (int i = 0; i < contacts.size(); i++) { stringBuilder.append("\n"); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java index b54441db5a..3cd6100e9d 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java @@ -507,9 +507,7 @@ private static void extractClientVersionFromHtmlSearchResultsPage() .getArray("serviceTrackingParams"); // Try to get version from initial data first - final Stream serviceTrackingParamsStream = serviceTrackingParams.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast); + final var serviceTrackingParamsStream = serviceTrackingParams.streamAsJsonObjects(); clientVersion = getClientVersionFromServiceTrackingParam( serviceTrackingParamsStream, "CSI", "cver"); @@ -548,9 +546,7 @@ private static String getClientVersionFromServiceTrackingParam( serviceTrackingParam.getString("service", "") .equals(serviceName)) .flatMap(serviceTrackingParam -> serviceTrackingParam.getArray("params") - .stream()) - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects()) .filter(param -> param.getString("key", "") .equals(clientVersionKey)) .map(param -> param.getString("value")) @@ -737,7 +733,7 @@ public static String getUrlFromNavigationEndpoint( } if (navigationEndpoint.has("watchEndpoint")) { - final StringBuilder url = new StringBuilder(); + final var url = new StringBuilder(); url.append("https://www.youtube.com/watch?v=") .append(navigationEndpoint.getObject("watchEndpoint") .getString(VIDEO_ID)); @@ -809,7 +805,7 @@ public static String getTextFromObject(final JsonObject textObject, final boolea return null; } - final StringBuilder textBuilder = new StringBuilder(); + final var textBuilder = new StringBuilder(); for (final Object o : runs) { final JsonObject run = (JsonObject) o; String text = run.getString("text"); @@ -969,9 +965,7 @@ public static List getThumbnailsFromInfoItem(@Nonnull final JsonObject in @Nonnull public static List getImagesFromThumbnailsArray( @Nonnull final JsonArray thumbnails) { - return thumbnails.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + return thumbnails.streamAsJsonObjects() .filter(thumbnail -> !isNullOrEmpty(thumbnail.getString("url"))) .map(thumbnail -> { final int height = thumbnail.getInt("height", Image.HEIGHT_UNKNOWN); @@ -1314,17 +1308,13 @@ public static boolean isVerified(final JsonArray badges) { public static boolean hasArtistOrVerifiedIconBadgeAttachment( @Nonnull final JsonArray attachmentRuns) { - return attachmentRuns.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + return attachmentRuns.streamAsJsonObjects() .anyMatch(attachmentRun -> attachmentRun.getObject("element") .getObject("type") .getObject("imageType") .getObject("image") .getArray("sources") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .anyMatch(source -> { final String imageName = source.getObject("clientResource") .getString("imageName"); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeChannelExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeChannelExtractor.java index 147345526a..cf1603aa2e 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeChannelExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeChannelExtractor.java @@ -395,9 +395,7 @@ private List getTabsForNonAgeRestrictedChannels() throws Parsin final String url = getUrl(); final String id = getId(); - responseTabs.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + responseTabs.streamAsJsonObjects() .filter(tab -> tab.has(TAB_RENDERER)) .map(tab -> tab.getObject(TAB_RENDERER)) .forEach(tabRenderer -> { @@ -493,9 +491,7 @@ public List getTags() throws ParsingException { return jsonResponse.getObject("microformat") .getObject("microformatDataRenderer") .getArray("tags") - .stream() - .filter(String.class::isInstance) - .map(String.class::cast) + .streamAs(String.class) .collect(Collectors.toUnmodifiableList()); } } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeChannelTabExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeChannelTabExtractor.java index 1a1f7fbbb3..de64ae8e01 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeChannelTabExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeChannelTabExtractor.java @@ -113,7 +113,7 @@ protected String getChannelName() throws ParsingException { @Nonnull @Override public InfoItemsPage getInitialPage() throws IOException, ExtractionException { - final MultiInfoItemsCollector collector = new MultiInfoItemsCollector(getServiceId()); + final var collector = new MultiInfoItemsCollector(getServiceId()); JsonArray items = new JsonArray(); final Optional tab = getTabData(); @@ -176,15 +176,13 @@ public InfoItemsPage getPage(final Page page) final List channelIds = page.getIds(); - final MultiInfoItemsCollector collector = new MultiInfoItemsCollector(getServiceId()); + final var collector = new MultiInfoItemsCollector(getServiceId()); final JsonObject ajaxJson = getJsonPostResponse("browse", page.getBody(), getExtractorLocalization()); final JsonObject sectionListContinuation = ajaxJson.getArray("onResponseReceivedActions") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .filter(jsonObject -> jsonObject.has("appendContinuationItemsAction")) .map(jsonObject -> jsonObject.getObject("appendContinuationItemsAction")) .findFirst() @@ -203,9 +201,7 @@ Optional getTabData() { return jsonResponse.getObject("contents") .getObject("twoColumnBrowseResultsRenderer") .getArray("tabs") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .filter(tab -> tab.has("tabRenderer")) .map(tab -> tab.getObject("tabRenderer")) .filter(tabRenderer -> tabRenderer.getObject("endpoint") @@ -257,9 +253,7 @@ private Optional collectItemsFrom(@Nonnull final MultiInfoItemsColle @Nonnull final VerifiedStatus verifiedStatus, @Nullable final String channelName, @Nullable final String channelUrl) { - return items.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + return items.streamAsJsonObjects() .map(item -> collectItem( collector, item, verifiedStatus, channelName, channelUrl)) .reduce(Optional.empty(), (c1, c2) -> c1.or(() -> c2)); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeCommentsEUVMInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeCommentsEUVMInfoItemExtractor.java index 96b08f9dce..db2d9df8ff 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeCommentsEUVMInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeCommentsEUVMInfoItemExtractor.java @@ -206,9 +206,7 @@ public Page getReplies() throws ParsingException { } final String continuation = commentRepliesRenderer.getArray("contents") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .map(content -> content.getObject("continuationItemRenderer", null)) .filter(Objects::nonNull) .findFirst() diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeCommentsExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeCommentsExtractor.java index 8667768a4b..b1f77c51b0 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeCommentsExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeCommentsExtractor.java @@ -77,10 +77,7 @@ private String findInitialCommentsToken(final JsonObject nextResponse) { return null; } - final String token = contents.stream() - // Only use JsonObjects - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + final String token = contents.streamAsJsonObjects() // Check if the comment-section is present .filter(jObj -> { try { @@ -126,9 +123,7 @@ private JsonArray getJsonContents(final JsonObject nextResponse) { private JsonObject getMutationPayloadFromEntityKey(@Nonnull final JsonArray mutations, @Nonnull final String commentKey) throws ParsingException { - return mutations.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + return mutations.streamAsJsonObjects() .filter(mutation -> commentKey.equals( mutation.getString("entityKey"))) .findFirst() @@ -218,8 +213,7 @@ public InfoItemsPage getPage(final Page page) private InfoItemsPage extractComments(final JsonObject jsonObject) throws ExtractionException { - final CommentsInfoItemsCollector collector = new CommentsInfoItemsCollector( - getServiceId()); + final var collector = new CommentsInfoItemsCollector(getServiceId()); collectCommentsFrom(collector, jsonObject); return new InfoItemsPage<>(collector, getNextPage(jsonObject)); } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeFeedExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeFeedExtractor.java index b46530b8f4..e3450c6098 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeFeedExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeFeedExtractor.java @@ -47,7 +47,7 @@ public void onFetchPage(@Nonnull final Downloader downloader) @Override public ListExtractor.InfoItemsPage getInitialPage() { final Elements entries = document.select("feed > entry"); - final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); + final var collector = new StreamInfoItemsCollector(getServiceId()); for (final Element entryElement : entries) { collector.commit(new YoutubeFeedInfoItemExtractor(entryElement)); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixOrPlaylistLockupInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixOrPlaylistLockupInfoItemExtractor.java index 009fc51d0c..9b90552503 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixOrPlaylistLockupInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixOrPlaylistLockupInfoItemExtractor.java @@ -114,18 +114,14 @@ public long getStreamCount() throws ParsingException { try { return Long.parseLong(Utils.removeNonDigitCharacters( thumbnailViewModel.getArray("overlays") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .filter(overlay -> overlay.has("thumbnailOverlayBadgeViewModel")) .findFirst() .orElseThrow(() -> new ParsingException( "Could not get thumbnailOverlayBadgeViewModel")) .getObject("thumbnailOverlayBadgeViewModel") .getArray("thumbnailBadges") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .filter(badge -> badge.has("thumbnailBadgeViewModel")) .findFirst() .orElseThrow(() -> diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixPlaylistExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixPlaylistExtractor.java index 1df90f967f..bee70818b1 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixPlaylistExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixPlaylistExtractor.java @@ -190,7 +190,7 @@ public Description getDescription() throws ParsingException { @Override public InfoItemsPage getInitialPage() throws IOException, ExtractionException { - final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); + final var collector = new StreamInfoItemsCollector(getServiceId()); collectStreamsFrom(collector, playlistData.getArray("contents")); final Map cookies = new HashMap<>(); @@ -238,7 +238,7 @@ public InfoItemsPage getPage(final Page page) throws IOException throw new IllegalArgumentException("Cookie '" + COOKIE_NAME + "' is missing"); } - final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); + final var collector = new StreamInfoItemsCollector(getServiceId()); // Cookie is required due to consent final var headers = getYouTubeHeaders(); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMusicSearchExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMusicSearchExtractor.java index a116eb312e..7a9988db6d 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMusicSearchExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMusicSearchExtractor.java @@ -131,9 +131,7 @@ private List getItemSectionRendererContents() { .getObject("content") .getObject("sectionListRenderer") .getArray("contents") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .map(c -> c.getObject("itemSectionRenderer")) .filter(isr -> !isr.isEmpty()) .map(isr -> isr @@ -183,7 +181,7 @@ public List getMetaInfo() { @Nonnull @Override public InfoItemsPage getInitialPage() throws IOException, ExtractionException { - final MultiInfoItemsCollector collector = new MultiInfoItemsCollector(getServiceId()); + final var collector = new MultiInfoItemsCollector(getServiceId()); final JsonArray contents = JsonUtils.getArray(JsonUtils.getArray(initialData, "contents.tabbedSearchResultsRenderer.tabs").getObject(0), @@ -212,7 +210,7 @@ public InfoItemsPage getPage(final Page page) throw new IllegalArgumentException("Page doesn't contain an URL"); } - final MultiInfoItemsCollector collector = new MultiInfoItemsCollector(getServiceId()); + final var collector = new MultiInfoItemsCollector(getServiceId()); // @formatter:off final byte[] json = JsonWriter.string() @@ -263,9 +261,7 @@ public InfoItemsPage getPage(final Page page) private void collectMusicStreamsFrom(final MultiInfoItemsCollector collector, @Nonnull final JsonArray videos) { final String searchType = getLinkHandler().getContentFilters().get(0); - videos.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + videos.streamAsJsonObjects() .map(item -> item.getObject("musicResponsiveListItemRenderer", null)) .filter(Objects::nonNull) .forEachOrdered(infoItem -> { diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubePlaylistExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubePlaylistExtractor.java index 3e2fd89d5e..d16a939ddf 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubePlaylistExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubePlaylistExtractor.java @@ -131,9 +131,7 @@ private JsonObject getUploaderInfo() throws ParsingException { uploaderInfo = browseMetadataResponse.getObject(SIDEBAR) .getObject("playlistSidebarRenderer") .getArray("items") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .filter(item -> item.getObject("playlistSidebarSecondaryInfoRenderer") .getObject("videoOwner") .has(VIDEO_OWNER_RENDERER)) @@ -153,9 +151,7 @@ private JsonObject getPlaylistInfo() throws ParsingException { playlistInfo = browseMetadataResponse.getObject(SIDEBAR) .getObject("playlistSidebarRenderer") .getArray("items") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .filter(item -> item.has("playlistSidebarPrimaryInfoRenderer")) .map(item -> item.getObject("playlistSidebarPrimaryInfoRenderer")) .findFirst() @@ -330,7 +326,7 @@ public Description getDescription() throws ParsingException { @Nonnull @Override public InfoItemsPage getInitialPage() throws IOException, ExtractionException { - final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); + final var collector = new StreamInfoItemsCollector(getServiceId()); final JsonArray initialItems = initialBrowseContinuationResponse .getArray("onResponseReceivedActions") @@ -350,7 +346,7 @@ public InfoItemsPage getPage(final Page page) throws IOException throw new IllegalArgumentException("Page doesn't contain an URL"); } - final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); + final var collector = new StreamInfoItemsCollector(getServiceId()); final JsonObject ajaxJson = getJsonPostResponse("browse", page.getBody(), getExtractorLocalization()); @@ -385,9 +381,7 @@ private Page getNextPageFrom(final JsonArray contents) // containing the continuation we need and one a playlistVotingRefreshPopupCommand continuationObject = continuationEndpoint.getObject("commandExecutorCommand") .getArray("commands") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .filter(command -> command.has("continuationCommand")) .findFirst() .orElse(new JsonObject()); @@ -420,9 +414,7 @@ private Page getNextPageFrom(final JsonArray contents) private void collectStreamsFrom(@Nonnull final StreamInfoItemsCollector collector, @Nonnull final JsonArray videos) { final TimeAgoParser timeAgoParser = getTimeAgoParser(); - videos.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + videos.streamAsJsonObjects() .forEach(video -> { if (video.has(PLAYLIST_VIDEO_RENDERER)) { collector.commit(new YoutubeStreamInfoItemExtractor( diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeSearchExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeSearchExtractor.java index e888787cf9..7213fbaa27 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeSearchExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeSearchExtractor.java @@ -161,7 +161,7 @@ public List getMetaInfo() throws ParsingException { @Nonnull @Override public InfoItemsPage getInitialPage() throws IOException, ExtractionException { - final MultiInfoItemsCollector collector = new MultiInfoItemsCollector(getServiceId()); + final var collector = new MultiInfoItemsCollector(getServiceId()); final JsonArray sections = initialData.getObject("contents") .getObject("twoColumnSearchResultsRenderer") @@ -195,7 +195,7 @@ public InfoItemsPage getPage(final Page page) throws IOException, } final Localization localization = getExtractorLocalization(); - final MultiInfoItemsCollector collector = new MultiInfoItemsCollector(getServiceId()); + final var collector = new MultiInfoItemsCollector(getServiceId()); // @formatter:off final byte[] json = JsonWriter.string(prepareDesktopJsonBuilder(localization, diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java index b89823a985..2080c454e6 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java @@ -293,23 +293,14 @@ public int getAgeLimit() throws ParsingException { .getObject("metadataRowContainer") .getObject("metadataRowContainerRenderer") .getArray("rows") - .stream() - // Only JsonObjects allowed - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .flatMap(metadataRow -> metadataRow .getObject("metadataRowRenderer") .getArray("contents") - .stream() - // Only JsonObjects allowed - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast)) + .streamAsJsonObjects()) .flatMap(content -> content .getArray("runs") - .stream() - // Only JsonObjects allowed - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast)) + .streamAsJsonObjects()) .map(run -> run.getString("text", "")) .anyMatch(rowText -> rowText.contains("Age-restricted")); @@ -420,9 +411,7 @@ public long getLikeCount() throws ParsingException { private static long parseLikeCountFromLikeButtonRenderer( @Nonnull final JsonArray topLevelButtons) throws ParsingException { String likesString = null; - final JsonObject likeToggleButtonRenderer = topLevelButtons.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + final JsonObject likeToggleButtonRenderer = topLevelButtons.streamAsJsonObjects() .map(button -> button.getObject("segmentedLikeDislikeButtonRenderer") .getObject("likeButton") .getObject("toggleButtonRenderer")) @@ -474,9 +463,7 @@ private static long parseLikeCountFromLikeButtonRenderer( private static long parseLikeCountFromLikeButtonViewModel( @Nonnull final JsonArray topLevelButtons) throws ParsingException { // Try first with the current video actions buttons data structure - final JsonObject likeToggleButtonViewModel = topLevelButtons.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + final JsonObject likeToggleButtonViewModel = topLevelButtons.streamAsJsonObjects() .map(button -> button.getObject("segmentedLikeDislikeButtonViewModel") .getObject("likeButtonViewModel") .getObject("likeButtonViewModel") @@ -769,7 +756,7 @@ public MultiInfoItemsCollector getRelatedItems() throws ExtractionException { } try { - final MultiInfoItemsCollector collector = new MultiInfoItemsCollector(getServiceId()); + final var collector = new MultiInfoItemsCollector(getServiceId()); final JsonArray results = nextResponse .getObject("contents") @@ -779,9 +766,7 @@ public MultiInfoItemsCollector getRelatedItems() throws ExtractionException { .getArray("results"); final TimeAgoParser timeAgoParser = getTimeAgoParser(); - results.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + results.streamAsJsonObjects() .map(result -> { if (result.has("compactVideoRenderer")) { return new YoutubeStreamInfoItemExtractor( @@ -1163,9 +1148,7 @@ private JsonObject getVideoInfoRenderer(@Nonnull final String videoRendererName) .getObject("results") .getObject("results") .getArray("contents") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .filter(content -> content.has(videoRendererName)) .map(content -> content.getObject(videoRendererName)) .findFirst() @@ -1345,9 +1328,7 @@ private java.util.stream.Stream getStreamsFromStreamingDataKey( return java.util.stream.Stream.empty(); } - return streamingData.getArray(streamingDataKey).stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + return streamingData.getArray(streamingDataKey).streamAsJsonObjects() .map(formatData -> { try { final ItagItem itagItem = ItagItem.getItag(formatData.getInt("itag")); @@ -1466,7 +1447,7 @@ private ItagInfo buildAndAddItagInfoToList( itagItem.setApproxDurationMs(Long.parseLong(formatData.getString("approxDurationMs", String.valueOf(APPROX_DURATION_MS_UNKNOWN)))); - final ItagInfo itagInfo = new ItagInfo(streamUrl, itagItem); + final var itagInfo = new ItagInfo(streamUrl, itagItem); if (streamType == StreamType.VIDEO_STREAM) { itagInfo.setIsUrl(!formatData.getString("type", "") @@ -1611,10 +1592,7 @@ public List getStreamSegments() throws ParsingException { } final JsonArray segmentsArray = nextResponse.getArray("engagementPanels") - .stream() - // Check if object is a JsonObject - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() // Check if the panel is the correct one .filter(panel -> "engagement-panel-macro-markers-description-chapters".equals( panel @@ -1636,9 +1614,7 @@ public List getStreamSegments() throws ParsingException { final long duration = getLength(); final List segments = new ArrayList<>(); - for (final JsonObject segmentJson : segmentsArray.stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + for (final JsonObject segmentJson : segmentsArray.streamAsJsonObjects() .map(object -> object.getObject("macroMarkersListItemRenderer")) .collect(Collectors.toList()) ) { @@ -1657,7 +1633,7 @@ public List getStreamSegments() throws ParsingException { throw new ParsingException("Could not get stream segment title."); } - final StreamSegment segment = new StreamSegment(title, startTimeSeconds); + final var segment = new StreamSegment(title, startTimeSeconds); segment.setUrl(getUrl() + "?t=" + startTimeSeconds); if (segmentJson.has("thumbnail")) { final JsonArray previewsArray = segmentJson diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamInfoItemExtractor.java index 7b4deaaa58..e71daf8f43 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamInfoItemExtractor.java @@ -151,9 +151,7 @@ public long getDuration() throws ParsingException { if (isNullOrEmpty(duration)) { final JsonObject timeOverlay = videoInfo.getArray("thumbnailOverlays") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .filter(thumbnailOverlay -> thumbnailOverlay.has("thumbnailOverlayTimeStatusRenderer")) .findFirst() @@ -448,9 +446,7 @@ public boolean isShortFormContent() throws ParsingException { if (!isShort) { final JsonObject thumbnailTimeOverlay = videoInfo.getArray("thumbnailOverlays") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .filter(thumbnailOverlay -> thumbnailOverlay.has( "thumbnailOverlayTimeStatusRenderer")) .map(thumbnailOverlay -> thumbnailOverlay.getObject( @@ -476,9 +472,7 @@ public boolean isShortFormContent() throws ParsingException { private boolean isMembersOnly() throws ParsingException { return videoInfo.getArray("badges") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .map(badge -> badge.getObject("metadataBadgeRenderer").getString("style")) .anyMatch("BADGE_STYLE_TYPE_MEMBERS_ONLY"::equals); } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeSubscriptionExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeSubscriptionExtractor.java index 852d4ebf10..9ef83abc1d 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeSubscriptionExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeSubscriptionExtractor.java @@ -104,7 +104,7 @@ public List fromJsonInputStream(@Nonnull final InputStream con public List fromZipInputStream(@Nonnull final InputStream contentInputStream) throws ExtractionException { - try (ZipInputStream zipInputStream = new ZipInputStream(contentInputStream)) { + try (var zipInputStream = new ZipInputStream(contentInputStream)) { ZipEntry zipEntry; while ((zipEntry = zipInputStream.getNextEntry()) != null) { if (zipEntry.getName().toLowerCase().endsWith(".csv")) { diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeSuggestionExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeSuggestionExtractor.java index 5304ed713f..de87ef20dd 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeSuggestionExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeSuggestionExtractor.java @@ -81,9 +81,7 @@ public List suggestionList(final String query) throws IOException, Extra final JsonArray suggestions = JsonParser.array() .from(responseBody) .getArray(1); // 0: search query, 1: search suggestions, 2: tracking data? - return suggestions.stream() - .filter(JsonArray.class::isInstance) - .map(JsonArray.class::cast) + return suggestions.streamAs(JsonArray.class) .map(suggestion -> suggestion.getString(0)) // 0 is the search suggestion .filter(suggestion -> !isBlank(suggestion)) // Filter blank suggestions .collect(Collectors.toUnmodifiableList()); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeChartsBaseKioskExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeChartsBaseKioskExtractor.java index f5618a342a..88310f2c29 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeChartsBaseKioskExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeChartsBaseKioskExtractor.java @@ -125,7 +125,7 @@ public InfoItemsPage getInitialPage() throws IOException, Extrac .getObject(0) .getArray("videoViews"); - final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); + final var collector = new StreamInfoItemsCollector(getServiceId()); videos.streamAsJsonObjects() .forEachOrdered(video -> collector.commit( diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeDesktopBaseKioskExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeDesktopBaseKioskExtractor.java index 7f1c7390da..cf6cd5df80 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeDesktopBaseKioskExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeDesktopBaseKioskExtractor.java @@ -114,9 +114,7 @@ public InfoItemsPage getPage(final Page page) final JsonArray continuationItems = continuationResponse.getArray("onResponseReceivedActions") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .filter(jsonObject -> jsonObject.has("appendContinuationItemsAction")) .map(jsonObject -> jsonObject.getObject("appendContinuationItemsAction")) .findFirst() @@ -130,13 +128,13 @@ public InfoItemsPage getPage(final Page page) private InfoItemsPage collectStreamItems( @Nonnull final JsonArray items, @Nullable final String visitorData) throws IOException, ExtractionException { - final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); + final var collector = new StreamInfoItemsCollector(getServiceId()); final Page nextPage; if (items.isEmpty()) { nextPage = null; } else { - final TimeAgoParser timeAgoParser = getTimeAgoParser(); + final var timeAgoParser = getTimeAgoParser(); items.streamAsJsonObjects() .forEachOrdered(content -> { if (content.has("richItemRenderer")) { diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeTrendingExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeTrendingExtractor.java index 4dd3c04355..f925fd0a89 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeTrendingExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeTrendingExtractor.java @@ -102,7 +102,7 @@ public String getName() throws ParsingException { @Nonnull @Override public InfoItemsPage getInitialPage() throws ParsingException { - final StreamInfoItemsCollector collector = new StreamInfoItemsCollector(getServiceId()); + final var collector = new StreamInfoItemsCollector(getServiceId()); final TimeAgoParser timeAgoParser = getTimeAgoParser(); final JsonObject tab = getTrendingTab(); final JsonObject tabContent = tab.getObject("content"); @@ -112,9 +112,7 @@ public InfoItemsPage getInitialPage() throws ParsingException { if (tabContent.has("richGridRenderer")) { tabContent.getObject("richGridRenderer") .getArray("contents") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() // Filter Trending shorts and Recently trending sections .filter(content -> content.has("richItemRenderer")) .map(content -> content.getObject("richItemRenderer") @@ -125,14 +123,10 @@ public InfoItemsPage getInitialPage() throws ParsingException { } else if (tabContent.has("sectionListRenderer")) { final Stream shelves = tabContent.getObject("sectionListRenderer") .getArray("contents") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .flatMap(content -> content.getObject("itemSectionRenderer") .getArray("contents") - .stream()) - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects()) .map(content -> content.getObject("shelfRenderer")); final Stream items; @@ -148,9 +142,7 @@ public InfoItemsPage getInitialPage() throws ParsingException { items.flatMap(shelfRenderer -> shelfRenderer.getObject("content") .getObject("expandedShelfContentsRenderer") .getArray("items") - .stream()) - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects()) .map(item -> item.getObject("videoRenderer")) .forEachOrdered(videoRenderer -> collector.commit( new YoutubeStreamInfoItemExtractor(videoRenderer, timeAgoParser))); @@ -163,9 +155,7 @@ private JsonObject getTrendingTab() throws ParsingException { return initialData.getObject("contents") .getObject("twoColumnBrowseResultsRenderer") .getArray("tabs") - .stream() - .filter(JsonObject.class::isInstance) - .map(JsonObject.class::cast) + .streamAsJsonObjects() .map(tab -> tab.getObject("tabRenderer")) .filter(tabRenderer -> tabRenderer.getBoolean("selected")) .filter(tabRenderer -> tabRenderer.has("content")) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/utils/JsonUtils.java b/extractor/src/main/java/org/schabi/newpipe/extractor/utils/JsonUtils.java index 850eba778e..2223a8c45d 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/utils/JsonUtils.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/utils/JsonUtils.java @@ -156,9 +156,6 @@ public static JsonObject getJsonData(final String html, final String variable) } public static List getStringListFromJsonArray(@Nonnull final JsonArray array) { - return array.stream() - .filter(String.class::isInstance) - .map(String.class::cast) - .collect(Collectors.toList()); + return array.streamAs(String.class).collect(Collectors.toList()); } } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/utils/RandomStringFromAlphabetGenerator.java b/extractor/src/main/java/org/schabi/newpipe/extractor/utils/RandomStringFromAlphabetGenerator.java index 09fe734abe..3282ab1a94 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/utils/RandomStringFromAlphabetGenerator.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/utils/RandomStringFromAlphabetGenerator.java @@ -27,7 +27,7 @@ public static String generate( final String alphabet, final int length, final Random random) { - final StringBuilder stringBuilder = new StringBuilder(length); + final var stringBuilder = new StringBuilder(length); for (int i = 0; i < length; i++) { stringBuilder.append(alphabet.charAt(random.nextInt(alphabet.length()))); } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/utils/Utils.java b/extractor/src/main/java/org/schabi/newpipe/extractor/utils/Utils.java index bdf6bf20a2..cfe7cf4044 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/utils/Utils.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/utils/Utils.java @@ -398,10 +398,7 @@ public static String getStringResultFromRegexArray(@Nonnull final String input, throws Parser.RegexException { for (final Pattern regex : regexes) { try { - final String result = Parser.matchGroup(regex, input, group); - if (result != null) { - return result; - } + return Parser.matchGroup(regex, input, group); // Continue if the result is null } catch (final Parser.RegexException ignored) { diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/utils/JavaScriptExtractorTest.java b/extractor/src/test/java/org/schabi/newpipe/extractor/utils/JavaScriptExtractorTest.java index ad47e3e74b..30f0a4ecae 100644 --- a/extractor/src/test/java/org/schabi/newpipe/extractor/utils/JavaScriptExtractorTest.java +++ b/extractor/src/test/java/org/schabi/newpipe/extractor/utils/JavaScriptExtractorTest.java @@ -26,7 +26,7 @@ void testJsExtractor() throws ParsingException { @Test void testEverythingJs() throws ParsingException, IOException { final File jsFile = resolveTestResource("es5.js"); - final StringBuilder contentBuilder = new StringBuilder(); + final var contentBuilder = new StringBuilder(); Files.lines(jsFile.toPath()).forEach(line -> contentBuilder.append(line).append("\n")); final String js = contentBuilder.toString(); diff --git a/timeago-generator/src/main/java/org/schabi/newpipe/timeago_generator/GeneratePatternClasses.java b/timeago-generator/src/main/java/org/schabi/newpipe/timeago_generator/GeneratePatternClasses.java index a2ef2ffa4f..80f7bd343b 100644 --- a/timeago-generator/src/main/java/org/schabi/newpipe/timeago_generator/GeneratePatternClasses.java +++ b/timeago-generator/src/main/java/org/schabi/newpipe/timeago_generator/GeneratePatternClasses.java @@ -24,7 +24,7 @@ public static void main(String[] args) throws FileNotFoundException, JsonParserE final JsonObject from = JsonParser.object().from(resourceAsStream); final TreeMap map = new TreeMap<>(from); - final StringBuilder patternMapEntries = new StringBuilder(); + final var patternMapEntries = new StringBuilder(); for (Map.Entry entry : map.entrySet()) { final String languageCode = entry.getKey().replace('-', '_'); @@ -40,7 +40,7 @@ public static void main(String[] args) throws FileNotFoundException, JsonParserE final JsonArray months = (JsonArray) unitsList.get("months"); final JsonArray years = (JsonArray) unitsList.get("years"); - final StringBuilder specialCasesString = new StringBuilder(); + final var specialCasesString = new StringBuilder(); specialCasesConstruct(ChronoUnit.SECONDS, seconds, specialCasesString); specialCasesConstruct(ChronoUnit.MINUTES, minutes, specialCasesString); specialCasesConstruct(ChronoUnit.HOURS, hours, specialCasesString); @@ -143,7 +143,7 @@ private static void specialCasesConstruct(ChronoUnit unit, JsonArray array, Stri "/**/// modify the \"unique_patterns.json\" and re-generate instead."; private static String join(List list) { - final StringBuilder toReturn = new StringBuilder(); + final var toReturn = new StringBuilder(); for (Object o : list) { toReturn.append('"').append(o).append('"').append(", ");