[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
This commit is contained in:
parent
660537f6e3
commit
2e062b2929
@ -6,7 +6,7 @@ ext {
|
|||||||
extName = 'Hitomi.la'
|
extName = 'Hitomi.la'
|
||||||
pkgNameSuffix = 'all.hitomi'
|
pkgNameSuffix = 'all.hitomi'
|
||||||
extClass = '.HitomiFactory'
|
extClass = '.HitomiFactory'
|
||||||
extVersionCode = 7
|
extVersionCode = 8
|
||||||
libVersion = '1.2'
|
libVersion = '1.2'
|
||||||
containsNsfw = true
|
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> {
|
override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> {
|
||||||
return if (query.startsWith(PREFIX_ID_SEARCH)) {
|
return if (query.startsWith(PREFIX_ID_SEARCH)) {
|
||||||
val id = NOZOMI_ID_SIMP_PATTERN.find(
|
val id = NOZOMI_ID_PATTERN.find(query.removePrefix(PREFIX_ID_SEARCH))!!.value.toInt()
|
||||||
NOZOMI_ID_PATTERN
|
|
||||||
.find(query.removePrefix(PREFIX_ID_SEARCH))!!.value
|
|
||||||
)!!.value.toInt()
|
|
||||||
nozomiIdsToMangas(listOf(id)).map { mangas ->
|
nozomiIdsToMangas(listOf(id)).map { mangas ->
|
||||||
MangasPage(mangas, false)
|
MangasPage(mangas, false)
|
||||||
}.toObservable()
|
}.toObservable()
|
||||||
@ -370,14 +367,19 @@ open class Hitomi(override val lang: String, private val nozomiLang: String) : H
|
|||||||
// function subdomain_from_url()
|
// function subdomain_from_url()
|
||||||
// Change g's if statment from !isNaN(g)
|
// Change g's if statment from !isNaN(g)
|
||||||
private fun firstSubdomainFromGalleryId(pathSegment: String): Char {
|
private fun firstSubdomainFromGalleryId(pathSegment: String): Char {
|
||||||
|
val source = getScrambler()
|
||||||
var numberOfFrontends = 3
|
var numberOfFrontends = 3
|
||||||
var g = pathSegment.toInt(16)
|
var g = pathSegment.toInt(16)
|
||||||
if (g < 0x80) numberOfFrontends = 2
|
if (g < source[0]) numberOfFrontends = 2
|
||||||
if (g < 0x59) g = 1
|
if (g < source[1]) g = 1
|
||||||
|
|
||||||
return (97 + g.rem(numberOfFrontends)).toChar()
|
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 {
|
override fun imageRequest(page: Page): Request {
|
||||||
val request = super.imageRequest(page)
|
val request = super.imageRequest(page)
|
||||||
val hlId = request.url.pathSegments.let {
|
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
|
private const val PAGE_SIZE = 25
|
||||||
|
|
||||||
const val PREFIX_ID_SEARCH = "id:"
|
const val PREFIX_ID_SEARCH = "id:"
|
||||||
val NOZOMI_ID_PATTERN = "[0-9]*.html".toRegex()
|
val NOZOMI_ID_PATTERN = "[0-9]*(?=.html)".toRegex()
|
||||||
val NOZOMI_ID_SIMP_PATTERN = "[0-9]*".toRegex()
|
val HEXADECIMAL = "0[xX][0-9a-fA-F]+".toRegex()
|
||||||
|
|
||||||
// Common English words and Japanese particles
|
// Common English words and Japanese particles
|
||||||
private val COMMON_WORDS = listOf(
|
private val COMMON_WORDS = listOf(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user