From 2e062b2929f38e28bb49d3607a22164fb0a2a649 Mon Sep 17 00:00:00 2001 From: vulpes310 <85771934+vulpes310@users.noreply.github.com> Date: Fri, 18 Jun 2021 02:52:48 -0700 Subject: [PATCH] [Hitomi.la] Remove hardcode image path condition (#7724) [FIX] Remove hardcode image path condition Rather than hardcoded conditons for determining image path's first subdomain, the extension now dynamically load the condition by parsing the condition from Hitomi.la's common.js. This should keep the cat and mouse chase a little bit longer. [REFACTOR] Simplify regular expression for id extraction --- src/all/hitomi/build.gradle | 2 +- .../tachiyomi/extension/all/hitomi/Hitomi.kt | 20 ++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/all/hitomi/build.gradle b/src/all/hitomi/build.gradle index 74e886d0a..89b5977e5 100644 --- a/src/all/hitomi/build.gradle +++ b/src/all/hitomi/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'Hitomi.la' pkgNameSuffix = 'all.hitomi' extClass = '.HitomiFactory' - extVersionCode = 7 + extVersionCode = 8 libVersion = '1.2' containsNsfw = true } diff --git a/src/all/hitomi/src/eu/kanade/tachiyomi/extension/all/hitomi/Hitomi.kt b/src/all/hitomi/src/eu/kanade/tachiyomi/extension/all/hitomi/Hitomi.kt index f5f534447..c3ac9f6aa 100644 --- a/src/all/hitomi/src/eu/kanade/tachiyomi/extension/all/hitomi/Hitomi.kt +++ b/src/all/hitomi/src/eu/kanade/tachiyomi/extension/all/hitomi/Hitomi.kt @@ -156,10 +156,7 @@ open class Hitomi(override val lang: String, private val nozomiLang: String) : H override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { return if (query.startsWith(PREFIX_ID_SEARCH)) { - val id = NOZOMI_ID_SIMP_PATTERN.find( - NOZOMI_ID_PATTERN - .find(query.removePrefix(PREFIX_ID_SEARCH))!!.value - )!!.value.toInt() + val id = NOZOMI_ID_PATTERN.find(query.removePrefix(PREFIX_ID_SEARCH))!!.value.toInt() nozomiIdsToMangas(listOf(id)).map { mangas -> MangasPage(mangas, false) }.toObservable() @@ -370,14 +367,19 @@ open class Hitomi(override val lang: String, private val nozomiLang: String) : H // function subdomain_from_url() // Change g's if statment from !isNaN(g) private fun firstSubdomainFromGalleryId(pathSegment: String): Char { + val source = getScrambler() var numberOfFrontends = 3 var g = pathSegment.toInt(16) - if (g < 0x80) numberOfFrontends = 2 - if (g < 0x59) g = 1 - + if (g < source[0]) numberOfFrontends = 2 + if (g < source[1]) g = 1 return (97 + g.rem(numberOfFrontends)).toChar() } + private fun getScrambler(): List { + val response = client.newCall(GET("$LTN_BASE_URL/common.js")).execute() + return HEXADECIMAL.findAll(response.body!!.string()).map { Integer.decode(it.value) }.toList() + } + override fun imageRequest(page: Page): Request { val request = super.imageRequest(page) val hlId = request.url.pathSegments.let { @@ -395,8 +397,8 @@ open class Hitomi(override val lang: String, private val nozomiLang: String) : H private const val PAGE_SIZE = 25 const val PREFIX_ID_SEARCH = "id:" - val NOZOMI_ID_PATTERN = "[0-9]*.html".toRegex() - val NOZOMI_ID_SIMP_PATTERN = "[0-9]*".toRegex() + val NOZOMI_ID_PATTERN = "[0-9]*(?=.html)".toRegex() + val HEXADECIMAL = "0[xX][0-9a-fA-F]+".toRegex() // Common English words and Japanese particles private val COMMON_WORDS = listOf(