Skip to content

Commit 753b250

Browse files
committed
searchfilters: convert media_ccc to new framework
Available content filters: - All - Conferences - Events
1 parent 1c87e93 commit 753b250

7 files changed

Lines changed: 94 additions & 38 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCSearchExtractor.java

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,26 @@
11
package org.schabi.newpipe.extractor.services.media_ccc.extractors;
22

3-
import static org.schabi.newpipe.extractor.services.media_ccc.linkHandler.MediaCCCSearchQueryHandlerFactory.ALL;
4-
import static org.schabi.newpipe.extractor.services.media_ccc.linkHandler.MediaCCCSearchQueryHandlerFactory.CONFERENCES;
5-
import static org.schabi.newpipe.extractor.services.media_ccc.linkHandler.MediaCCCSearchQueryHandlerFactory.EVENTS;
6-
73
import com.grack.nanojson.JsonArray;
84
import com.grack.nanojson.JsonObject;
95
import com.grack.nanojson.JsonParser;
106
import com.grack.nanojson.JsonParserException;
117

128
import org.schabi.newpipe.extractor.InfoItem;
139
import org.schabi.newpipe.extractor.MetaInfo;
10+
import org.schabi.newpipe.extractor.MultiInfoItemsCollector;
1411
import org.schabi.newpipe.extractor.Page;
1512
import org.schabi.newpipe.extractor.StreamingService;
1613
import org.schabi.newpipe.extractor.channel.ChannelInfoItem;
1714
import org.schabi.newpipe.extractor.channel.ChannelInfoItemExtractor;
1815
import org.schabi.newpipe.extractor.downloader.Downloader;
1916
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
2017
import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandler;
21-
import org.schabi.newpipe.extractor.MultiInfoItemsCollector;
2218
import org.schabi.newpipe.extractor.search.SearchExtractor;
19+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
2320
import org.schabi.newpipe.extractor.services.media_ccc.extractors.infoItems.MediaCCCStreamInfoItemExtractor;
2421
import org.schabi.newpipe.extractor.services.media_ccc.linkHandler.MediaCCCConferencesListLinkHandlerFactory;
22+
import org.schabi.newpipe.extractor.services.media_ccc.search.filter.MediaCCCFilters;
23+
import org.schabi.newpipe.extractor.utils.Utils;
2524

2625
import java.io.IOException;
2726
import java.util.Collections;
@@ -67,17 +66,21 @@ public List<MetaInfo> getMetaInfo() {
6766
public InfoItemsPage<InfoItem> getInitialPage() {
6867
final MultiInfoItemsCollector searchItems = new MultiInfoItemsCollector(getServiceId());
6968

70-
if (getLinkHandler().getContentFilters().contains(CONFERENCES)
71-
|| getLinkHandler().getContentFilters().contains(ALL)
72-
|| getLinkHandler().getContentFilters().isEmpty()) {
69+
70+
final FilterItem filterItem =
71+
Utils.getFirstContentFilterItem(getLinkHandler());
72+
73+
if (filterItem == null
74+
|| filterItem.getIdentifier() == MediaCCCFilters.ID_CF_MAIN_CONFERENCES
75+
|| filterItem.getIdentifier() == MediaCCCFilters.ID_CF_MAIN_ALL) {
7376
searchConferences(getSearchString(),
7477
conferenceKiosk.getInitialPage().getItems(),
7578
searchItems);
7679
}
7780

78-
if (getLinkHandler().getContentFilters().contains(EVENTS)
79-
|| getLinkHandler().getContentFilters().contains(ALL)
80-
|| getLinkHandler().getContentFilters().isEmpty()) {
81+
if (filterItem == null
82+
|| filterItem.getIdentifier() == MediaCCCFilters.ID_CF_MAIN_EVENTS
83+
|| filterItem.getIdentifier() == MediaCCCFilters.ID_CF_MAIN_ALL) {
8184
final JsonArray events = doc.getArray("events");
8285
for (int i = 0; i < events.size(); i++) {
8386
// Ensure only uploaded talks are shown in the search results.
@@ -100,9 +103,13 @@ public InfoItemsPage<InfoItem> getPage(final Page page) {
100103
@Override
101104
public void onFetchPage(@Nonnull final Downloader downloader)
102105
throws IOException, ExtractionException {
103-
if (getLinkHandler().getContentFilters().contains(EVENTS)
104-
|| getLinkHandler().getContentFilters().contains(ALL)
105-
|| getLinkHandler().getContentFilters().isEmpty()) {
106+
107+
final FilterItem filterItem =
108+
Utils.getFirstContentFilterItem(getLinkHandler());
109+
110+
if (filterItem == null
111+
|| filterItem.getIdentifier() == MediaCCCFilters.ID_CF_MAIN_EVENTS
112+
|| filterItem.getIdentifier() == MediaCCCFilters.ID_CF_MAIN_ALL) {
106113
final String site;
107114
final String url = getUrl();
108115
site = downloader.get(url, getExtractorLocalization()).responseBody();
@@ -112,9 +119,10 @@ public void onFetchPage(@Nonnull final Downloader downloader)
112119
throw new ExtractionException("Could not parse JSON.", jpe);
113120
}
114121
}
115-
if (getLinkHandler().getContentFilters().contains(CONFERENCES)
116-
|| getLinkHandler().getContentFilters().contains(ALL)
117-
|| getLinkHandler().getContentFilters().isEmpty()) {
122+
123+
if (filterItem == null
124+
|| filterItem.getIdentifier() == MediaCCCFilters.ID_CF_MAIN_CONFERENCES
125+
|| filterItem.getIdentifier() == MediaCCCFilters.ID_CF_MAIN_ALL) {
118126
conferenceKiosk.fetchPage();
119127
}
120128
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/linkHandler/MediaCCCConferenceLinkHandlerFactory.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.schabi.newpipe.extractor.services.media_ccc.linkHandler;
22

3+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
4+
35
import org.schabi.newpipe.extractor.exceptions.ParsingException;
46
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
57
import org.schabi.newpipe.extractor.utils.Parser;
@@ -16,8 +18,8 @@ public class MediaCCCConferenceLinkHandlerFactory extends ListLinkHandlerFactory
1618

1719
@Override
1820
public String getUrl(final String id,
19-
final List<String> contentFilter,
20-
final String sortFilter) throws ParsingException {
21+
final List<FilterItem> contentFilter,
22+
final List<FilterItem> sortFilter) throws ParsingException {
2123
return CONFERENCE_PATH + id;
2224
}
2325

extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/linkHandler/MediaCCCConferencesListLinkHandlerFactory.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.schabi.newpipe.extractor.services.media_ccc.linkHandler;
22

3+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
4+
35
import org.schabi.newpipe.extractor.exceptions.ParsingException;
46
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
57

@@ -12,8 +14,8 @@ public String getId(final String url) throws ParsingException {
1214
}
1315

1416
@Override
15-
public String getUrl(final String id, final List<String> contentFilter,
16-
final String sortFilter) throws ParsingException {
17+
public String getUrl(final String id, final List<FilterItem> contentFilter,
18+
final List<FilterItem> sortFilter) throws ParsingException {
1719
return "https://media.ccc.de/public/conferences";
1820
}
1921

extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/linkHandler/MediaCCCLiveListLinkHandlerFactory.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.schabi.newpipe.extractor.services.media_ccc.linkHandler;
22

3+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
4+
35
import org.schabi.newpipe.extractor.exceptions.ParsingException;
46
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
57

@@ -21,8 +23,8 @@ public boolean onAcceptUrl(final String url) throws ParsingException {
2123

2224
@Override
2325
public String getUrl(final String id,
24-
final List<String> contentFilter,
25-
final String sortFilter) throws ParsingException {
26+
final List<FilterItem> contentFilter,
27+
final List<FilterItem> sortFilter) throws ParsingException {
2628
// FIXME: wrong URL; should be https://streaming.media.ccc.de/{conference_slug}/{room_slug}
2729
return "https://media.ccc.de/live";
2830
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/linkHandler/MediaCCCRecentListLinkHandlerFactory.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.schabi.newpipe.extractor.services.media_ccc.linkHandler;
22

3+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
4+
35
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
46

57
import java.util.List;
@@ -20,8 +22,8 @@ public boolean onAcceptUrl(final String url) {
2022

2123
@Override
2224
public String getUrl(final String id,
23-
final List<String> contentFilter,
24-
final String sortFilter) {
25+
final List<FilterItem> contentFilter,
26+
final List<FilterItem> sortFilter) {
2527
return "https://media.ccc.de/recent";
2628
}
2729
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/linkHandler/MediaCCCSearchQueryHandlerFactory.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package org.schabi.newpipe.extractor.services.media_ccc.linkHandler;
22

3+
import org.schabi.newpipe.extractor.search.filter.FilterContainer;
4+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
5+
36
import org.schabi.newpipe.extractor.exceptions.ParsingException;
47
import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandlerFactory;
8+
import org.schabi.newpipe.extractor.services.media_ccc.search.filter.MediaCCCFilters;
59

610
import java.io.UnsupportedEncodingException;
711
import java.net.URLEncoder;
@@ -10,27 +14,22 @@
1014
import static org.schabi.newpipe.extractor.utils.Utils.UTF_8;
1115

1216
public class MediaCCCSearchQueryHandlerFactory extends SearchQueryHandlerFactory {
13-
public static final String ALL = "all";
14-
public static final String CONFERENCES = "conferences";
15-
public static final String EVENTS = "events";
17+
18+
public final MediaCCCFilters searchFilters = new MediaCCCFilters();
1619

1720
@Override
18-
public String[] getAvailableContentFilter() {
19-
return new String[]{
20-
ALL,
21-
CONFERENCES,
22-
EVENTS
23-
};
21+
public FilterContainer getAvailableContentFilter() {
22+
return searchFilters.getContentFilters();
2423
}
2524

2625
@Override
27-
public String[] getAvailableSortFilter() {
28-
return new String[0];
26+
public FilterItem getFilterItem(final int filterId) {
27+
return searchFilters.getFilterItem(filterId);
2928
}
3029

3130
@Override
32-
public String getUrl(final String query, final List<String> contentFilter,
33-
final String sortFilter) throws ParsingException {
31+
public String getUrl(final String query, final List<FilterItem> contentFilter,
32+
final List<FilterItem> sortFilter) throws ParsingException {
3433
try {
3534
return "https://media.ccc.de/public/events/search?q="
3635
+ URLEncoder.encode(query, UTF_8);
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Created by evermind-zz 2022, licensed GNU GPL version 3 or later -->
2+
3+
package org.schabi.newpipe.extractor.services.media_ccc.search.filter;
4+
5+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
6+
import org.schabi.newpipe.extractor.search.filter.SearchFiltersBase;
7+
8+
public final class MediaCCCFilters extends SearchFiltersBase {
9+
10+
public static final int ID_CF_MAIN_GRP = 0;
11+
public static final int ID_CF_MAIN_ALL = 1;
12+
public static final int ID_CF_MAIN_CONFERENCES = 2;
13+
public static final int ID_CF_MAIN_EVENTS = 3;
14+
15+
public static final String ALL = "all";
16+
public static final String CONFERENCES = "conferences";
17+
public static final String EVENTS = "events";
18+
19+
@Override
20+
public String evaluateSelectedFilters(final String searchString) {
21+
return null;
22+
}
23+
24+
@Override
25+
protected void init() {
26+
/* content filters */
27+
groupsFactory.addFilterItem(new FilterItem(
28+
ID_CF_MAIN_ALL, ALL));
29+
groupsFactory.addFilterItem(new FilterItem(
30+
ID_CF_MAIN_CONFERENCES, CONFERENCES));
31+
groupsFactory.addFilterItem(new FilterItem(
32+
ID_CF_MAIN_EVENTS, EVENTS));
33+
34+
addContentFilterGroup(groupsFactory.createFilterGroup(ID_CF_MAIN_GRP, null, true,
35+
ID_CF_MAIN_ALL, new FilterItem[]{
36+
groupsFactory.getFilterForId(ID_CF_MAIN_ALL),
37+
groupsFactory.getFilterForId(ID_CF_MAIN_CONFERENCES),
38+
groupsFactory.getFilterForId(ID_CF_MAIN_EVENTS),
39+
}, null));
40+
}
41+
}

0 commit comments

Comments
 (0)