searchfilters: convert media_ccc to new framework
Available content filters: - All - Conferences - Events
This commit is contained in:
parent
d1bf446f1c
commit
e084338a0f
|
@ -1,9 +1,5 @@
|
|||
package org.schabi.newpipe.extractor.services.media_ccc.extractors;
|
||||
|
||||
import static org.schabi.newpipe.extractor.services.media_ccc.linkHandler.MediaCCCSearchQueryHandlerFactory.ALL;
|
||||
import static org.schabi.newpipe.extractor.services.media_ccc.linkHandler.MediaCCCSearchQueryHandlerFactory.CONFERENCES;
|
||||
import static org.schabi.newpipe.extractor.services.media_ccc.linkHandler.MediaCCCSearchQueryHandlerFactory.EVENTS;
|
||||
|
||||
import com.grack.nanojson.JsonArray;
|
||||
import com.grack.nanojson.JsonObject;
|
||||
import com.grack.nanojson.JsonParser;
|
||||
|
@ -21,8 +17,11 @@ import org.schabi.newpipe.extractor.downloader.Downloader;
|
|||
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||
import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandler;
|
||||
import org.schabi.newpipe.extractor.search.SearchExtractor;
|
||||
import org.schabi.newpipe.extractor.search.filter.FilterItem;
|
||||
import org.schabi.newpipe.extractor.services.media_ccc.extractors.infoItems.MediaCCCStreamInfoItemExtractor;
|
||||
import org.schabi.newpipe.extractor.services.media_ccc.linkHandler.MediaCCCConferencesListLinkHandlerFactory;
|
||||
import org.schabi.newpipe.extractor.services.media_ccc.search.filter.MediaCCCFilters;
|
||||
import org.schabi.newpipe.extractor.utils.Utils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
|
@ -69,17 +68,21 @@ public class MediaCCCSearchExtractor extends SearchExtractor {
|
|||
public InfoItemsPage<InfoItem> getInitialPage() {
|
||||
final MultiInfoItemsCollector searchItems = new MultiInfoItemsCollector(getServiceId());
|
||||
|
||||
if (getLinkHandler().getContentFilters().contains(CONFERENCES)
|
||||
|| getLinkHandler().getContentFilters().contains(ALL)
|
||||
|| getLinkHandler().getContentFilters().isEmpty()) {
|
||||
|
||||
final FilterItem filterItem =
|
||||
Utils.getFirstContentFilterItem(getLinkHandler());
|
||||
|
||||
if (filterItem == null
|
||||
|| filterItem.getIdentifier() == MediaCCCFilters.ID_CF_MAIN_CONFERENCES
|
||||
|| filterItem.getIdentifier() == MediaCCCFilters.ID_CF_MAIN_ALL) {
|
||||
searchConferences(getSearchString(),
|
||||
conferenceKiosk.getInitialPage().getItems(),
|
||||
searchItems);
|
||||
}
|
||||
|
||||
if (getLinkHandler().getContentFilters().contains(EVENTS)
|
||||
|| getLinkHandler().getContentFilters().contains(ALL)
|
||||
|| getLinkHandler().getContentFilters().isEmpty()) {
|
||||
if (filterItem == null
|
||||
|| filterItem.getIdentifier() == MediaCCCFilters.ID_CF_MAIN_EVENTS
|
||||
|| filterItem.getIdentifier() == MediaCCCFilters.ID_CF_MAIN_ALL) {
|
||||
final JsonArray events = doc.getArray("events");
|
||||
for (int i = 0; i < events.size(); i++) {
|
||||
// Ensure only uploaded talks are shown in the search results.
|
||||
|
@ -102,9 +105,13 @@ public class MediaCCCSearchExtractor extends SearchExtractor {
|
|||
@Override
|
||||
public void onFetchPage(@Nonnull final Downloader downloader)
|
||||
throws IOException, ExtractionException {
|
||||
if (getLinkHandler().getContentFilters().contains(EVENTS)
|
||||
|| getLinkHandler().getContentFilters().contains(ALL)
|
||||
|| getLinkHandler().getContentFilters().isEmpty()) {
|
||||
|
||||
final FilterItem filterItem =
|
||||
Utils.getFirstContentFilterItem(getLinkHandler());
|
||||
|
||||
if (filterItem == null
|
||||
|| filterItem.getIdentifier() == MediaCCCFilters.ID_CF_MAIN_EVENTS
|
||||
|| filterItem.getIdentifier() == MediaCCCFilters.ID_CF_MAIN_ALL) {
|
||||
final String site;
|
||||
final String url = getUrl();
|
||||
site = downloader.get(url, getExtractorLocalization()).responseBody();
|
||||
|
@ -114,9 +121,10 @@ public class MediaCCCSearchExtractor extends SearchExtractor {
|
|||
throw new ExtractionException("Could not parse JSON.", jpe);
|
||||
}
|
||||
}
|
||||
if (getLinkHandler().getContentFilters().contains(CONFERENCES)
|
||||
|| getLinkHandler().getContentFilters().contains(ALL)
|
||||
|| getLinkHandler().getContentFilters().isEmpty()) {
|
||||
|
||||
if (filterItem == null
|
||||
|| filterItem.getIdentifier() == MediaCCCFilters.ID_CF_MAIN_CONFERENCES
|
||||
|| filterItem.getIdentifier() == MediaCCCFilters.ID_CF_MAIN_ALL) {
|
||||
conferenceKiosk.fetchPage();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package org.schabi.newpipe.extractor.services.media_ccc.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.utils.Parser;
|
||||
|
@ -27,8 +29,8 @@ public final class MediaCCCConferenceLinkHandlerFactory extends ListLinkHandlerF
|
|||
|
||||
@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 CONFERENCE_PATH + id;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package org.schabi.newpipe.extractor.services.media_ccc.linkHandler;
|
||||
|
||||
import org.schabi.newpipe.extractor.search.filter.FilterItem;
|
||||
|
||||
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
|
||||
|
||||
|
@ -24,8 +26,8 @@ public final class MediaCCCConferencesListLinkHandlerFactory extends ListLinkHan
|
|||
|
||||
@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 "https://media.ccc.de/public/conferences";
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package org.schabi.newpipe.extractor.services.media_ccc.linkHandler;
|
||||
|
||||
import org.schabi.newpipe.extractor.search.filter.FilterItem;
|
||||
|
||||
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
|
||||
|
||||
|
@ -32,8 +34,8 @@ public final class MediaCCCLiveListLinkHandlerFactory 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 {
|
||||
// FIXME: wrong URL; should be https://streaming.media.ccc.de/{conference_slug}/{room_slug}
|
||||
return "https://media.ccc.de/live";
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package org.schabi.newpipe.extractor.services.media_ccc.linkHandler;
|
||||
|
||||
import org.schabi.newpipe.extractor.search.filter.FilterItem;
|
||||
|
||||
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
|
||||
|
||||
|
@ -32,8 +34,8 @@ public final class MediaCCCRecentListLinkHandlerFactory extends ListLinkHandlerF
|
|||
|
||||
@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 "https://media.ccc.de/recent";
|
||||
}
|
||||
|
|
|
@ -2,6 +2,8 @@ package org.schabi.newpipe.extractor.services.media_ccc.linkHandler;
|
|||
|
||||
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.media_ccc.search.filter.MediaCCCFilters;
|
||||
import org.schabi.newpipe.extractor.utils.Utils;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
|
@ -12,35 +14,18 @@ public final class MediaCCCSearchQueryHandlerFactory extends SearchQueryHandlerF
|
|||
private static final MediaCCCSearchQueryHandlerFactory INSTANCE =
|
||||
new MediaCCCSearchQueryHandlerFactory();
|
||||
|
||||
public static final String ALL = "all";
|
||||
public static final String CONFERENCES = "conferences";
|
||||
public static final String EVENTS = "events";
|
||||
|
||||
private MediaCCCSearchQueryHandlerFactory() {
|
||||
super(new MediaCCCFilters());
|
||||
}
|
||||
|
||||
public static MediaCCCSearchQueryHandlerFactory getInstance() {
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getAvailableContentFilter() {
|
||||
return new String[]{
|
||||
ALL,
|
||||
CONFERENCES,
|
||||
EVENTS
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getAvailableSortFilter() {
|
||||
return new String[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrl(final String query,
|
||||
final List<String> contentFilter,
|
||||
final String sortFilter)
|
||||
final List<FilterItem> contentFilter,
|
||||
final List<FilterItem> sortFilter)
|
||||
throws ParsingException, UnsupportedOperationException {
|
||||
try {
|
||||
return "https://media.ccc.de/public/events/search?q=" + Utils.encodeUrlUtf8(query);
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
// Created by evermind-zz 2022, licensed GNU GPL version 3 or later
|
||||
|
||||
package org.schabi.newpipe.extractor.services.media_ccc.search.filter;
|
||||
|
||||
import org.schabi.newpipe.extractor.search.filter.BaseSearchFilters;
|
||||
import org.schabi.newpipe.extractor.search.filter.FilterItem;
|
||||
|
||||
public final class MediaCCCFilters 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_CONFERENCES = 2;
|
||||
public static final int ID_CF_MAIN_EVENTS = 3;
|
||||
|
||||
public static final String ALL = "all";
|
||||
public static final String CONFERENCES = "conferences";
|
||||
public static final String EVENTS = "events";
|
||||
|
||||
@Override
|
||||
protected void init() {
|
||||
/* content filters */
|
||||
groupsFactory.addFilterItem(new FilterItem(
|
||||
ID_CF_MAIN_ALL, ALL));
|
||||
groupsFactory.addFilterItem(new FilterItem(
|
||||
ID_CF_MAIN_CONFERENCES, CONFERENCES));
|
||||
groupsFactory.addFilterItem(new FilterItem(
|
||||
ID_CF_MAIN_EVENTS, EVENTS));
|
||||
|
||||
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_CONFERENCES),
|
||||
groupsFactory.getFilterForId(ID_CF_MAIN_EVENTS),
|
||||
}, null));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue