Skip to content

Commit 2dd4c96

Browse files
committed
searchfilters: convert Peertube to new framework
Available content filters: - All - Videos - Channels - Playlists Sepia - SepiaSearch Available sort filters: - 'Sort by' - stream kind - sensitive - 'Date' - 'Duration'
1 parent c2a0922 commit 2dd4c96

8 files changed

Lines changed: 382 additions & 32 deletions

File tree

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Created by evermind-zz 2022, licensed GNU GPL version 3 or later -->
2+
3+
package org.schabi.newpipe.extractor.services.peertube;
4+
5+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
6+
import org.schabi.newpipe.extractor.services.peertube.search.filter.PeertubeFilters;
7+
8+
import java.util.List;
9+
import java.util.Optional;
10+
11+
public final class PeertubeHelpers {
12+
private PeertubeHelpers() { }
13+
public static Optional<FilterItem> getSepiaFilter(final List<FilterItem> selectedFilters) {
14+
final Optional<FilterItem> sepiaFilter = selectedFilters.stream()
15+
.filter(filterItem -> filterItem instanceof PeertubeFilters.PeertubeSepiaFilterItem)
16+
.findFirst();
17+
18+
return sepiaFilter;
19+
}
20+
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/PeertubeService.java

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

3+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
4+
35
import static org.schabi.newpipe.extractor.StreamingService.ServiceInfo.MediaCapability.COMMENTS;
46
import static org.schabi.newpipe.extractor.StreamingService.ServiceInfo.MediaCapability.VIDEO;
57
import static java.util.Arrays.asList;
@@ -36,6 +38,7 @@
3638
import org.schabi.newpipe.extractor.suggestion.SuggestionExtractor;
3739

3840
import java.util.List;
41+
import java.util.Optional;
3942

4043
public class PeertubeService extends StreamingService {
4144

@@ -77,9 +80,10 @@ public ListLinkHandlerFactory getCommentsLHFactory() {
7780

7881
@Override
7982
public SearchExtractor getSearchExtractor(final SearchQueryHandler queryHandler) {
80-
final List<String> contentFilters = queryHandler.getContentFilters();
81-
return new PeertubeSearchExtractor(this, queryHandler,
82-
!contentFilters.isEmpty() && contentFilters.get(0).startsWith("sepia_"));
83+
final List<FilterItem> contentFilters = queryHandler.getContentFilters();
84+
85+
final Optional<FilterItem> sepiaFilter = PeertubeHelpers.getSepiaFilter(contentFilters);
86+
return new PeertubeSearchExtractor(this, queryHandler, sepiaFilter.isPresent());
8387
}
8488

8589
@Override

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/linkHandler/PeertubeChannelLinkHandlerFactory.java

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

3+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
4+
35
import org.schabi.newpipe.extractor.ServiceList;
46
import org.schabi.newpipe.extractor.exceptions.ParsingException;
57
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
@@ -28,15 +30,15 @@ public String getId(final String url) throws ParsingException {
2830

2931
@Override
3032
public String getUrl(final String id,
31-
final List<String> contentFilters,
32-
final String searchFilter) throws ParsingException {
33+
final List<FilterItem> contentFilters,
34+
final List<FilterItem> searchFilter) throws ParsingException {
3335
return getUrl(id, contentFilters, searchFilter, ServiceList.PeerTube.getBaseUrl());
3436
}
3537

3638
@Override
3739
public String getUrl(final String id,
38-
final List<String> contentFilter,
39-
final String sortFilter,
40+
final List<FilterItem> contentFilter,
41+
final List<FilterItem> sortFilter,
4042
final String baseUrl)
4143
throws ParsingException {
4244
if (id.matches(ID_PATTERN)) {

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/linkHandler/PeertubeCommentsLinkHandlerFactory.java

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

3+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
4+
35
import org.schabi.newpipe.extractor.ServiceList;
46
import org.schabi.newpipe.extractor.exceptions.FoundAdException;
57
import org.schabi.newpipe.extractor.exceptions.ParsingException;
@@ -32,15 +34,15 @@ public boolean onAcceptUrl(final String url) throws FoundAdException {
3234

3335
@Override
3436
public String getUrl(final String id,
35-
final List<String> contentFilter,
36-
final String sortFilter) throws ParsingException {
37+
final List<FilterItem> contentFilter,
38+
final List<FilterItem> sortFilter) throws ParsingException {
3739
return getUrl(id, contentFilter, sortFilter, ServiceList.PeerTube.getBaseUrl());
3840
}
3941

4042
@Override
4143
public String getUrl(final String id,
42-
final List<String> contentFilter,
43-
final String sortFilter,
44+
final List<FilterItem> contentFilter,
45+
final List<FilterItem> sortFilter,
4446
final String baseUrl) throws ParsingException {
4547
return baseUrl + String.format(COMMENTS_ENDPOINT, id);
4648
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/linkHandler/PeertubePlaylistLinkHandlerFactory.java

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

33

4+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
5+
46
import org.schabi.newpipe.extractor.ServiceList;
57
import org.schabi.newpipe.extractor.exceptions.ParsingException;
68
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
@@ -23,15 +25,15 @@ public static PeertubePlaylistLinkHandlerFactory getInstance() {
2325

2426
@Override
2527
public String getUrl(final String id,
26-
final List<String> contentFilters,
27-
final String sortFilter) {
28+
final List<FilterItem> contentFilters,
29+
final List<FilterItem> sortFilter) {
2830
return getUrl(id, contentFilters, sortFilter, ServiceList.PeerTube.getBaseUrl());
2931
}
3032

3133
@Override
3234
public String getUrl(final String id,
33-
final List<String> contentFilters,
34-
final String sortFilter,
35+
final List<FilterItem> contentFilters,
36+
final List<FilterItem> sortFilter,
3537
final String baseUrl) {
3638
return baseUrl + "/api/v1/video-playlists/" + id;
3739
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/linkHandler/PeertubeSearchQueryHandlerFactory.java

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,22 @@
33
import org.schabi.newpipe.extractor.ServiceList;
44
import org.schabi.newpipe.extractor.exceptions.ParsingException;
55
import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandlerFactory;
6+
import org.schabi.newpipe.extractor.search.filter.FilterContainer;
7+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
8+
import org.schabi.newpipe.extractor.services.peertube.PeertubeHelpers;
9+
import org.schabi.newpipe.extractor.services.peertube.search.filter.PeertubeFilters;
610

711
import java.io.UnsupportedEncodingException;
812
import java.net.URLEncoder;
913
import java.util.List;
14+
import java.util.Optional;
1015

1116
import static org.schabi.newpipe.extractor.utils.Utils.UTF_8;
1217

1318
public final class PeertubeSearchQueryHandlerFactory extends SearchQueryHandlerFactory {
1419

1520
public static final String VIDEOS = "videos";
16-
public static final String SEPIA_VIDEOS = "sepia_videos"; // sepia is the global index
21+
// sepia is the global index
1722
public static final String SEPIA_BASE_URL = "https://sepiasearch.org";
1823
public static final String SEARCH_ENDPOINT = "/api/v1/search/videos";
1924

@@ -26,34 +31,51 @@ public static PeertubeSearchQueryHandlerFactory getInstance() {
2631

2732
@Override
2833
public String getUrl(final String searchString,
29-
final List<String> contentFilters,
30-
final String sortFilter) throws ParsingException {
34+
final List<FilterItem> selectedContentFilter,
35+
final List<FilterItem> selectedSortFilters) throws ParsingException {
36+
3137
final String baseUrl;
32-
if (!contentFilters.isEmpty() && contentFilters.get(0).startsWith("sepia_")) {
38+
final Optional<FilterItem> sepiaFilter =
39+
PeertubeHelpers.getSepiaFilter(selectedContentFilter);
40+
if (sepiaFilter.isPresent()) {
3341
baseUrl = SEPIA_BASE_URL;
3442
} else {
3543
baseUrl = ServiceList.PeerTube.getBaseUrl();
3644
}
37-
return getUrl(searchString, contentFilters, sortFilter, baseUrl);
45+
46+
return getUrl(searchString, selectedContentFilter, selectedSortFilters, baseUrl);
3847
}
3948

4049
@Override
4150
public String getUrl(final String searchString,
42-
final List<String> contentFilters,
43-
final String sortFilter,
51+
final List<FilterItem> selectedContentFilter,
52+
final List<FilterItem> selectedSortFilter,
4453
final String baseUrl) throws ParsingException {
4554
try {
46-
return baseUrl + SEARCH_ENDPOINT + "?search=" + URLEncoder.encode(searchString, UTF_8);
55+
searchFilters.setSelectedSortFilter(selectedSortFilter);
56+
searchFilters.setSelectedContentFilter(selectedContentFilter);
57+
58+
final String filterQuery = searchFilters.evaluateSelectedFilters(null);
59+
60+
return baseUrl + SEARCH_ENDPOINT + "?search=" + URLEncoder.encode(searchString, UTF_8)
61+
+ filterQuery;
4762
} catch (final UnsupportedEncodingException e) {
4863
throw new ParsingException("Could not encode query", e);
4964
}
5065
}
5166

5267
@Override
53-
public String[] getAvailableContentFilter() {
54-
return new String[]{
55-
VIDEOS,
56-
SEPIA_VIDEOS
57-
};
68+
public FilterContainer getAvailableContentFilter() {
69+
return searchFilters.getContentFilters();
70+
}
71+
72+
@Override
73+
public FilterContainer getContentFilterSortFilterVariant(final int contentFilterId) {
74+
return searchFilters.getContentFilterSortFilterVariant(contentFilterId);
75+
}
76+
77+
@Override
78+
public FilterItem getFilterItem(final int filterId) {
79+
return searchFilters.getFilterItem(filterId);
5880
}
5981
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/linkHandler/PeertubeTrendingLinkHandlerFactory.java

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

3+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
4+
35
import org.schabi.newpipe.extractor.ServiceList;
46
import org.schabi.newpipe.extractor.exceptions.ParsingException;
57
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
@@ -42,15 +44,15 @@ public static PeertubeTrendingLinkHandlerFactory getInstance() {
4244

4345
@Override
4446
public String getUrl(final String id,
45-
final List<String> contentFilters,
46-
final String sortFilter) {
47+
final List<FilterItem> contentFilters,
48+
final List<FilterItem> sortFilter) {
4749
return getUrl(id, contentFilters, sortFilter, ServiceList.PeerTube.getBaseUrl());
4850
}
4951

5052
@Override
5153
public String getUrl(final String id,
52-
final List<String> contentFilters,
53-
final String sortFilter,
54+
final List<FilterItem> contentFilters,
55+
final List<FilterItem> sortFilter,
5456
final String baseUrl) {
5557
return String.format(KIOSK_MAP.get(id), baseUrl);
5658
}

0 commit comments

Comments
 (0)