searchfilters: convert bandcamp to new framework
Available content filters: - All - artists & labels - albums - tracks
This commit is contained in:
parent
e084338a0f
commit
debb7760cd
|
@ -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")) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue