[Hitomi.la] Remove hardcode image path condition ()

[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
This commit is contained in:
vulpes310 2021-06-18 02:52:48 -07:00 committed by GitHub
parent 660537f6e3
commit 2e062b2929
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 10 deletions
src/all/hitomi
build.gradle
src/eu/kanade/tachiyomi/extension/all/hitomi

@ -6,7 +6,7 @@ ext {
extName = 'Hitomi.la'
pkgNameSuffix = 'all.hitomi'
extClass = '.HitomiFactory'
extVersionCode = 7
extVersionCode = 8
libVersion = '1.2'
containsNsfw = true
}

@ -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<MangasPage> {
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<Int> {
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(