From 96e54dd5ab4a884d60114c6d4b298af409fc8c40 Mon Sep 17 00:00:00 2001 From: Isira Seneviratne Date: Sat, 20 Jul 2024 13:10:15 +0530 Subject: [PATCH 1/5] Use TreeMap in Response --- .../extractor/downloader/Response.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java b/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java index ac792dc756..7bc43bb2cb 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java @@ -5,6 +5,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.TreeMap; /** * A Data class used to hold the results from requests made by the Downloader implementation. @@ -14,17 +15,18 @@ public class Response { private final String responseMessage; private final Map> responseHeaders; private final String responseBody; - private final String latestUrl; public Response(final int responseCode, final String responseMessage, - @Nullable final Map> responseHeaders, + @Nonnull final Map> responseHeaders, @Nullable final String responseBody, @Nullable final String latestUrl) { this.responseCode = responseCode; this.responseMessage = responseMessage; - this.responseHeaders = responseHeaders == null ? Collections.emptyMap() : responseHeaders; + + this.responseHeaders = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + this.responseHeaders.putAll(responseHeaders); this.responseBody = responseBody == null ? "" : responseBody; this.latestUrl = latestUrl; @@ -71,13 +73,8 @@ public String latestUrl() { */ @Nullable public String getHeader(final String name) { - for (final Map.Entry> headerEntry : responseHeaders.entrySet()) { - final String key = headerEntry.getKey(); - if (key != null && key.equalsIgnoreCase(name) && !headerEntry.getValue().isEmpty()) { - return headerEntry.getValue().get(0); - } - } - - return null; + // Header lookup is case-insensitive + final var values = responseHeaders.getOrDefault(name, Collections.emptyList()); + return values.isEmpty() ? null : values.get(0); } } From 1933e9467b1ff5725f790eb717904281a5eb0e06 Mon Sep 17 00:00:00 2001 From: Isira Seneviratne Date: Sat, 20 Jul 2024 16:55:56 +0530 Subject: [PATCH 2/5] Reuse map if it is a SortedMap instead of creating a new one --- .../schabi/newpipe/extractor/downloader/Response.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java b/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java index 7bc43bb2cb..c95b86cad4 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java @@ -5,6 +5,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.SortedMap; import java.util.TreeMap; /** @@ -13,7 +14,7 @@ public class Response { private final int responseCode; private final String responseMessage; - private final Map> responseHeaders; + private final SortedMap> responseHeaders; private final String responseBody; private final String latestUrl; @@ -25,8 +26,12 @@ public Response(final int responseCode, this.responseCode = responseCode; this.responseMessage = responseMessage; - this.responseHeaders = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - this.responseHeaders.putAll(responseHeaders); + if (responseHeaders instanceof SortedMap) { + this.responseHeaders = (SortedMap>) responseHeaders; + } else { + this.responseHeaders = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + this.responseHeaders.putAll(responseHeaders); + } this.responseBody = responseBody == null ? "" : responseBody; this.latestUrl = latestUrl; From f44eaa41f14c8c27865abedeec9367c0faaf4c4d Mon Sep 17 00:00:00 2001 From: Isira Seneviratne Date: Wed, 19 Mar 2025 07:47:00 +0530 Subject: [PATCH 3/5] Use List.of() --- .../java/org/schabi/newpipe/extractor/downloader/Response.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java b/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java index c95b86cad4..ed442b0710 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java @@ -2,7 +2,6 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.SortedMap; @@ -79,7 +78,7 @@ public String latestUrl() { @Nullable public String getHeader(final String name) { // Header lookup is case-insensitive - final var values = responseHeaders.getOrDefault(name, Collections.emptyList()); + final var values = responseHeaders.getOrDefault(name, List.of()); return values.isEmpty() ? null : values.get(0); } } From 607c8fe2d7502261db25b16c4cac09fb215ab03c Mon Sep 17 00:00:00 2001 From: Isira Seneviratne Date: Wed, 19 Mar 2025 08:09:58 +0530 Subject: [PATCH 4/5] Add NonNull annotation --- .../java/org/schabi/newpipe/extractor/downloader/Response.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java b/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java index ed442b0710..a2ba0ece98 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java @@ -76,7 +76,7 @@ public String latestUrl() { * @return the first value assigned to this header */ @Nullable - public String getHeader(final String name) { + public String getHeader(@Nonnull final String name) { // Header lookup is case-insensitive final var values = responseHeaders.getOrDefault(name, List.of()); return values.isEmpty() ? null : values.get(0); From fa22a127ae1349845eac1c6ecf7fbf728ffa7945 Mon Sep 17 00:00:00 2001 From: TobiGr Date: Wed, 19 Mar 2025 09:36:47 +0100 Subject: [PATCH 5/5] Fix typo in Exception message --- .../services/youtube/extractors/YoutubeSuggestionExtractor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..946ad24d67 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 @@ -67,7 +67,7 @@ public List suggestionList(final String query) throws IOException, Extra final String contentTypeHeader = response.getHeader("Content-Type"); if (isNullOrEmpty(contentTypeHeader) || !contentTypeHeader.contains("application/json")) { throw new ExtractionException("Invalid response type (got \"" + contentTypeHeader - + "\", excepted a JSON response) (response code " + + "\", expected a JSON response) (response code " + response.responseCode() + ")"); }