Skip to content

Commit d3682b1

Browse files
InfinityLoop130834j
andcommitted
merge: refactor and apply #18 from 34j(Add sorting filters)
Co-authored-by: 34j <55338215+34j@users.noreply.github.com>
1 parent 9e2248d commit d3682b1

2 files changed

Lines changed: 94 additions & 5 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/niconico/linkHandler/NiconicoSearchQueryHandlerFactory.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,12 @@ public String getUrl(final String id,
2828
searchFilters.setSelectedSortFilter(selectedSortFilter);
2929
searchFilters.setSelectedContentFilter(selectedContentFilter);
3030

31-
final String filterQuery = searchFilters.evaluateSelectedContentFilters();
31+
final String filterQuery = searchFilters.evaluateSelectedFilters(null);
3232

3333
try {
3434
return SEARCH_URL + "?q=" + URLEncoder.encode(id, UTF_8) + filterQuery
3535
+ "&fields=contentId,title,userId,channelId"
3636
+ ",viewCounter,lengthSeconds,thumbnailUrl,startTime"
37-
+ "&_sort=-viewCounter"
3837
+ "&_offset=0"
3938
+ "&_limit=" + ITEMS_PER_PAGE
4039
+ "&_context=" + URLEncoder.encode(NiconicoService.APP_NAME, UTF_8);
@@ -52,4 +51,13 @@ public Filter getAvailableContentFilter() {
5251
public FilterItem getFilterItem(final int filterId) {
5352
return searchFilters.getFilterItem(filterId);
5453
}
54+
@Override
55+
public Filter getAvailableSortFilter() {
56+
return searchFilters.getSortFilters();
57+
}
58+
59+
@Override
60+
public Filter getContentFilterSortFilterVariant(final int contentFilterId) {
61+
return searchFilters.getContentFilterSortFilterVariant(contentFilterId);
62+
}
5563
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/niconico/search/filter/NiconicoFilters.java

Lines changed: 84 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package org.schabi.newpipe.extractor.services.niconico.search.filter;
22

33
import org.schabi.newpipe.extractor.search.filter.Filter;
4+
import org.schabi.newpipe.extractor.search.filter.FilterGroup;
45
import org.schabi.newpipe.extractor.search.filter.FilterItem;
56
import org.schabi.newpipe.extractor.search.filter.SearchFiltersBase;
6-
import org.schabi.newpipe.extractor.services.bandcamp.search.filter.BandcampFilters;
77

8-
public class NiconicoFilters extends SearchFiltersBase {
8+
import java.util.Optional;
9+
10+
public final class NiconicoFilters extends SearchFiltersBase {
911

1012
private static final String ALL = "All";
1113
private static final String TAGS_ONLY = "TagsOnly";
@@ -16,10 +18,15 @@ public NiconicoFilters() {
1618
}
1719

1820
@Override
19-
public String evaluateSelectedContentFilters() {
21+
public String evaluateSelectedFilters(final String searchString) {
2022
if (selectedSortFilter != null) {
2123
String sortQuery = "";
2224

25+
final Optional<FilterItem> ascendingFilter = selectedSortFilter.stream()
26+
.filter(filterItem -> filterItem instanceof NiconicoSortOrderFilterItem)
27+
.findFirst();
28+
boolean isAscending = ascendingFilter.isPresent();
29+
2330
if (selectedContentFilter != null && !selectedContentFilter.isEmpty()) {
2431
final NiconicoFilters.NiconicoContentFilterItem contentItem =
2532
// we assume that there is just one content filter
@@ -30,6 +37,17 @@ public String evaluateSelectedContentFilters() {
3037
}
3138
}
3239
}
40+
// only 1 sort filter
41+
if (!selectedSortFilter.isEmpty()) {
42+
final NiconicoFilters.NiconicoSortFilterItem sortItem =
43+
// we assume that there is just one content filter
44+
(NiconicoFilters.NiconicoSortFilterItem) selectedSortFilter.get(0);
45+
if (sortItem != null) {
46+
if (!sortItem.query.isEmpty()) {
47+
sortQuery += "&" + sortItem.getQueryData(isAscending);
48+
}
49+
}
50+
}
3351
return sortQuery;
3452
}
3553
return "";
@@ -49,6 +67,62 @@ protected void init() {
4967
builder.getFilterForId(contentFilterAll),
5068
builder.getFilterForId(contentFilterTagsOnly),
5169
}));
70+
71+
/* 'Sort by' filter items */
72+
final int filterViewCount = builder.addSortItem(
73+
new NiconicoSortFilterItem("Views", "_sort=viewCounter"));
74+
final int filterBookmarkCount = builder.addSortItem(
75+
new NiconicoSortFilterItem("Bookmarks", "_sort=mylistCounter"));
76+
final int filterLikeCount = builder.addSortItem(
77+
new NiconicoSortFilterItem("Likes", "_sort=likeCounter"));
78+
final int filterCommentCount = builder.addSortItem(
79+
new NiconicoSortFilterItem("Comments", "_sort=commentCounter"));
80+
81+
final int filterLength = builder.addSortItem(
82+
new NiconicoSortFilterItem("Length", "_sort=lengthSeconds"));
83+
84+
final int filterPublishAt = builder.addSortItem(
85+
new NiconicoSortFilterItem("Publish Time", "_sort=startTime"));
86+
final int filterLastCommentedAt = builder.addSortItem(
87+
new NiconicoSortFilterItem("Last Comment Time", "_sort=lastCommentTime"));
88+
89+
final int filterSortOrderAscending = builder.addSortItem(
90+
new NiconicoSortOrderFilterItem("Ascending"));
91+
92+
93+
final Filter allSortFilters = new Filter.Builder(new FilterGroup[]{
94+
builder.createSortGroup("Sort by", true, new FilterItem[]{
95+
builder.getFilterForId(filterViewCount),
96+
builder.getFilterForId(filterCommentCount),
97+
builder.getFilterForId(filterBookmarkCount),
98+
builder.getFilterForId(filterLikeCount),
99+
builder.getFilterForId(filterLength),
100+
builder.getFilterForId(filterPublishAt),
101+
builder.getFilterForId(filterLastCommentedAt),
102+
}),
103+
builder.createSortGroup("Sort order", false, new FilterItem[]{
104+
builder.getFilterForId(filterSortOrderAscending)
105+
}),
106+
}).build();
107+
addContentFilterSortVariant(contentFilterAll, allSortFilters);
108+
addContentFilterSortVariant(contentFilterTagsOnly, allSortFilters);
109+
}
110+
111+
private static class NiconicoSortFilterItem extends FilterItem {
112+
protected final String query;
113+
114+
NiconicoSortFilterItem(final String name, final String query) {
115+
super(Filter.ITEM_IDENTIFIER_UNKNOWN, name);
116+
this.query = query;
117+
}
118+
public String getQueryData(boolean isAscending) {
119+
if (isAscending) {
120+
return query.replace("=", "=+");
121+
}
122+
else {
123+
return query.replace("=", "=-");
124+
}
125+
}
52126
}
53127

54128
public static class NiconicoContentFilterItem extends FilterItem {
@@ -59,4 +133,11 @@ public NiconicoContentFilterItem(final String name, final String query) {
59133
this.query = query;
60134
}
61135
}
136+
137+
private static class NiconicoSortOrderFilterItem extends FilterItem{
138+
NiconicoSortOrderFilterItem(final String name){
139+
super(Filter.ITEM_IDENTIFIER_UNKNOWN, name);
140+
}
141+
}
142+
62143
}

0 commit comments

Comments
 (0)