From c19a5c64ce627e23989d1b74c0daeba3db84211f Mon Sep 17 00:00:00 2001
From: Arraiment <76941874+Arraiment@users.noreply.github.com>
Date: Fri, 20 Aug 2021 18:22:43 +0800
Subject: [PATCH] Fix search and add filters (#8667)

---
 src/en/mangahere/build.gradle                 |  2 +-
 .../extension/en/mangahere/Mangahere.kt       | 40 ++++++++++++++-----
 2 files changed, 30 insertions(+), 12 deletions(-)

diff --git a/src/en/mangahere/build.gradle b/src/en/mangahere/build.gradle
index ecd64ec87..62d9ece8f 100644
--- a/src/en/mangahere/build.gradle
+++ b/src/en/mangahere/build.gradle
@@ -5,7 +5,7 @@ ext {
     extName = 'Mangahere'
     pkgNameSuffix = 'en.mangahere'
     extClass = '.Mangahere'
-    extVersionCode = 16
+    extVersionCode = 17
     libVersion = '1.2'
 }
 
diff --git a/src/en/mangahere/src/eu/kanade/tachiyomi/extension/en/mangahere/Mangahere.kt b/src/en/mangahere/src/eu/kanade/tachiyomi/extension/en/mangahere/Mangahere.kt
index 5679c5212..11d6a39e3 100644
--- a/src/en/mangahere/src/eu/kanade/tachiyomi/extension/en/mangahere/Mangahere.kt
+++ b/src/en/mangahere/src/eu/kanade/tachiyomi/extension/en/mangahere/Mangahere.kt
@@ -93,6 +93,10 @@ class Mangahere : ParsedHttpSource() {
             when (filter) {
                 is TypeList -> url.addEncodedQueryParameter("type", types[filter.values[filter.state]].toString())
                 is CompletionList -> url.addEncodedQueryParameter("st", filter.state.toString())
+                is RatingList -> {
+                    url.addEncodedQueryParameter("rating_method", "gt")
+                    url.addEncodedQueryParameter("rating", filter.state.toString())
+                }
                 is GenreList -> {
                     val includeGenres = mutableSetOf<Int>()
                     val excludeGenres = mutableSetOf<Int>()
@@ -105,6 +109,18 @@ class Mangahere : ParsedHttpSource() {
                         addEncodedQueryParameter("nogenres", excludeGenres.joinToString(","))
                     }
                 }
+                is ArtistFilter -> {
+                    url.addEncodedQueryParameter("artist_method", "cw")
+                    url.addEncodedQueryParameter("artist", filter.state)
+                }
+                is AuthorFilter -> {
+                    url.addEncodedQueryParameter("author_method", "cw")
+                    url.addEncodedQueryParameter("author", filter.state)
+                }
+                is YearFilter -> {
+                    url.addEncodedQueryParameter("released_method", "eq")
+                    url.addEncodedQueryParameter("released", filter.state)
+                }
             }
         }
 
@@ -114,14 +130,6 @@ class Mangahere : ParsedHttpSource() {
             addEncodedQueryParameter("sort", null)
             addEncodedQueryParameter("stype", 1.toString())
             addEncodedQueryParameter("name", null)
-            addEncodedQueryParameter("author_method", "cw")
-            addEncodedQueryParameter("author", null)
-            addEncodedQueryParameter("artist_method", "cw")
-            addEncodedQueryParameter("artist", null)
-            addEncodedQueryParameter("rating_method", "eq")
-            addEncodedQueryParameter("rating", null)
-            addEncodedQueryParameter("released_method", "eq")
-            addEncodedQueryParameter("released", null)
         }
 
         return GET(url.toString(), headers)
@@ -316,14 +324,23 @@ class Mangahere : ParsedHttpSource() {
 
     private class Genre(title: String, val id: Int) : Filter.TriState(title)
 
-    private class TypeList(types: Array<String>) : Filter.Select<String>("Type", types, 0)
+    private class TypeList(types: Array<String>) : Filter.Select<String>("Type", types, 1)
     private class CompletionList(completions: Array<String>) : Filter.Select<String>("Completed series", completions, 0)
+    private class RatingList(ratings: Array<String>) : Filter.Select<String>("Minimum rating", ratings, 0)
     private class GenreList(genres: List<Genre>) : Filter.Group<Genre>("Genres", genres)
 
+    private class ArtistFilter(name: String) : Filter.Text(name)
+    private class AuthorFilter(name: String) : Filter.Text(name)
+    private class YearFilter(name: String) : Filter.Text(name)
+
     override fun getFilterList() = FilterList(
         TypeList(types.keys.toList().sorted().toTypedArray()),
-        CompletionList(completions),
-        GenreList(genres())
+        ArtistFilter("Artist"),
+        AuthorFilter("Author"),
+        GenreList(genres()),
+        RatingList(ratings),
+        YearFilter("Year released"),
+        CompletionList(completions)
     )
 
     private val types = hashMapOf(
@@ -338,6 +355,7 @@ class Mangahere : ParsedHttpSource() {
     )
 
     private val completions = arrayOf("Either", "No", "Yes")
+    private val ratings = arrayOf("No Stars", "1 Star", "2 Stars", "3 Stars", "4 Stars", "5 Stars")
 
     private fun genres() = arrayListOf(
         Genre("Action", 1),