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' extClass = '.SirenKomik'
themePkg = 'mangathemesia' themePkg = 'mangathemesia'
baseUrl = 'https://sirenkomik.my.id' baseUrl = 'https://sirenkomik.my.id'
overrideVersionCode = 5 overrideVersionCode = 6
} }
apply from: "$rootDir/common.gradle" 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.network.GET
import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter 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.Document
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
import java.io.IOException
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Locale import java.util.Locale
@ -27,9 +30,6 @@ class SirenKomik : MangaThemesia(
override fun chapterListSelector() = ".list-chapter a" 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 { override fun chapterFromElement(element: Element) = SChapter.create().apply {
name = element.selectFirst(".nomer-chapter")!!.text() name = element.selectFirst(".nomer-chapter")!!.text()
date_upload = element.selectFirst(".tgl-chapter")?.text().parseChapterDate() date_upload = element.selectFirst(".tgl-chapter")?.text().parseChapterDate()
@ -37,19 +37,25 @@ class SirenKomik : MangaThemesia(
} }
override fun pageListParse(document: Document): List<Page> { override fun pageListParse(document: Document): List<Page> {
// Get external JS for image urls val postId = document.select("script").map(Element::data)
val scriptEl = document.selectFirst("script[data-minify]") .firstOrNull(postIdRegex::containsMatchIn)
val scriptUrl = scriptEl?.attr("src") ?.let { postIdRegex.find(it)?.groups?.get(1)?.value }
if (scriptUrl.isNullOrEmpty()) { ?: throw IOException("Post ID not found")
return super.pageListParse(document)
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( return dto.pages.mapIndexed { index, imageUrl ->
GET(scriptUrl, headers), Page(index, document.location(), imageUrl)
).execute() }
}
// Inject external JS companion object {
scriptEl.text(scriptResponse.body.string()) val postIdRegex = """postId.:(\d+)""".toRegex()
return super.pageListParse(document)
} }
} }

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>,
)