From 08340efb2dfe522fe170965c369dc30c728c8b3b Mon Sep 17 00:00:00 2001 From: Eugene <arkon@users.noreply.github.com> Date: Fri, 6 Sep 2019 23:28:05 -0400 Subject: [PATCH] Mangakakalot: replicate query normalization (#1474) --- src/en/mangakakalot/build.gradle | 2 +- .../extension/en/mangakakalot/Mangakakalot.kt | 34 +++++++++++++++---- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/en/mangakakalot/build.gradle b/src/en/mangakakalot/build.gradle index d2678d5f0..4268b3a25 100644 --- a/src/en/mangakakalot/build.gradle +++ b/src/en/mangakakalot/build.gradle @@ -5,7 +5,7 @@ ext { appName = 'Tachiyomi: MangaKakalot' pkgNameSuffix = 'en.mangakakalot' extClass = '.Mangakakalot' - extVersionCode = 7 + extVersionCode = 8 libVersion = '1.2' } diff --git a/src/en/mangakakalot/src/eu/kanade/tachiyomi/extension/en/mangakakalot/Mangakakalot.kt b/src/en/mangakakalot/src/eu/kanade/tachiyomi/extension/en/mangakakalot/Mangakakalot.kt index cb114696b..293920336 100644 --- a/src/en/mangakakalot/src/eu/kanade/tachiyomi/extension/en/mangakakalot/Mangakakalot.kt +++ b/src/en/mangakakalot/src/eu/kanade/tachiyomi/extension/en/mangakakalot/Mangakakalot.kt @@ -1,7 +1,12 @@ package eu.kanade.tachiyomi.extension.en.mangakakalot import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.source.model.* +import eu.kanade.tachiyomi.source.model.Filter +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.ParsedHttpSource import eu.kanade.tachiyomi.util.asJsoup import okhttp3.HttpUrl @@ -56,10 +61,9 @@ class Mangakakalot : ParsedHttpSource() { override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - // Site ignores everything after the first word - val substringBefore = query.replace(" ", "_").replace(",", "_").replace(":", "_") val url = HttpUrl.parse("$baseUrl/manga_list")!!.newBuilder() url.addQueryParameter("page", page.toString()) + filters.forEach { filter -> when (filter) { is SortFilter -> { @@ -73,9 +77,11 @@ class Mangakakalot : ParsedHttpSource() { } } } - return if(query.isNotBlank()) { - GET("$baseUrl/search/$substringBefore?page=$page") - } else GET(url.build().toString(), headers) } + + return if (query.isNotBlank()) { + GET("$baseUrl/search/${normalizeSearchQuery(query)}?page=$page") + } else GET(url.build().toString(), headers) + } override fun searchMangaSelector() = ".panel_story_list .story_item" @@ -199,6 +205,22 @@ class Mangakakalot : ParsedHttpSource() { override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("No used") + // Based on change_alias JS function from website + private fun normalizeSearchQuery(query: String): String { + var str = query.toLowerCase() + str = str.replace("à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ".toRegex(), "a") + str = str.replace("è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ".toRegex(), "e") + str = str.replace("ì|í|ị|ỉ|ĩ".toRegex(), "i") + str = str.replace("ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ".toRegex(), "o") + str = str.replace("ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ".toRegex(), "u") + str = str.replace("ỳ|ý|ỵ|ỷ|ỹ".toRegex(), "y") + str = str.replace("đ".toRegex(), "d") + str = str.replace("""!|@|%|\^|\*|\(|\)|\+|=|<|>|\?|/|,|\.|:|;|'| |"|&|#|\[|]|~|-|$|_""".toRegex(), "_") + str = str.replace("_+_".toRegex(), "_") + str = str.replace("""^_+|_+$""".toRegex(), "") + return str + } + override fun getFilterList() = FilterList( Filter.Header("NOTE: Ignored if using text search!"), Filter.Separator(),