Fixed MangaPark filtering (#3459)

* Fixed MangaPark filtering
Fixed MangaPark filtering as requested in #3361.
Added additional sort options (views last 365/180/90 days).
Improved filter URLs by omitting empty/default URL parameters.

* Added 8 genre to MangaPark filter
All available GenreFilter are in sync with what you can filter for on the MangaPark website.
This commit is contained in:
E3FxGaming 2020-06-09 19:17:53 +02:00 committed by GitHub
parent 396c203047
commit e569048840
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 10 deletions

View File

@ -5,7 +5,7 @@ ext {
appName = 'Tachiyomi: MangaPark' appName = 'Tachiyomi: MangaPark'
pkgNameSuffix = 'en.mangapark' pkgNameSuffix = 'en.mangapark'
extClass = '.MangaPark' extClass = '.MangaPark'
extVersionCode = 12 extVersionCode = 13
libVersion = '1.2' libVersion = '1.2'
} }

View File

@ -60,12 +60,16 @@ class MangaPark : ConfigurableSource, ParsedHttpSource() {
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
val uri = Uri.parse("$baseUrl/search").buildUpon() val uri = Uri.parse("$baseUrl/search").buildUpon()
if (query.isNotEmpty()) {
uri.appendQueryParameter("q", query) uri.appendQueryParameter("q", query)
}
filters.forEach { filters.forEach {
if (it is UriFilter) if (it is UriFilter)
it.addToUri(uri) it.addToUri(uri)
} }
if (page != 1) {
uri.appendQueryParameter("page", page.toString()) uri.appendQueryParameter("page", page.toString())
}
return GET(uri.toString()) return GET(uri.toString())
} }
@ -262,8 +266,10 @@ class MangaPark : ConfigurableSource, ParsedHttpSource() {
private class SearchTypeFilter(name: String, val uriParam: String) : private class SearchTypeFilter(name: String, val uriParam: String) :
Filter.Select<String>(name, STATE_MAP), UriFilter { Filter.Select<String>(name, STATE_MAP), UriFilter {
override fun addToUri(uri: Uri.Builder) { override fun addToUri(uri: Uri.Builder) {
if (STATE_MAP[state] != "contain") {
uri.appendQueryParameter(uriParam, STATE_MAP[state]) uri.appendQueryParameter(uriParam, STATE_MAP[state])
} }
}
companion object { companion object {
private val STATE_MAP = arrayOf("contain", "begin", "end") private val STATE_MAP = arrayOf("contain", "begin", "end")
@ -272,9 +278,11 @@ class MangaPark : ConfigurableSource, ParsedHttpSource() {
private class AuthorArtistText : Filter.Text("Author/Artist"), UriFilter { private class AuthorArtistText : Filter.Text("Author/Artist"), UriFilter {
override fun addToUri(uri: Uri.Builder) { override fun addToUri(uri: Uri.Builder) {
if (state.isNotEmpty()) {
uri.appendQueryParameter("autart", state) uri.appendQueryParameter("autart", state)
} }
} }
}
private class GenreFilter(val uriParam: String, displayName: String) : Filter.TriState(displayName) private class GenreFilter(val uriParam: String, displayName: String) : Filter.TriState(displayName)
@ -297,7 +305,9 @@ class MangaPark : ConfigurableSource, ParsedHttpSource() {
GenreFilter("doujinshi", "Doujinshi"), GenreFilter("doujinshi", "Doujinshi"),
GenreFilter("drama", "Drama"), GenreFilter("drama", "Drama"),
GenreFilter("ecchi", "Ecchi"), GenreFilter("ecchi", "Ecchi"),
GenreFilter("fan-colored", "Fan colored"),
GenreFilter("fantasy", "Fantasy"), GenreFilter("fantasy", "Fantasy"),
GenreFilter("food", "Food"),
GenreFilter("full-color", "Full color"), GenreFilter("full-color", "Full color"),
GenreFilter("game", "Game"), GenreFilter("game", "Game"),
GenreFilter("gender-bender", "Gender bender"), GenreFilter("gender-bender", "Gender bender"),
@ -316,6 +326,7 @@ class MangaPark : ConfigurableSource, ParsedHttpSource() {
GenreFilter("loli", "Loli"), GenreFilter("loli", "Loli"),
GenreFilter("lolicon", "Lolicon"), GenreFilter("lolicon", "Lolicon"),
GenreFilter("long-strip", "Long strip"), GenreFilter("long-strip", "Long strip"),
GenreFilter("mafia", "Mafia"),
GenreFilter("magic", "Magic"), GenreFilter("magic", "Magic"),
GenreFilter("magical-girls", "Magical girls"), GenreFilter("magical-girls", "Magical girls"),
GenreFilter("manhwa", "Manhwa"), GenreFilter("manhwa", "Manhwa"),
@ -328,6 +339,7 @@ class MangaPark : ConfigurableSource, ParsedHttpSource() {
GenreFilter("monsters", "Monsters"), GenreFilter("monsters", "Monsters"),
GenreFilter("music", "Music"), GenreFilter("music", "Music"),
GenreFilter("mystery", "Mystery"), GenreFilter("mystery", "Mystery"),
GenreFilter("ninja", "Ninja"),
GenreFilter("office-workers", "Office workers"), GenreFilter("office-workers", "Office workers"),
GenreFilter("official-colored", "Official colored"), GenreFilter("official-colored", "Official colored"),
GenreFilter("one-shot", "One shot"), GenreFilter("one-shot", "One shot"),
@ -339,6 +351,7 @@ class MangaPark : ConfigurableSource, ParsedHttpSource() {
GenreFilter("reincarnation", "Reincarnation"), GenreFilter("reincarnation", "Reincarnation"),
GenreFilter("reverse-harem", "Reverse harem"), GenreFilter("reverse-harem", "Reverse harem"),
GenreFilter("romance", "Romance"), GenreFilter("romance", "Romance"),
GenreFilter("samurai", "Samurai"),
GenreFilter("school-life", "School life"), GenreFilter("school-life", "School life"),
GenreFilter("sci-fi", "Sci fi"), GenreFilter("sci-fi", "Sci fi"),
GenreFilter("seinen", "Seinen"), GenreFilter("seinen", "Seinen"),
@ -359,11 +372,14 @@ class MangaPark : ConfigurableSource, ParsedHttpSource() {
GenreFilter("suspense", "Suspense"), GenreFilter("suspense", "Suspense"),
GenreFilter("thriller", "Thriller"), GenreFilter("thriller", "Thriller"),
GenreFilter("time-travel", "Time travel"), GenreFilter("time-travel", "Time travel"),
GenreFilter("toomics", "Toomics"),
GenreFilter("traditional-games", "Traditional games"),
GenreFilter("tragedy", "Tragedy"), GenreFilter("tragedy", "Tragedy"),
GenreFilter("user-created", "User created"), GenreFilter("user-created", "User created"),
GenreFilter("vampire", "Vampire"), GenreFilter("vampire", "Vampire"),
GenreFilter("vampires", "Vampires"), GenreFilter("vampires", "Vampires"),
GenreFilter("video-games", "Video games"), GenreFilter("video-games", "Video games"),
GenreFilter("virtual-reality", "Virtual reality"),
GenreFilter("web-comic", "Web comic"), GenreFilter("web-comic", "Web comic"),
GenreFilter("webtoon", "Webtoon"), GenreFilter("webtoon", "Webtoon"),
GenreFilter("wuxia", "Wuxia"), GenreFilter("wuxia", "Wuxia"),
@ -372,8 +388,15 @@ class MangaPark : ConfigurableSource, ParsedHttpSource() {
GenreFilter("zombies", "Zombies") GenreFilter("zombies", "Zombies")
)), UriFilter { )), UriFilter {
override fun addToUri(uri: Uri.Builder) { override fun addToUri(uri: Uri.Builder) {
uri.appendQueryParameter("genres", state.filter { it.isIncluded() }.joinToString(",") { it.uriParam }) val genresParameterValue = state.filter { it.isIncluded() }.joinToString(",") { it.uriParam }
uri.appendQueryParameter("genres-exclude", state.filter { it.isExcluded() }.joinToString(",") { it.uriParam }) if (genresParameterValue.isNotEmpty()) {
uri.appendQueryParameter("genres", genresParameterValue)
}
val genresExcludeParameterValue = state.filter { it.isExcluded() }.joinToString(",") { it.uriParam }
if (genresExcludeParameterValue.isNotEmpty()) {
uri.appendQueryParameter("genres-exclude", genresExcludeParameterValue)
}
} }
} }
@ -431,10 +454,13 @@ class MangaPark : ConfigurableSource, ParsedHttpSource() {
private class SortFilter : UriSelectFilter("Sort", "orderby", arrayOf( private class SortFilter : UriSelectFilter("Sort", "orderby", arrayOf(
Pair("a-z", "A-Z"), Pair("a-z", "A-Z"),
Pair("views", "Views"), Pair("views_a", "Views all-time"),
Pair("views_y", "Views last 365 days"),
Pair("views_s", "Views last 180 days"),
Pair("views_t", "Views last 90 days"),
Pair("rating", "Rating"), Pair("rating", "Rating"),
Pair("latest", "Latest"), Pair("update", "Latest"),
Pair("add", "New manga") Pair("create", "New manga")
), firstIsUnspecified = false, defaultValue = 1) ), firstIsUnspecified = false, defaultValue = 1)
/** /**