Skip to content

Commit 24e8399

Browse files
committed
[Bandcamp] Add Java 8 streams
1 parent 349990f commit 24e8399

11 files changed

+82
-89
lines changed

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampChannelExtractor.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
package org.schabi.newpipe.extractor.services.bandcamp.extractors;
44

5+
import static org.schabi.newpipe.extractor.utils.Utils.replaceHttpWithHttps;
6+
57
import com.grack.nanojson.JsonArray;
68
import com.grack.nanojson.JsonObject;
79

@@ -19,6 +21,8 @@
1921
import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector;
2022

2123
import java.io.IOException;
24+
import java.util.Objects;
25+
import java.util.stream.Stream;
2226

2327
import javax.annotation.Nonnull;
2428

@@ -48,21 +52,18 @@ public String getBannerUrl() throws ParsingException {
4852
*/
4953
try {
5054
final String html = getDownloader()
51-
.get(channelInfo.getString("bandcamp_url")
52-
.replace("http://", "https://"))
55+
.get(replaceHttpWithHttps(channelInfo.getString("bandcamp_url")))
5356
.responseBody();
5457

55-
return Jsoup.parse(html)
56-
.getElementById("customHeader")
57-
.getElementsByTag("img")
58-
.first()
59-
.attr("src");
58+
return Stream.of(Jsoup.parse(html).getElementById("customHeader"))
59+
.filter(Objects::nonNull)
60+
.flatMap(element -> element.getElementsByTag("img").stream())
61+
.map(element -> element.attr("src"))
62+
.findFirst()
63+
.orElse(""); // no banner available
6064

6165
} catch (final IOException | ReCaptchaException e) {
6266
throw new ParsingException("Could not download artist web site", e);
63-
} catch (final NullPointerException e) {
64-
// No banner available
65-
return "";
6667
}
6768
}
6869

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampChannelInfoItemExtractor.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,7 @@ public String getUrl() throws ParsingException {
2828

2929
@Override
3030
public String getThumbnailUrl() throws ParsingException {
31-
final Element img = searchResult.getElementsByClass("art").first()
32-
.getElementsByTag("img").first();
33-
if (img != null) {
34-
return img.attr("src");
35-
} else {
36-
return null;
37-
}
31+
return BandcampExtractorHelper.getThumbnailUrlFromSearchResult(searchResult);
3832
}
3933

4034
@Override

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampCommentsInfoItemExtractor.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import org.schabi.newpipe.extractor.comments.CommentsInfoItemExtractor;
55
import org.schabi.newpipe.extractor.exceptions.ParsingException;
66

7+
import java.util.Objects;
8+
79
public class BandcampCommentsInfoItemExtractor implements CommentsInfoItemExtractor {
810

911
private final Element writing;
@@ -16,7 +18,7 @@ public BandcampCommentsInfoItemExtractor(final Element writing, final String url
1618

1719
@Override
1820
public String getName() throws ParsingException {
19-
return writing.getElementsByClass("text").first().ownText();
21+
return getCommentText();
2022
}
2123

2224
@Override
@@ -30,13 +32,21 @@ public String getThumbnailUrl() throws ParsingException {
3032
}
3133

3234
@Override
33-
public String getCommentText() {
34-
return writing.getElementsByClass("text").first().ownText();
35+
public String getCommentText() throws ParsingException {
36+
return writing.getElementsByClass("text").stream()
37+
.filter(Objects::nonNull)
38+
.map(Element::ownText)
39+
.findFirst()
40+
.orElseThrow(() -> new ParsingException("Could not get comment text"));
3541
}
3642

3743
@Override
3844
public String getUploaderName() throws ParsingException {
39-
return writing.getElementsByClass("name").first().text();
45+
return writing.getElementsByClass("name").stream()
46+
.filter(Objects::nonNull)
47+
.map(Element::text)
48+
.findFirst()
49+
.orElseThrow(() -> new ParsingException("Could not get uploader name"));
4050
}
4151

4252
@Override

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampExtractorHelper.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.grack.nanojson.JsonWriter;
99

1010
import org.jsoup.Jsoup;
11+
import org.jsoup.nodes.Element;
1112
import org.schabi.newpipe.extractor.NewPipe;
1213
import org.schabi.newpipe.extractor.exceptions.ParsingException;
1314
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
@@ -19,6 +20,8 @@
1920
import java.time.format.DateTimeFormatter;
2021
import java.util.Locale;
2122

23+
import javax.annotation.Nullable;
24+
2225
public final class BandcampExtractorHelper {
2326

2427
public static final String BASE_URL = "https://bandcamp.com";
@@ -134,4 +137,14 @@ public static DateWrapper parseDate(final String textDate) throws ParsingExcepti
134137
throw new ParsingException("Could not parse date '" + textDate + "'", e);
135138
}
136139
}
140+
141+
@Nullable
142+
public static String getThumbnailUrlFromSearchResult(final Element searchResult) {
143+
return searchResult.getElementsByClass("art").stream()
144+
.flatMap(element -> element.getElementsByTag("img").stream())
145+
.map(element -> element.attr("src"))
146+
.filter(string -> !string.isEmpty())
147+
.findFirst()
148+
.orElse(null);
149+
}
137150
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampPlaylistExtractor.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
package org.schabi.newpipe.extractor.services.bandcamp.extractors;
22

3+
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.getImageUrl;
4+
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampStreamExtractor.getAlbumInfoJson;
5+
import static org.schabi.newpipe.extractor.utils.JsonUtils.getJsonData;
6+
import static org.schabi.newpipe.extractor.utils.Utils.EMPTY_STRING;
7+
import static org.schabi.newpipe.extractor.utils.Utils.HTTPS;
8+
39
import com.grack.nanojson.JsonArray;
410
import com.grack.nanojson.JsonObject;
511
import com.grack.nanojson.JsonParserException;
12+
613
import org.jsoup.Jsoup;
714
import org.jsoup.nodes.Document;
815
import org.schabi.newpipe.extractor.Page;
@@ -17,15 +24,9 @@
1724
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
1825
import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector;
1926

20-
import javax.annotation.Nonnull;
2127
import java.io.IOException;
22-
import java.util.Objects;
2328

24-
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.getImageUrl;
25-
import static org.schabi.newpipe.extractor.utils.JsonUtils.getJsonData;
26-
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampStreamExtractor.getAlbumInfoJson;
27-
import static org.schabi.newpipe.extractor.utils.Utils.EMPTY_STRING;
28-
import static org.schabi.newpipe.extractor.utils.Utils.HTTPS;
29+
import javax.annotation.Nonnull;
2930

3031
public class BandcampPlaylistExtractor extends PlaylistExtractor {
3132

@@ -92,12 +93,10 @@ public String getUploaderName() {
9293

9394
@Override
9495
public String getUploaderAvatarUrl() {
95-
try {
96-
return Objects.requireNonNull(document.getElementsByClass("band-photo").first())
97-
.attr("src");
98-
} catch (final NullPointerException e) {
99-
return EMPTY_STRING;
100-
}
96+
return document.getElementsByClass("band-photo").stream()
97+
.map(element -> element.attr("src"))
98+
.findFirst()
99+
.orElse(EMPTY_STRING);
101100
}
102101

103102
@Override

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampPlaylistInfoItemExtractor.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,6 @@ public String getUrl() {
3838

3939
@Override
4040
public String getThumbnailUrl() {
41-
final Element img = searchResult.getElementsByClass("art").first()
42-
.getElementsByTag("img").first();
43-
if (img != null) {
44-
return img.attr("src");
45-
} else {
46-
return null;
47-
}
41+
return BandcampExtractorHelper.getThumbnailUrlFromSearchResult(searchResult);
4842
}
4943
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioStreamExtractor.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.grack.nanojson.JsonParser;
66
import com.grack.nanojson.JsonParserException;
77
import org.jsoup.Jsoup;
8+
import org.jsoup.nodes.Element;
89
import org.schabi.newpipe.extractor.MediaFormat;
910
import org.schabi.newpipe.extractor.NewPipe;
1011
import org.schabi.newpipe.extractor.StreamingService;
@@ -77,9 +78,11 @@ public String getUrl() throws ParsingException {
7778

7879
@Nonnull
7980
@Override
80-
public String getUploaderName() {
81-
return Jsoup.parse(showInfo.getString("image_caption"))
82-
.getElementsByTag("a").first().text();
81+
public String getUploaderName() throws ParsingException {
82+
return Jsoup.parse(showInfo.getString("image_caption")).getElementsByTag("a").stream()
83+
.map(Element::text)
84+
.findFirst()
85+
.orElseThrow(() -> new ParsingException("Could not get uploader name"));
8386
}
8487

8588
@Nullable

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampSearchExtractor.java

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -50,40 +50,31 @@ public List<MetaInfo> getMetaInfo() throws ParsingException {
5050

5151
public InfoItemsPage<InfoItem> getPage(final Page page)
5252
throws IOException, ExtractionException {
53-
final String html = getDownloader().get(page.getUrl()).responseBody();
54-
5553
final MultiInfoItemsCollector collector = new MultiInfoItemsCollector(getServiceId());
54+
final Document d = Jsoup.parse(getDownloader().get(page.getUrl()).responseBody());
5655

57-
58-
final Document d = Jsoup.parse(html);
59-
60-
final Elements searchResultsElements = d.getElementsByClass("searchresult");
61-
62-
for (final Element searchResult : searchResultsElements) {
63-
64-
final String type = searchResult.getElementsByClass("result-info").first()
65-
.getElementsByClass("itemtype").first().text();
56+
for (final Element searchResult : d.getElementsByClass("searchresult")) {
57+
final String type = searchResult.getElementsByClass("result-info").stream()
58+
.flatMap(element -> element.getElementsByClass("itemtype").stream())
59+
.map(Element::text)
60+
.findFirst()
61+
.orElse("");
6662

6763
switch (type) {
6864
default:
69-
continue;
7065
case "FAN":
7166
// don't display fan results
7267
break;
73-
7468
case "ARTIST":
7569
collector.commit(new BandcampChannelInfoItemExtractor(searchResult));
7670
break;
77-
7871
case "ALBUM":
7972
collector.commit(new BandcampPlaylistInfoItemExtractor(searchResult));
8073
break;
81-
8274
case "TRACK":
8375
collector.commit(new BandcampSearchStreamInfoItemExtractor(searchResult, null));
8476
break;
8577
}
86-
8778
}
8879

8980
// Count pages
@@ -92,7 +83,10 @@ public InfoItemsPage<InfoItem> getPage(final Page page)
9283
return new InfoItemsPage<>(collector, null);
9384
}
9485

95-
final Elements pages = pageLists.first().getElementsByTag("li");
86+
final Elements pages = pageLists.stream()
87+
.map(element -> element.getElementsByTag("li"))
88+
.findFirst()
89+
.orElseGet(Elements::new);
9690

9791
// Find current page
9892
int currentPage = -1;

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampStreamExtractor.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -128,11 +128,10 @@ public String getThumbnailUrl() throws ParsingException {
128128
@Nonnull
129129
@Override
130130
public String getUploaderAvatarUrl() {
131-
try {
132-
return document.getElementsByClass("band-photo").first().attr("src");
133-
} catch (final NullPointerException e) {
134-
return "";
135-
}
131+
return document.getElementsByClass("band-photo").stream()
132+
.map(element -> element.attr("src"))
133+
.findFirst()
134+
.orElse("");
136135
}
137136

138137
@Nonnull

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampSuggestionExtractor.java

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import static org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper.BASE_API_URL;
66

7-
import com.grack.nanojson.JsonArray;
87
import com.grack.nanojson.JsonObject;
98
import com.grack.nanojson.JsonParser;
109
import com.grack.nanojson.JsonParserException;
@@ -17,9 +16,9 @@
1716

1817
import java.io.IOException;
1918
import java.net.URLEncoder;
20-
import java.util.ArrayList;
2119
import java.util.Collections;
2220
import java.util.List;
21+
import java.util.stream.Collectors;
2322

2423
public class BandcampSuggestionExtractor extends SuggestionExtractor {
2524

@@ -36,20 +35,12 @@ public List<String> suggestionList(final String query) throws IOException, Extra
3635
final JsonObject fuzzyResults = JsonParser.object().from(downloader
3736
.get(AUTOCOMPLETE_URL + URLEncoder.encode(query, "UTF-8")).responseBody());
3837

39-
final JsonArray jsonArray = fuzzyResults.getObject("auto")
40-
.getArray("results");
41-
42-
final List<String> suggestions = new ArrayList<>();
43-
44-
for (final Object fuzzyResult : jsonArray) {
45-
final String res = ((JsonObject) fuzzyResult).getString("name");
46-
47-
if (!suggestions.contains(res)) {
48-
suggestions.add(res);
49-
}
50-
}
51-
52-
return suggestions;
38+
return fuzzyResults.getObject("auto").getArray("results").stream()
39+
.filter(JsonObject.class::isInstance)
40+
.map(JsonObject.class::cast)
41+
.map(jsonObject -> jsonObject.getString("name"))
42+
.distinct()
43+
.collect(Collectors.toList());
5344
} catch (final JsonParserException e) {
5445
return Collections.emptyList();
5546
}

0 commit comments

Comments
 (0)