searchfilters: convert core components to new framework

This commit is contained in:
evermind 2022-08-19 00:41:00 +02:00 committed by Stypox
parent 3956e22c8e
commit b8eb1212a8
No known key found for this signature in database
GPG Key ID: 4BDF1B40A49FDD23
8 changed files with 103 additions and 63 deletions

View File

@ -1,5 +1,7 @@
package org.schabi.newpipe.extractor;
import org.schabi.newpipe.extractor.search.filter.FilterItem;
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
import java.util.List;
@ -7,16 +9,16 @@ import java.util.List;
public abstract class ListInfo<T extends InfoItem> extends Info {
private List<T> relatedItems;
private Page nextPage = null;
private final List<String> contentFilters;
private final String sortFilter;
private final List<FilterItem> contentFilters;
private final List<FilterItem> sortFilter;
public ListInfo(final int serviceId,
final String id,
final String url,
final String originalUrl,
final String name,
final List<String> contentFilter,
final String sortFilter) {
final List<FilterItem> contentFilter,
final List<FilterItem> sortFilter) {
super(serviceId, id, url, originalUrl, name);
this.contentFilters = contentFilter;
this.sortFilter = sortFilter;
@ -50,11 +52,11 @@ public abstract class ListInfo<T extends InfoItem> extends Info {
this.nextPage = page;
}
public List<String> getContentFilters() {
public List<FilterItem> getContentFilters() {
return contentFilters;
}
public String getSortFilter() {
public List<FilterItem> getSortFilter() {
return sortFilter;
}
}

View File

@ -1,5 +1,7 @@
package org.schabi.newpipe.extractor;
import org.schabi.newpipe.extractor.search.filter.FilterItem;
import org.schabi.newpipe.extractor.channel.ChannelExtractor;
import org.schabi.newpipe.extractor.channel.tabs.ChannelTabExtractor;
import org.schabi.newpipe.extractor.comments.CommentsExtractor;
@ -246,23 +248,24 @@ public abstract class StreamingService {
//////////////////////////////////////////////////////////////////////////*/
public SearchExtractor getSearchExtractor(final String query,
final List<String> contentFilter,
final String sortFilter) throws ExtractionException {
final List<FilterItem> contentFilter,
final List<FilterItem> sortFilter)
throws ExtractionException {
return getSearchExtractor(getSearchQHFactory()
.fromQuery(query, contentFilter, sortFilter));
}
public ChannelExtractor getChannelExtractor(final String id,
final List<String> contentFilter,
final String sortFilter)
final List<FilterItem> contentFilter,
final List<FilterItem> sortFilter)
throws ExtractionException {
return getChannelExtractor(getChannelLHFactory()
.fromQuery(id, contentFilter, sortFilter));
}
public PlaylistExtractor getPlaylistExtractor(final String id,
final List<String> contentFilter,
final String sortFilter)
final List<FilterItem> contentFilter,
final List<FilterItem> sortFilter)
throws ExtractionException {
return getPlaylistExtractor(getPlaylistLHFactory()
.fromQuery(id, contentFilter, sortFilter));

View File

@ -1,5 +1,7 @@
package org.schabi.newpipe.extractor.feed;
import org.schabi.newpipe.extractor.search.filter.FilterItem;
import org.schabi.newpipe.extractor.ListExtractor.InfoItemsPage;
import org.schabi.newpipe.extractor.ListInfo;
import org.schabi.newpipe.extractor.NewPipe;
@ -8,6 +10,7 @@ import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.extractor.utils.ExtractorHelper;
import java.io.IOException;
import java.util.List;
@ -18,8 +21,8 @@ public class FeedInfo extends ListInfo<StreamInfoItem> {
final String url,
final String originalUrl,
final String name,
final List<String> contentFilter,
final String sortFilter) {
final List<FilterItem> contentFilter,
final List<FilterItem> sortFilter) {
super(serviceId, id, url, originalUrl, name, contentFilter, sortFilter);
}

View File

@ -1,20 +1,22 @@
package org.schabi.newpipe.extractor.linkhandler;
import org.schabi.newpipe.extractor.search.filter.FilterItem;
import java.util.Collections;
import java.util.List;
public class ListLinkHandler extends LinkHandler {
protected final List<String> contentFilters;
protected final String sortFilter;
protected final List<FilterItem> contentFilters;
protected final List<FilterItem> sortFilter;
public ListLinkHandler(final String originalUrl,
final String url,
final String id,
final List<String> contentFilters,
final String sortFilter) {
final List<FilterItem> selectedContentFilters,
final List<FilterItem> selectedSortFilter) {
super(originalUrl, url, id);
this.contentFilters = Collections.unmodifiableList(contentFilters);
this.sortFilter = sortFilter;
this.contentFilters = Collections.unmodifiableList(selectedContentFilters);
this.sortFilter = selectedSortFilter;
}
public ListLinkHandler(final ListLinkHandler handler) {
@ -30,14 +32,14 @@ public class ListLinkHandler extends LinkHandler {
handler.url,
handler.id,
Collections.emptyList(),
"");
Collections.emptyList());
}
public List<String> getContentFilters() {
public List<FilterItem> getContentFilters() {
return contentFilters;
}
public String getSortFilter() {
public List<FilterItem> getSortFilter() {
return sortFilter;
}
}

View File

@ -1,9 +1,9 @@
package org.schabi.newpipe.extractor.linkhandler;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.search.filter.FilterItem;
import org.schabi.newpipe.extractor.utils.Utils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@ -13,12 +13,14 @@ public abstract class ListLinkHandlerFactory extends LinkHandlerFactory {
// To Override
///////////////////////////////////
public abstract String getUrl(String id, List<String> contentFilter, String sortFilter)
public abstract String getUrl(String id,
List<FilterItem> contentFilter,
List<FilterItem> sortFilter)
throws ParsingException, UnsupportedOperationException;
public String getUrl(final String id,
final List<String> contentFilter,
final String sortFilter,
final List<FilterItem> contentFilter,
final List<FilterItem> sortFilter,
final String baseUrl)
throws ParsingException, UnsupportedOperationException {
return getUrl(id, contentFilter, sortFilter);
@ -51,16 +53,16 @@ public abstract class ListLinkHandlerFactory extends LinkHandlerFactory {
return new ListLinkHandler(super.fromId(id, baseUrl));
}
public ListLinkHandler fromQuery(final String id,
final List<String> contentFilters,
final String sortFilter) throws ParsingException {
final String url = getUrl(id, contentFilters, sortFilter);
return new ListLinkHandler(url, url, id, contentFilters, sortFilter);
public ListLinkHandler fromQuery(final String query,
final List<FilterItem> contentFilter,
final List<FilterItem> sortFilter) throws ParsingException {
final String url = getUrl(query, contentFilter, sortFilter);
return new ListLinkHandler(url, url, query, contentFilter, sortFilter);
}
public ListLinkHandler fromQuery(final String id,
final List<String> contentFilters,
final String sortFilter,
final List<FilterItem> contentFilters,
final List<FilterItem> sortFilter,
final String baseUrl) throws ParsingException {
final String url = getUrl(id, contentFilters, sortFilter, baseUrl);
return new ListLinkHandler(url, url, id, contentFilters, sortFilter);
@ -74,31 +76,12 @@ public abstract class ListLinkHandlerFactory extends LinkHandlerFactory {
* @return the url corresponding to id without any filters applied
*/
public String getUrl(final String id) throws ParsingException, UnsupportedOperationException {
return getUrl(id, new ArrayList<>(0), "");
return getUrl(id, List.of(), List.of());
}
@Override
public String getUrl(final String id, final String baseUrl) throws ParsingException {
return getUrl(id, new ArrayList<>(0), "", baseUrl);
}
/**
* Will returns content filter the corresponding extractor can handle like "channels", "videos",
* "music", etc.
*
* @return filter that can be applied when building a query for getting a list
*/
public String[] getAvailableContentFilter() {
return new String[0];
}
/**
* Will returns sort filter the corresponding extractor can handle like "A-Z", "oldest first",
* "size", etc.
*
* @return filter that can be applied when building a query for getting a list
*/
public String[] getAvailableSortFilter() {
return new String[0];
public String getUrl(final String id, final String baseUrl)
throws ParsingException, UnsupportedOperationException {
return getUrl(id, List.of(), List.of(), baseUrl);
}
}

View File

@ -1,5 +1,7 @@
package org.schabi.newpipe.extractor.linkhandler;
import org.schabi.newpipe.extractor.search.filter.FilterItem;
import java.util.List;
public class SearchQueryHandler extends ListLinkHandler {
@ -7,8 +9,8 @@ public class SearchQueryHandler extends ListLinkHandler {
public SearchQueryHandler(final String originalUrl,
final String url,
final String searchString,
final List<String> contentFilters,
final String sortFilter) {
final List<FilterItem> contentFilters,
final List<FilterItem> sortFilter) {
super(originalUrl, url, searchString, contentFilters, sortFilter);
}

View File

@ -1,18 +1,27 @@
package org.schabi.newpipe.extractor.linkhandler;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.search.filter.BaseSearchFilters;
import org.schabi.newpipe.extractor.search.filter.FilterContainer;
import org.schabi.newpipe.extractor.search.filter.FilterItem;
import java.util.Collections;
import java.util.List;
public abstract class SearchQueryHandlerFactory extends ListLinkHandlerFactory {
protected final BaseSearchFilters searchFilters;
protected SearchQueryHandlerFactory(final BaseSearchFilters searchFilters) {
this.searchFilters = searchFilters;
}
///////////////////////////////////
// To Override
///////////////////////////////////
@Override
public abstract String getUrl(String query, List<String> contentFilter, String sortFilter)
public abstract String getUrl(String query, List<FilterItem> selectedContentFilter,
List<FilterItem> selectedSortFilter)
throws ParsingException, UnsupportedOperationException;
@SuppressWarnings("unused")
@ -31,13 +40,13 @@ public abstract class SearchQueryHandlerFactory extends ListLinkHandlerFactory {
@Override
public SearchQueryHandler fromQuery(final String query,
final List<String> contentFilter,
final String sortFilter) throws ParsingException {
final List<FilterItem> contentFilter,
final List<FilterItem> sortFilter) throws ParsingException {
return new SearchQueryHandler(super.fromQuery(query, contentFilter, sortFilter));
}
public SearchQueryHandler fromQuery(final String query) throws ParsingException {
return fromQuery(query, Collections.emptyList(), "");
return fromQuery(query, List.of(), List.of());
}
/**
@ -47,4 +56,25 @@ public abstract class SearchQueryHandlerFactory extends ListLinkHandlerFactory {
public boolean onAcceptUrl(final String url) {
return false;
}
/**
* {@link BaseSearchFilters#getContentFilters()}
*/
public FilterContainer getAvailableContentFilter() {
return searchFilters.getContentFilters();
}
/**
* {@link BaseSearchFilters#getContentFilterSortFilterVariant(int)}
*/
public FilterContainer getContentFilterSortFilterVariant(final int contentFilterId) {
return searchFilters.getContentFilterSortFilterVariant(contentFilterId);
}
/**
* {@link BaseSearchFilters#getFilterItem(int)}
*/
public FilterItem getFilterItem(final int filterId) {
return searchFilters.getFilterItem(filterId);
}
}

View File

@ -1,6 +1,8 @@
package org.schabi.newpipe.extractor.utils;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandler;
import org.schabi.newpipe.extractor.search.filter.FilterItem;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
@ -10,6 +12,7 @@ import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.regex.Pattern;
@ -417,4 +420,16 @@ public final class Utils {
throw new Parser.RegexException("No regex matched the input on group " + group);
}
@SuppressWarnings("unchecked")
public static <T extends FilterItem> T getFirstContentFilterItem(
final SearchQueryHandler searchQueryHandler) {
final List<FilterItem> contentFilters = searchQueryHandler.getContentFilters();
if (contentFilters != null && !contentFilters.isEmpty()) {
return (T) contentFilters.get(0);
} else {
return null;
}
}
}