From 400bef1ea40bc020affe0716623892682a3b364f Mon Sep 17 00:00:00 2001 From: Ota <106656898+Opi-Txm@users.noreply.github.com> Date: Thu, 7 Dec 2023 14:34:34 +0100 Subject: [PATCH] IMHentai: New Speechless Language Filter (#19206) Added Speechless Language Filter --- src/all/imhentai/build.gradle | 2 +- .../extension/all/imhentai/IMHentai.kt | 59 +++++++++++-------- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/src/all/imhentai/build.gradle b/src/all/imhentai/build.gradle index 47c470a48..1905c4fe2 100644 --- a/src/all/imhentai/build.gradle +++ b/src/all/imhentai/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'IMHentai' pkgNameSuffix = 'all.imhentai' extClass = '.IMHentaiFactory' - extVersionCode = 13 + extVersionCode = 14 isNsfw = true } diff --git a/src/all/imhentai/src/eu/kanade/tachiyomi/extension/all/imhentai/IMHentai.kt b/src/all/imhentai/src/eu/kanade/tachiyomi/extension/all/imhentai/IMHentai.kt index 4d806ce98..339d807e2 100644 --- a/src/all/imhentai/src/eu/kanade/tachiyomi/extension/all/imhentai/IMHentai.kt +++ b/src/all/imhentai/src/eu/kanade/tachiyomi/extension/all/imhentai/IMHentai.kt @@ -110,33 +110,41 @@ class IMHentai(override val lang: String, private val imhLang: String) : ParsedH private fun toBinary(boolean: Boolean) = if (boolean) "1" else "0" override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = "$baseUrl/search".toHttpUrlOrNull()!!.newBuilder() - .addQueryParameter("key", query) - .addQueryParameter("page", page.toString()) - .addQueryParameter(getLanguageURIByName(imhLang).uri, toBinary(true)) // main language always enabled + if (filters.any { it is LanguageFilters && it.state.any { it.name == LANGUAGE_SPEECHLESS && it.state } }) { // edge case for language = speechless + val url = "$baseUrl/language/speechless/".toHttpUrlOrNull()!!.newBuilder() - (if (filters.isEmpty()) getFilterList() else filters).forEach { filter -> - when (filter) { - is LanguageFilters -> { - filter.state.forEach { - url.addQueryParameter(it.uri, toBinary(it.state)) - } - } - is CategoryFilters -> { - filter.state.forEach { - url.addQueryParameter(it.uri, toBinary(it.state)) - } - } - is SortOrderFilter -> { - getSortOrderURIs().forEachIndexed { index, pair -> - url.addQueryParameter(pair.second, toBinary(filter.state == index)) - } - } - else -> {} + if ((if (filters.isEmpty()) getFilterList() else filters).filterIsInstance<SortOrderFilter>()[0].state == 0) { + url.addPathSegment("popular") } - } + return GET(url.toString()) + } else { + val url = "$baseUrl/search".toHttpUrlOrNull()!!.newBuilder() + .addQueryParameter("key", query) + .addQueryParameter("page", page.toString()) + .addQueryParameter(getLanguageURIByName(imhLang).uri, toBinary(true)) // main language always enabled - return GET(url.toString()) + (if (filters.isEmpty()) getFilterList() else filters).forEach { filter -> + when (filter) { + is LanguageFilters -> { + filter.state.forEach { + url.addQueryParameter(it.uri, toBinary(it.state)) + } + } + is CategoryFilters -> { + filter.state.forEach { + url.addQueryParameter(it.uri, toBinary(it.state)) + } + } + is SortOrderFilter -> { + getSortOrderURIs().forEachIndexed { index, pair -> + url.addQueryParameter(pair.second, toBinary(filter.state == index)) + } + } + else -> {} + } + } + return GET(url.toString()) + } } override fun searchMangaSelector(): String = popularMangaSelector() @@ -264,6 +272,7 @@ class IMHentai(override val lang: String, private val imhLang: String) : ParsedH SortOrderFilter(getSortOrderURIs(), sortOrderState), CategoryFilters(getCategoryURIs()), LanguageFilters(getLanguageURIs().filter { it.name != imhLang }), // exclude main lang + Filter.Header("Speechless language: ignores all filters except \"Popular\" and \"Latest\" in Sorting Filter"), ) private fun getCategoryURIs() = listOf( @@ -291,6 +300,7 @@ class IMHentai(override val lang: String, private val imhLang: String) : ParsedH LanguageFilter(LANGUAGE_KOREAN, "kr"), LanguageFilter(LANGUAGE_GERMAN, "de"), LanguageFilter(LANGUAGE_RUSSIAN, "ru"), + LanguageFilter(LANGUAGE_SPEECHLESS, ""), ) private fun getLanguageURIByName(name: String): LanguageFilter { @@ -312,5 +322,6 @@ class IMHentai(override val lang: String, private val imhLang: String) : ParsedH const val LANGUAGE_KOREAN = "Korean" const val LANGUAGE_GERMAN = "German" const val LANGUAGE_RUSSIAN = "Russian" + const val LANGUAGE_SPEECHLESS = "Speechless" } }