Fix HentaiRead (#6408)

* Fix HentaiRead

* Change to Regex

* Added Description
This commit is contained in:
Creepler13 2024-12-03 14:18:35 +01:00 committed by Draff
parent 1c31319402
commit 023b928462
No known key found for this signature in database
GPG Key ID: E8A89F3211677653
3 changed files with 42 additions and 13 deletions

View File

@ -3,7 +3,7 @@ ext {
extClass = '.Hentairead'
themePkg = 'madara'
baseUrl = 'https://hentairead.com'
overrideVersionCode = 8
overrideVersionCode = 9
isNsfw = true
}

View File

@ -12,3 +12,28 @@ class Result(
val id: Int,
val text: String,
)
@Serializable
class ImageBaseUrlDto(
val baseUrl: String,
)
@Serializable
class PagesDto(
val data: Data,
) {
@Serializable
class Data(
val chapter: Chapter,
) {
@Serializable
class Chapter(
val images: List<Image>,
) {
@Serializable
class Image(
val src: String,
)
}
}
}

View File

@ -1,5 +1,6 @@
package eu.kanade.tachiyomi.extension.en.hentairead
import android.util.Base64
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.FilterList
@ -8,7 +9,6 @@ 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.model.UpdateStrategy
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.Request
@ -185,18 +185,27 @@ class Hentairead : Madara("HentaiRead", "https://hentairead.com", "en", dateForm
}
}
// chapterExtraData = ({...});
private val chapterExtraDataRegex = Regex("""= (\{[^;]+)""")
// window.mMjM5MjM2 = '(eyJkYX...);
private val pagesDataRegex = Regex(""".(ey\S+).\s""")
// From ManhwaHentai - modified
override fun pageListParse(document: Document): List<Page> {
launchIO { countViews(document) }
val pages = document.selectFirst("[id=single-chapter-js-extra]")?.data()
?.substringAfter(":[")
?.substringBefore("],")
?.let { json.decodeFromString<List<PageDto>>("[$it]") }
val pageBaseUrl = document.selectFirst("[id=single-chapter-js-extra]")?.data()
?.let { chapterExtraDataRegex.find(it)?.groups }?.get(1)?.value
?.let { json.decodeFromString<ImageBaseUrlDto>(it).baseUrl }
val pages = document.selectFirst("[id=single-chapter-js-before]")?.data()
?.let { pagesDataRegex.find(it)?.groups }?.get(1)?.value
?.let { json.decodeFromString<PagesDto>(String(Base64.decode(it, Base64.DEFAULT))) }
?: throw Exception("Failed to find page list. Non-English entries are not supported.")
return pages.mapIndexed { idx, page ->
Page(idx, document.location(), page.src)
return pages.data.chapter.images.mapIndexed { idx, page ->
Page(idx, document.location(), "$pageBaseUrl/${page.src}")
}
}
@ -238,8 +247,3 @@ class Hentairead : Madara("HentaiRead", "https://hentairead.com", "en", dateForm
return json.decodeFromString(body.string())
}
}
@Serializable
class PageDto(
val src: String,
)