Skip to content

Commit c59502e

Browse files
evermind-zzInfinityLoop1308
authored andcommitted
searchfilters: convert bandcamp to new framework
Available content filters: - All - artists & labels - albums - tracks
1 parent 6769c82 commit c59502e

6 files changed

Lines changed: 117 additions & 10 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/linkHandler/BandcampChannelLinkHandlerFactory.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

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

5+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
56
import com.grack.nanojson.JsonObject;
67
import com.grack.nanojson.JsonParserException;
78
import org.schabi.newpipe.extractor.NewPipe;
@@ -40,7 +41,8 @@ public String getId(final String url) throws ParsingException {
4041
* Uses the mobile endpoint as a "translator" from id to url
4142
*/
4243
@Override
43-
public String getUrl(final String id, final List<String> contentFilter, final String sortFilter)
44+
public String getUrl(final String id, final List<FilterItem> contentFilter,
45+
final List<FilterItem> sortFilter)
4446
throws ParsingException {
4547
try {
4648
return BandcampExtractorHelper.getArtistDetails(id)

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/linkHandler/BandcampCommentsLinkHandlerFactory.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.schabi.newpipe.extractor.services.bandcamp.linkHandler;
22

3+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
4+
35
import org.schabi.newpipe.extractor.exceptions.ParsingException;
46
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
57
import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper;
@@ -30,8 +32,8 @@ public boolean onAcceptUrl(final String url) throws ParsingException {
3032

3133
@Override
3234
public String getUrl(final String id,
33-
final List<String> contentFilter,
34-
final String sortFilter) throws ParsingException {
35+
final List<FilterItem> contentFilter,
36+
final List<FilterItem> sortFilter) throws ParsingException {
3537
return id;
3638
}
3739
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/linkHandler/BandcampFeaturedLinkHandlerFactory.java

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

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

5+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
6+
57
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
68
import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper;
79
import org.schabi.newpipe.extractor.utils.Utils;
@@ -17,8 +19,8 @@ public class BandcampFeaturedLinkHandlerFactory extends ListLinkHandlerFactory {
1719

1820
@Override
1921
public String getUrl(final String id,
20-
final List<String> contentFilter,
21-
final String sortFilter) {
22+
final List<FilterItem> contentFilter,
23+
final List<FilterItem> sortFilter) {
2224
if (id.equals(KIOSK_FEATURED)) {
2325
return FEATURED_API_URL; // doesn't have a website
2426
} else if (id.equals(KIOSK_RADIO)) {

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/linkHandler/BandcampPlaylistLinkHandlerFactory.java

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

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

5+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
6+
57
import org.schabi.newpipe.extractor.exceptions.ParsingException;
68
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
79
import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper;
@@ -19,8 +21,8 @@ public String getId(final String url) throws ParsingException {
1921

2022
@Override
2123
public String getUrl(final String url,
22-
final List<String> contentFilter,
23-
final String sortFilter) throws ParsingException {
24+
final List<FilterItem> contentFilter,
25+
final List<FilterItem> sortFilter) throws ParsingException {
2426
return url;
2527
}
2628

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/linkHandler/BandcampSearchQueryHandlerFactory.java

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

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

5+
import org.schabi.newpipe.extractor.services.bandcamp.search.filter.BandcampFilters;
6+
import org.schabi.newpipe.extractor.search.filter.Filter;
7+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
8+
59
import org.schabi.newpipe.extractor.exceptions.ParsingException;
610
import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandlerFactory;
711

@@ -13,15 +17,34 @@
1317

1418
public class BandcampSearchQueryHandlerFactory extends SearchQueryHandlerFactory {
1519

20+
private final BandcampFilters searchFilters = new BandcampFilters();
1621

1722
@Override
1823
public String getUrl(final String query,
19-
final List<String> contentFilter,
20-
final String sortFilter) throws ParsingException {
24+
final List<FilterItem> selectedContentFilter,
25+
final List<FilterItem> selectedSortFilter) throws ParsingException {
26+
27+
28+
searchFilters.setSelectedSortFilter(selectedSortFilter);
29+
searchFilters.setSelectedContentFilter(selectedContentFilter);
30+
31+
final String filterQuery = searchFilters.evaluateSelectedContentFilters();
32+
2133
try {
22-
return BASE_URL + "/search?q=" + URLEncoder.encode(query, "UTF-8") + "&page=1";
34+
return BASE_URL + "/search?q=" + URLEncoder.encode(query, "UTF-8")
35+
+ filterQuery + "&page=1";
2336
} catch (final UnsupportedEncodingException e) {
2437
throw new ParsingException("query \"" + query + "\" could not be encoded", e);
2538
}
2639
}
40+
41+
@Override
42+
public Filter getAvailableContentFilter() {
43+
return searchFilters.getContentFilters();
44+
}
45+
46+
@Override
47+
public FilterItem getFilterItem(final int filterId) {
48+
return searchFilters.getFilterItem(filterId);
49+
}
2750
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package org.schabi.newpipe.extractor.services.bandcamp.search.filter;
2+
3+
import org.schabi.newpipe.extractor.search.filter.Filter;
4+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
5+
import org.schabi.newpipe.extractor.search.filter.SearchFiltersBase;
6+
7+
public final class BandcampFilters extends SearchFiltersBase {
8+
9+
private static final String ALL = "all";
10+
private static final String ARTISTS = "artists & labels";
11+
private static final String ALBUMS = "albums";
12+
private static final String TRACKS = "tracks";
13+
private static final String FANS = "fans";
14+
15+
public BandcampFilters() {
16+
init();
17+
build();
18+
}
19+
20+
@Override
21+
public String evaluateSelectedContentFilters() {
22+
if (selectedSortFilter != null) {
23+
String sortQuery = "";
24+
25+
if (selectedContentFilter != null && !selectedContentFilter.isEmpty()) {
26+
final BandcampContentFilterItem contentItem =
27+
// we assume that there is just one content filter
28+
(BandcampContentFilterItem) selectedContentFilter.get(0);
29+
if (contentItem != null) {
30+
if (!contentItem.query.isEmpty()) {
31+
sortQuery = "&" + contentItem.query;
32+
}
33+
}
34+
}
35+
return sortQuery;
36+
}
37+
return "";
38+
}
39+
40+
@Override
41+
protected void init() {
42+
/* content filters */
43+
final int contentFilterAll = builder.addFilterItem(
44+
new BandcampContentFilterItem(ALL, ""));
45+
final int contentFilterArtists = builder.addFilterItem(
46+
new BandcampContentFilterItem(ARTISTS, "item_type=b"));
47+
final int contentFilterAlbums = builder.addFilterItem(
48+
new BandcampContentFilterItem(ALBUMS, "item_type=a"));
49+
final int contentFilterTracks = builder.addFilterItem(
50+
new BandcampContentFilterItem(TRACKS, "item_type=t"));
51+
// TODO no FANS extractor in BandcampSearchExtractor -> no content filter here
52+
// final int contentFilterFans = builder.addFilterItem(
53+
// new BandcampContentFilterItem(FANS, "item_type=f"));
54+
55+
// 'ALL' this is the default search content filter.
56+
this.defaultContentFilterId = contentFilterAll;
57+
58+
/* content filters with sort filters */
59+
addContentFilter(builder.createSortGroup(null, true, new FilterItem[]{
60+
builder.getFilterForId(contentFilterAll),
61+
builder.getFilterForId(contentFilterArtists),
62+
builder.getFilterForId(contentFilterAlbums),
63+
builder.getFilterForId(contentFilterTracks),
64+
// builder.getFilterForId(contentFilterFans),
65+
}));
66+
}
67+
68+
public static class BandcampContentFilterItem extends FilterItem {
69+
private final String query;
70+
71+
public BandcampContentFilterItem(final String name, final String query) {
72+
super(Filter.ITEM_IDENTIFIER_UNKNOWN, name);
73+
this.query = query;
74+
}
75+
}
76+
}

0 commit comments

Comments
 (0)