Skip to content

Commit 93d8917

Browse files
committed
searchfilters: convert bandcamp to new framework
Available content filters: - All - artists & labels - albums - tracks
1 parent 65cda4b commit 93d8917

6 files changed

Lines changed: 116 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.FilterContainer;
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 FilterContainer 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: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// Created by evermind-zz 2022, licensed GNU GPL version 3 or later
2+
3+
package org.schabi.newpipe.extractor.services.bandcamp.search.filter;
4+
5+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
6+
import org.schabi.newpipe.extractor.search.filter.SearchFiltersBase;
7+
8+
public final class BandcampFilters extends SearchFiltersBase {
9+
10+
public static final int ID_CF_MAIN_GRP = 0;
11+
public static final int ID_CF_MAIN_ALL = 1;
12+
public static final int ID_CF_MAIN_ARTISTS = 2;
13+
public static final int ID_CF_MAIN_ALBUMS = 3;
14+
public static final int ID_CF_MAIN_TRACKS = 4;
15+
// public static final int ID_CF_MAIN_FANS = 5;
16+
17+
private static final String ALL = "all";
18+
private static final String ARTISTS = "artists & labels";
19+
private static final String ALBUMS = "albums";
20+
private static final String TRACKS = "tracks";
21+
// private static final String FANS = "fans";
22+
23+
@Override
24+
public String evaluateSelectedContentFilters() {
25+
if (selectedSortFilter != null) {
26+
String sortQuery = "";
27+
28+
if (selectedContentFilter != null && !selectedContentFilter.isEmpty()) {
29+
final BandcampContentFilterItem contentItem =
30+
// we assume that there is just one content filter
31+
(BandcampContentFilterItem) selectedContentFilter.get(0);
32+
if (contentItem != null && !contentItem.query.isEmpty()) {
33+
sortQuery = "&" + contentItem.query;
34+
}
35+
}
36+
return sortQuery;
37+
}
38+
return "";
39+
}
40+
41+
@Override
42+
protected void init() {
43+
/* content filters */
44+
groupsFactory.addFilterItem(new BandcampContentFilterItem(
45+
ID_CF_MAIN_ALL, ALL, ""));
46+
groupsFactory.addFilterItem(new BandcampContentFilterItem(
47+
ID_CF_MAIN_ARTISTS, ARTISTS, "item_type=b"));
48+
groupsFactory.addFilterItem(new BandcampContentFilterItem(
49+
ID_CF_MAIN_ALBUMS, ALBUMS, "item_type=a"));
50+
groupsFactory.addFilterItem(new BandcampContentFilterItem(
51+
ID_CF_MAIN_TRACKS, TRACKS, "item_type=t"));
52+
// FIXME no FANS extractor in BandcampSearchExtractor -> no content filter here
53+
// groupsFactory.addFilterItem(new BandcampContentFilterItem(
54+
// ID_CF_MAIN_FANS, FANS, "item_type=f"));
55+
56+
addContentFilterGroup(groupsFactory.createFilterGroup(ID_CF_MAIN_GRP, null, true,
57+
ID_CF_MAIN_ALL, new FilterItem[]{
58+
groupsFactory.getFilterForId(ID_CF_MAIN_ALL),
59+
groupsFactory.getFilterForId(ID_CF_MAIN_ARTISTS),
60+
groupsFactory.getFilterForId(ID_CF_MAIN_ALBUMS),
61+
groupsFactory.getFilterForId(ID_CF_MAIN_TRACKS),
62+
// builder.getFilterForId(ID_CF_MAIN_FANS),
63+
}, null));
64+
}
65+
66+
public static class BandcampContentFilterItem extends FilterItem {
67+
private final String query;
68+
69+
public BandcampContentFilterItem(final int identifier, final String name,
70+
final String query) {
71+
super(identifier, name);
72+
this.query = query;
73+
}
74+
}
75+
}

0 commit comments

Comments
 (0)