searchfilters: convert bandcamp to new framework

Available content filters:
- All
- artists & labels
- albums
- tracks
This commit is contained in:
evermind 2022-08-19 00:49:02 +02:00 committed by Stypox
parent e084338a0f
commit debb7760cd
No known key found for this signature in database
GPG Key ID: 4BDF1B40A49FDD23
6 changed files with 103 additions and 10 deletions

View File

@ -2,6 +2,7 @@
package org.schabi.newpipe.extractor.services.bandcamp.linkHandler;
import org.schabi.newpipe.extractor.search.filter.FilterItem;
import com.grack.nanojson.JsonObject;
import com.grack.nanojson.JsonParserException;
import org.schabi.newpipe.extractor.NewPipe;
@ -50,7 +51,8 @@ public final class BandcampChannelLinkHandlerFactory extends ListLinkHandlerFact
* Uses the mobile endpoint as a "translator" from id to url
*/
@Override
public String getUrl(final String id, final List<String> contentFilter, final String sortFilter)
public String getUrl(final String id, final List<FilterItem> contentFilter,
final List<FilterItem> sortFilter)
throws ParsingException, UnsupportedOperationException {
final JsonObject artistDetails = BandcampExtractorHelper.getArtistDetails(id);
if (artistDetails.getBoolean("error")) {

View File

@ -1,5 +1,7 @@
package org.schabi.newpipe.extractor.services.bandcamp.linkHandler;
import org.schabi.newpipe.extractor.search.filter.FilterItem;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper;
@ -44,8 +46,8 @@ public final class BandcampCommentsLinkHandlerFactory extends ListLinkHandlerFac
@Override
public String getUrl(final String id,
final List<String> contentFilter,
final String sortFilter)
final List<FilterItem> contentFilter,
final List<FilterItem> sortFilter)
throws ParsingException, UnsupportedOperationException {
return id;
}

View File

@ -2,6 +2,8 @@
package org.schabi.newpipe.extractor.services.bandcamp.linkHandler;
import org.schabi.newpipe.extractor.search.filter.FilterItem;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper;
@ -28,8 +30,8 @@ public final class BandcampFeaturedLinkHandlerFactory extends ListLinkHandlerFac
@Override
public String getUrl(final String id,
final List<String> contentFilter,
final String sortFilter)
final List<FilterItem> contentFilter,
final List<FilterItem> sortFilter)
throws ParsingException, UnsupportedOperationException {
if (id.equals(KIOSK_FEATURED)) {
return FEATURED_API_URL; // doesn't have a website

View File

@ -2,6 +2,8 @@
package org.schabi.newpipe.extractor.services.bandcamp.linkHandler;
import org.schabi.newpipe.extractor.search.filter.FilterItem;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper;
@ -30,8 +32,8 @@ public final class BandcampPlaylistLinkHandlerFactory extends ListLinkHandlerFac
@Override
public String getUrl(final String url,
final List<String> contentFilter,
final String sortFilter)
final List<FilterItem> contentFilter,
final List<FilterItem> sortFilter)
throws ParsingException, UnsupportedOperationException {
return url;
}

View File

@ -6,6 +6,8 @@ import static org.schabi.newpipe.extractor.services.bandcamp.extractors.Bandcamp
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandlerFactory;
import org.schabi.newpipe.extractor.search.filter.FilterItem;
import org.schabi.newpipe.extractor.services.bandcamp.search.filter.BandcampFilters;
import org.schabi.newpipe.extractor.utils.Utils;
import java.io.UnsupportedEncodingException;
@ -17,6 +19,7 @@ public final class BandcampSearchQueryHandlerFactory extends SearchQueryHandlerF
= new BandcampSearchQueryHandlerFactory();
private BandcampSearchQueryHandlerFactory() {
super(new BandcampFilters());
}
public static BandcampSearchQueryHandlerFactory getInstance() {
@ -25,11 +28,18 @@ public final class BandcampSearchQueryHandlerFactory extends SearchQueryHandlerF
@Override
public String getUrl(final String query,
final List<String> contentFilter,
final String sortFilter)
final List<FilterItem> selectedContentFilter,
final List<FilterItem> selectedSortFilter)
throws ParsingException, UnsupportedOperationException {
searchFilters.setSelectedSortFilter(selectedSortFilter);
searchFilters.setSelectedContentFilter(selectedContentFilter);
final String filterQuery = searchFilters.evaluateSelectedContentFilters();
try {
return BASE_URL + "/search?q=" + Utils.encodeUrlUtf8(query) + "&page=1";
return BASE_URL + "/search?q=" + Utils.encodeUrlUtf8(query)
+ filterQuery + "&page=1";
} catch (final UnsupportedEncodingException e) {
throw new ParsingException("query \"" + query + "\" could not be encoded", e);
}

View File

@ -0,0 +1,75 @@
// Created by evermind-zz 2022, licensed GNU GPL version 3 or later
package org.schabi.newpipe.extractor.services.bandcamp.search.filter;
import org.schabi.newpipe.extractor.search.filter.BaseSearchFilters;
import org.schabi.newpipe.extractor.search.filter.FilterItem;
public final class BandcampFilters extends BaseSearchFilters {
public static final int ID_CF_MAIN_GRP = 0;
public static final int ID_CF_MAIN_ALL = 1;
public static final int ID_CF_MAIN_ARTISTS = 2;
public static final int ID_CF_MAIN_ALBUMS = 3;
public static final int ID_CF_MAIN_TRACKS = 4;
// public static final int ID_CF_MAIN_FANS = 5;
private static final String ALL = "all";
private static final String ARTISTS = "artists & labels";
private static final String ALBUMS = "albums";
private static final String TRACKS = "tracks";
// private static final String FANS = "fans";
@Override
public String evaluateSelectedContentFilters() {
if (selectedSortFilter != null) {
String sortQuery = "";
if (selectedContentFilter != null && !selectedContentFilter.isEmpty()) {
final BandcampContentFilterItem contentItem =
// we assume that there is just one content filter
(BandcampContentFilterItem) selectedContentFilter.get(0);
if (contentItem != null && !contentItem.query.isEmpty()) {
sortQuery = "&" + contentItem.query;
}
}
return sortQuery;
}
return "";
}
@Override
protected void init() {
/* content filters */
groupsFactory.addFilterItem(new BandcampContentFilterItem(
ID_CF_MAIN_ALL, ALL, ""));
groupsFactory.addFilterItem(new BandcampContentFilterItem(
ID_CF_MAIN_ARTISTS, ARTISTS, "item_type=b"));
groupsFactory.addFilterItem(new BandcampContentFilterItem(
ID_CF_MAIN_ALBUMS, ALBUMS, "item_type=a"));
groupsFactory.addFilterItem(new BandcampContentFilterItem(
ID_CF_MAIN_TRACKS, TRACKS, "item_type=t"));
// FIXME no FANS extractor in BandcampSearchExtractor -> no content filter here
// groupsFactory.addFilterItem(new BandcampContentFilterItem(
// ID_CF_MAIN_FANS, FANS, "item_type=f"));
addContentFilterGroup(groupsFactory.createFilterGroup(ID_CF_MAIN_GRP, null, true,
ID_CF_MAIN_ALL, new FilterItem[]{
groupsFactory.getFilterForId(ID_CF_MAIN_ALL),
groupsFactory.getFilterForId(ID_CF_MAIN_ARTISTS),
groupsFactory.getFilterForId(ID_CF_MAIN_ALBUMS),
groupsFactory.getFilterForId(ID_CF_MAIN_TRACKS),
// groupsFactory.getFilterForId(ID_CF_MAIN_FANS),
}, null));
}
public static class BandcampContentFilterItem extends FilterItem {
private final String query;
public BandcampContentFilterItem(final int identifier, final String name,
final String query) {
super(identifier, name);
this.query = query;
}
}
}