searchfilters: convert media_ccc to new framework

Available content filters:
- All
- Conferences
- Events
This commit is contained in:
evermind 2022-08-19 00:48:22 +02:00 committed by Stypox
parent d1bf446f1c
commit e084338a0f
No known key found for this signature in database
GPG Key ID: 4BDF1B40A49FDD23
7 changed files with 81 additions and 44 deletions

View File

@ -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();
}
}

View File

@ -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;
}

View File

@ -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";
}

View File

@ -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";

View File

@ -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";
}

View File

@ -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);

View File

@ -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));
}
}