Skip to content

Commit 9e75344

Browse files
evermind-zzStypox
authored andcommitted
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 1dc746a commit 9e75344

9 files changed

Lines changed: 372 additions & 53 deletions
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+
}
14+
15+
public static Optional<FilterItem> getSepiaFilter(final List<FilterItem> selectedFilters) {
16+
return selectedFilters.stream()
17+
.filter(PeertubeFilters.PeertubeSepiaFilterItem.class::isInstance)
18+
.findFirst();
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;
@@ -39,6 +41,7 @@
3941
import org.schabi.newpipe.extractor.suggestion.SuggestionExtractor;
4042

4143
import java.util.List;
44+
import java.util.Optional;
4245

4346
public class PeertubeService extends StreamingService {
4447

@@ -85,9 +88,10 @@ public ListLinkHandlerFactory getCommentsLHFactory() {
8588

8689
@Override
8790
public SearchExtractor getSearchExtractor(final SearchQueryHandler queryHandler) {
88-
final List<String> contentFilters = queryHandler.getContentFilters();
89-
return new PeertubeSearchExtractor(this, queryHandler,
90-
!contentFilters.isEmpty() && contentFilters.get(0).startsWith("sepia_"));
91+
final List<FilterItem> contentFilters = queryHandler.getContentFilters();
92+
93+
final Optional<FilterItem> sepiaFilter = PeertubeHelpers.getSepiaFilter(contentFilters);
94+
return new PeertubeSearchExtractor(this, queryHandler, sepiaFilter.isPresent());
9195
}
9296

9397
@Override

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamExtractor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ public String getSupportInfo() {
319319
@Nonnull
320320
private String getRelatedItemsUrl(@Nonnull final List<String> tags)
321321
throws UnsupportedEncodingException {
322-
final String url = baseUrl + PeertubeSearchQueryHandlerFactory.SEARCH_ENDPOINT_VIDEOS;
322+
final String url = baseUrl + PeertubeSearchQueryHandlerFactory.SEARCH_ENDPOINT;
323323
final StringBuilder params = new StringBuilder();
324324
params.append("start=0&count=8&sort=-createdAt");
325325
for (final String tag : tags) {

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;
@@ -30,16 +32,16 @@ public String getId(final String url) throws ParsingException, UnsupportedOperat
3032

3133
@Override
3234
public String getUrl(final String id,
33-
final List<String> contentFilters,
34-
final String searchFilter)
35+
final List<FilterItem> contentFilters,
36+
final List<FilterItem> searchFilter)
3537
throws ParsingException, UnsupportedOperationException {
3638
return getUrl(id, contentFilters, searchFilter, ServiceList.PeerTube.getBaseUrl());
3739
}
3840

3941
@Override
4042
public String getUrl(final String id,
41-
final List<String> contentFilter,
42-
final String sortFilter,
43+
final List<FilterItem> contentFilter,
44+
final List<FilterItem> sortFilter,
4345
final String baseUrl)
4446
throws ParsingException, UnsupportedOperationException {
4547
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;
@@ -39,16 +41,16 @@ public boolean onAcceptUrl(final String url) throws FoundAdException {
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
throws ParsingException, UnsupportedOperationException {
4547
return getUrl(id, contentFilter, sortFilter, ServiceList.PeerTube.getBaseUrl());
4648
}
4749

4850
@Override
4951
public String getUrl(final String id,
50-
final List<String> contentFilter,
51-
final String sortFilter,
52+
final List<FilterItem> contentFilter,
53+
final List<FilterItem> sortFilter,
5254
final String baseUrl)
5355
throws ParsingException, UnsupportedOperationException {
5456
return baseUrl + String.format(COMMENTS_ENDPOINT, id);

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;
@@ -26,16 +28,16 @@ public static PeertubePlaylistLinkHandlerFactory getInstance() {
2628

2729
@Override
2830
public String getUrl(final String id,
29-
final List<String> contentFilters,
30-
final String sortFilter)
31+
final List<FilterItem> contentFilters,
32+
final List<FilterItem> sortFilter)
3133
throws ParsingException, UnsupportedOperationException {
3234
return getUrl(id, contentFilters, sortFilter, ServiceList.PeerTube.getBaseUrl());
3335
}
3436

3537
@Override
3638
public String getUrl(final String id,
37-
final List<String> contentFilters,
38-
final String sortFilter,
39+
final List<FilterItem> contentFilters,
40+
final List<FilterItem> sortFilter,
3941
final String baseUrl)
4042
throws ParsingException, UnsupportedOperationException {
4143
return baseUrl + "/api/v1/video-playlists/" + id;

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

Lines changed: 23 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,26 @@
44
import org.schabi.newpipe.extractor.exceptions.ParsingException;
55
import org.schabi.newpipe.extractor.linkhandler.SearchQueryHandlerFactory;
66
import org.schabi.newpipe.extractor.utils.Utils;
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;
710

811
import java.io.UnsupportedEncodingException;
912
import java.util.List;
13+
import java.util.Optional;
1014

1115
public final class PeertubeSearchQueryHandlerFactory extends SearchQueryHandlerFactory {
1216

1317
private static final PeertubeSearchQueryHandlerFactory INSTANCE =
1418
new PeertubeSearchQueryHandlerFactory();
1519

1620
public static final String VIDEOS = "videos";
17-
public static final String SEPIA_VIDEOS = "sepia_videos"; // sepia is the global index
18-
public static final String PLAYLISTS = "playlists";
19-
public static final String CHANNELS = "channels";
21+
// sepia is the global index
2022
public static final String SEPIA_BASE_URL = "https://sepiasearch.org";
21-
public static final String SEARCH_ENDPOINT_PLAYLISTS = "/api/v1/search/video-playlists";
22-
public static final String SEARCH_ENDPOINT_VIDEOS = "/api/v1/search/videos";
23-
public static final String SEARCH_ENDPOINT_CHANNELS = "/api/v1/search/video-channels";
23+
public static final String SEARCH_ENDPOINT = "/api/v1/search/videos";
2424

2525
private PeertubeSearchQueryHandlerFactory() {
26+
super(new PeertubeFilters());
2627
}
2728

2829
public static PeertubeSearchQueryHandlerFactory getInstance() {
@@ -31,48 +32,37 @@ public static PeertubeSearchQueryHandlerFactory getInstance() {
3132

3233
@Override
3334
public String getUrl(final String searchString,
34-
final List<String> contentFilters,
35-
final String sortFilter)
35+
final List<FilterItem> selectedContentFilter,
36+
final List<FilterItem> selectedSortFilters)
3637
throws ParsingException, UnsupportedOperationException {
3738
final String baseUrl;
38-
if (!contentFilters.isEmpty() && contentFilters.get(0).startsWith("sepia_")) {
39+
final Optional<FilterItem> sepiaFilter =
40+
PeertubeHelpers.getSepiaFilter(selectedContentFilter);
41+
if (sepiaFilter.isPresent()) {
3942
baseUrl = SEPIA_BASE_URL;
4043
} else {
4144
baseUrl = ServiceList.PeerTube.getBaseUrl();
4245
}
43-
return getUrl(searchString, contentFilters, sortFilter, baseUrl);
46+
47+
return getUrl(searchString, selectedContentFilter, selectedSortFilters, baseUrl);
4448
}
4549

4650
@Override
4751
public String getUrl(final String searchString,
48-
final List<String> contentFilters,
49-
final String sortFilter,
52+
final List<FilterItem> selectedContentFilter,
53+
final List<FilterItem> selectedSortFilter,
5054
final String baseUrl)
5155
throws ParsingException, UnsupportedOperationException {
5256
try {
53-
final String endpoint;
54-
if (contentFilters.isEmpty()
55-
|| contentFilters.get(0).equals(VIDEOS)
56-
|| contentFilters.get(0).equals(SEPIA_VIDEOS)) {
57-
endpoint = SEARCH_ENDPOINT_VIDEOS;
58-
} else if (contentFilters.get(0).equals(CHANNELS)) {
59-
endpoint = SEARCH_ENDPOINT_CHANNELS;
60-
} else {
61-
endpoint = SEARCH_ENDPOINT_PLAYLISTS;
62-
}
63-
return baseUrl + endpoint + "?search=" + Utils.encodeUrlUtf8(searchString);
57+
searchFilters.setSelectedSortFilter(selectedSortFilter);
58+
searchFilters.setSelectedContentFilter(selectedContentFilter);
59+
60+
final String filterQuery = searchFilters.evaluateSelectedFilters(null);
61+
62+
return baseUrl + SEARCH_ENDPOINT + "?search=" + Utils.encodeUrlUtf8(searchString)
63+
+ filterQuery;
6464
} catch (final UnsupportedEncodingException e) {
6565
throw new ParsingException("Could not encode query", e);
6666
}
6767
}
68-
69-
@Override
70-
public String[] getAvailableContentFilter() {
71-
return new String[]{
72-
VIDEOS,
73-
PLAYLISTS,
74-
CHANNELS,
75-
SEPIA_VIDEOS,
76-
};
77-
}
7868
}

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;
@@ -34,16 +36,16 @@ public static PeertubeTrendingLinkHandlerFactory getInstance() {
3436

3537
@Override
3638
public String getUrl(final String id,
37-
final List<String> contentFilters,
38-
final String sortFilter)
39+
final List<FilterItem> contentFilters,
40+
final List<FilterItem> sortFilter)
3941
throws ParsingException, UnsupportedOperationException {
4042
return getUrl(id, contentFilters, sortFilter, ServiceList.PeerTube.getBaseUrl());
4143
}
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
final String baseUrl)
4850
throws ParsingException, UnsupportedOperationException {
4951
return String.format(KIOSK_MAP.get(id), baseUrl);

0 commit comments

Comments
 (0)