SirenKomik: Fix loading pages (#7453)

Fix loading pages
This commit is contained in:
Chopper 2025-02-02 05:28:27 -03:00 committed by Draff
parent deb32e6f28
commit 0a3f608727
No known key found for this signature in database
GPG Key ID: E8A89F3211677653
3 changed files with 42 additions and 15 deletions

View File

@ -3,7 +3,7 @@ ext {
extClass = '.SirenKomik'
themePkg = 'mangathemesia'
baseUrl = 'https://sirenkomik.my.id'
overrideVersionCode = 5
overrideVersionCode = 6
}
apply from: "$rootDir/common.gradle"

View File

@ -4,8 +4,11 @@ import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter
import kotlinx.serialization.json.decodeFromStream
import okhttp3.HttpUrl.Companion.toHttpUrl
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import java.io.IOException
import java.text.SimpleDateFormat
import java.util.Locale
@ -27,9 +30,6 @@ class SirenKomik : MangaThemesia(
override fun chapterListSelector() = ".list-chapter a"
// Overridden since MangeThemesia doesn't search for jsonData in script tags, because it finds the bait images with the default selector
override val pageSelector: String = ":not(*)"
override fun chapterFromElement(element: Element) = SChapter.create().apply {
name = element.selectFirst(".nomer-chapter")!!.text()
date_upload = element.selectFirst(".tgl-chapter")?.text().parseChapterDate()
@ -37,19 +37,25 @@ class SirenKomik : MangaThemesia(
}
override fun pageListParse(document: Document): List<Page> {
// Get external JS for image urls
val scriptEl = document.selectFirst("script[data-minify]")
val scriptUrl = scriptEl?.attr("src")
if (scriptUrl.isNullOrEmpty()) {
return super.pageListParse(document)
val postId = document.select("script").map(Element::data)
.firstOrNull(postIdRegex::containsMatchIn)
?.let { postIdRegex.find(it)?.groups?.get(1)?.value }
?: throw IOException("Post ID not found")
val pageUrl = "$baseUrl/wp-json/extras/v1/get-img-json".toHttpUrl().newBuilder()
.addQueryParameter("post_id", postId)
.build()
val dto = client.newCall(GET(pageUrl, headers)).execute().use {
json.decodeFromStream<SirenKomikDto>(it.body.byteStream())
}
val scriptResponse = client.newCall(
GET(scriptUrl, headers),
).execute()
return dto.pages.mapIndexed { index, imageUrl ->
Page(index, document.location(), imageUrl)
}
}
// Inject external JS
scriptEl.text(scriptResponse.body.string())
return super.pageListParse(document)
companion object {
val postIdRegex = """postId.:(\d+)""".toRegex()
}
}

View File

@ -0,0 +1,21 @@
package eu.kanade.tachiyomi.extension.id.mangkomik
import kotlinx.serialization.Serializable
@Serializable
data class SirenKomikDto(
val `data`: Data,
) {
val pages get() = data.sources.firstOrNull()?.images ?: emptyList()
}
@Serializable
class Source(
val images: List<String>,
val source: String,
)
@Serializable
class Data(
val sources: List<Source>,
)