11package org .schabi .newpipe .extractor .services .niconico .search .filter ;
22
33import org .schabi .newpipe .extractor .search .filter .Filter ;
4+ import org .schabi .newpipe .extractor .search .filter .FilterGroup ;
45import org .schabi .newpipe .extractor .search .filter .FilterItem ;
56import 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