Skip to content

Commit debb776

Browse files
evermind-zzStypox
authored andcommitted
searchfilters: convert bandcamp to new framework
Available content filters: - All - artists & labels - albums - tracks
1 parent e084338 commit debb776

6 files changed

Lines changed: 103 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;
@@ -50,7 +51,8 @@ public String getId(final String url) throws ParsingException, UnsupportedOperat
5051
* Uses the mobile endpoint as a "translator" from id to url
5152
*/
5253
@Override
53-
public String getUrl(final String id, final List<String> contentFilter, final String sortFilter)
54+
public String getUrl(final String id, final List<FilterItem> contentFilter,
55+
final List<FilterItem> sortFilter)
5456
throws ParsingException, UnsupportedOperationException {
5557
final JsonObject artistDetails = BandcampExtractorHelper.getArtistDetails(id);
5658
if (artistDetails.getBoolean("error")) {

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;
@@ -44,8 +46,8 @@ public boolean onAcceptUrl(final String url) throws ParsingException {
4446

4547
@Override
4648
public String getUrl(final String id,
47-
final List<String> contentFilter,
48-
final String sortFilter)
49+
final List<FilterItem> contentFilter,
50+
final List<FilterItem> sortFilter)
4951
throws ParsingException, UnsupportedOperationException {
5052
return id;
5153
}

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.exceptions.ParsingException;
68
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
79
import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper;
@@ -28,8 +30,8 @@ public static BandcampFeaturedLinkHandlerFactory getInstance() {
2830

2931
@Override
3032
public String getUrl(final String id,
31-
final List<String> contentFilter,
32-
final String sortFilter)
33+
final List<FilterItem> contentFilter,
34+
final List<FilterItem> sortFilter)
3335
throws ParsingException, UnsupportedOperationException {
3436
if (id.equals(KIOSK_FEATURED)) {
3537
return FEATURED_API_URL; // doesn't have a website

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;
@@ -30,8 +32,8 @@ public String getId(final String url) throws ParsingException, UnsupportedOperat
3032

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

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

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
import org.schabi.newpipe.extractor.exceptions.ParsingException;
88
import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandlerFactory;
9+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
10+
import org.schabi.newpipe.extractor.services.bandcamp.search.filter.BandcampFilters;
911
import org.schabi.newpipe.extractor.utils.Utils;
1012

1113
import java.io.UnsupportedEncodingException;
@@ -17,6 +19,7 @@ public final class BandcampSearchQueryHandlerFactory extends SearchQueryHandlerF
1719
= new BandcampSearchQueryHandlerFactory();
1820

1921
private BandcampSearchQueryHandlerFactory() {
22+
super(new BandcampFilters());
2023
}
2124

2225
public static BandcampSearchQueryHandlerFactory getInstance() {
@@ -25,11 +28,18 @@ public static BandcampSearchQueryHandlerFactory getInstance() {
2528

2629
@Override
2730
public String getUrl(final String query,
28-
final List<String> contentFilter,
29-
final String sortFilter)
31+
final List<FilterItem> selectedContentFilter,
32+
final List<FilterItem> selectedSortFilter)
3033
throws ParsingException, UnsupportedOperationException {
34+
35+
36+
searchFilters.setSelectedSortFilter(selectedSortFilter);
37+
searchFilters.setSelectedContentFilter(selectedContentFilter);
38+
39+
final String filterQuery = searchFilters.evaluateSelectedContentFilters();
3140
try {
32-
return BASE_URL + "/search?q=" + Utils.encodeUrlUtf8(query) + "&page=1";
41+
return BASE_URL + "/search?q=" + Utils.encodeUrlUtf8(query)
42+
+ filterQuery + "&page=1";
3343
} catch (final UnsupportedEncodingException e) {
3444
throw new ParsingException("query \"" + query + "\" could not be encoded", e);
3545
}
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.BaseSearchFilters;
6+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
7+
8+
public final class BandcampFilters extends BaseSearchFilters {
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+
// groupsFactory.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)