Skip to content

Commit c9d94f4

Browse files
evermind-zzInfinityLoop1308
authored andcommitted
searchfilters: convert Peertube to new framework
Available content filters: - All - Videos - Channels - Playlists Available sort filters: - 'Sort by' - stream kind - sensitive - 'Date' - 'Duration' - SepiaSearch
1 parent 79e623d commit c9d94f4

8 files changed

Lines changed: 352 additions & 31 deletions

File tree

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.schabi.newpipe.extractor.services.peertube;
2+
3+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
4+
import org.schabi.newpipe.extractor.services.peertube.search.filter.PeertubeFilters;
5+
6+
import java.util.List;
7+
import java.util.Optional;
8+
9+
public final class PeertubeHelpers {
10+
private PeertubeHelpers() { }
11+
public static Optional<FilterItem> getSepiaFilter(final List<FilterItem> selectedFilters) {
12+
final Optional<FilterItem> sepiaFilter = selectedFilters.stream()
13+
.filter(filterItem -> filterItem instanceof PeertubeFilters.PeertubeSepiaFilterItem)
14+
.findFirst();
15+
16+
return sepiaFilter;
17+
}
18+
19+
public static Optional<FilterItem> getSpecificFilter(final List<FilterItem> selectedFilters, final Class clazz) {
20+
final Optional<FilterItem> sepiaFilter = selectedFilters.stream()
21+
.filter(filterItem -> filterItem.getClass().isInstance(clazz))
22+
.findFirst();
23+
24+
return sepiaFilter;
25+
}
26+
}

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> selectedSortFilter = queryHandler.getSortFilter();
84+
85+
final Optional<FilterItem> sepiaFilter = PeertubeHelpers.getSepiaFilter(selectedSortFilter);
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
}
Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package org.schabi.newpipe.extractor.services.peertube.linkHandler;
22

3+
import org.schabi.newpipe.extractor.search.filter.Filter;
4+
import org.schabi.newpipe.extractor.search.filter.FilterItem;
5+
import org.schabi.newpipe.extractor.services.peertube.search.filter.PeertubeFilters;
6+
37
import org.schabi.newpipe.extractor.ServiceList;
48
import org.schabi.newpipe.extractor.exceptions.ParsingException;
59
import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandlerFactory;
10+
import org.schabi.newpipe.extractor.services.peertube.PeertubeHelpers;
611

712
import java.io.UnsupportedEncodingException;
813
import java.net.URLEncoder;
914
import java.util.List;
15+
import java.util.Optional;
1016

1117
import static org.schabi.newpipe.extractor.utils.Utils.UTF_8;
1218

@@ -26,34 +32,56 @@ public static PeertubeSearchQueryHandlerFactory getInstance() {
2632

2733
@Override
2834
public String getUrl(final String searchString,
29-
final List<String> contentFilters,
30-
final String sortFilter) throws ParsingException {
35+
final List<FilterItem> selectedContentFilter,
36+
final List<FilterItem> selectedSortFilters) throws ParsingException {
37+
3138
final String baseUrl;
32-
if (!contentFilters.isEmpty() && contentFilters.get(0).startsWith("sepia_")) {
39+
final Optional<FilterItem> sepiaFilter =
40+
PeertubeHelpers.getSepiaFilter(selectedSortFilters);
41+
if (sepiaFilter.isPresent()) {
3342
baseUrl = SEPIA_BASE_URL;
3443
} else {
3544
baseUrl = ServiceList.PeerTube.getBaseUrl();
3645
}
37-
return getUrl(searchString, contentFilters, sortFilter, baseUrl);
46+
47+
return getUrl(searchString, selectedContentFilter, selectedSortFilters, baseUrl);
3848
}
3949

4050
@Override
4151
public String getUrl(final String searchString,
42-
final List<String> contentFilters,
43-
final String sortFilter,
52+
final List<FilterItem> selectedContentFilter,
53+
final List<FilterItem> selectedSortFilter,
4454
final String baseUrl) throws ParsingException {
4555
try {
46-
return baseUrl + SEARCH_ENDPOINT + "?search=" + URLEncoder.encode(searchString, UTF_8);
56+
searchFilters.setSelectedSortFilter(selectedSortFilter);
57+
searchFilters.setSelectedContentFilter(selectedContentFilter);
58+
59+
final String filterQuery = searchFilters.evaluateSelectedFilters(null);
60+
61+
return baseUrl + SEARCH_ENDPOINT + "?search=" + URLEncoder.encode(searchString, UTF_8)
62+
+ filterQuery;
4763
} catch (final UnsupportedEncodingException e) {
4864
throw new ParsingException("Could not encode query", e);
4965
}
5066
}
5167

5268
@Override
53-
public String[] getAvailableContentFilter() {
54-
return new String[]{
55-
VIDEOS,
56-
SEPIA_VIDEOS
57-
};
69+
public Filter getAvailableContentFilter() {
70+
return searchFilters.getContentFilters();
71+
}
72+
73+
@Override
74+
public Filter getAvailableSortFilter() {
75+
return searchFilters.getSortFilters();
76+
}
77+
78+
@Override
79+
public Filter getContentFilterSortFilterVariant(final int contentFilterId) {
80+
return searchFilters.getContentFilterSortFilterVariant(contentFilterId);
81+
}
82+
83+
@Override
84+
public FilterItem getFilterItem(final int filterId) {
85+
return searchFilters.getFilterItem(filterId);
5886
}
5987
}

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)