parent
deb32e6f28
commit
0a3f608727
|
@ -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"
|
||||||
|
|
|
@ -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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>,
|
||||||
|
)
|
Loading…
Reference in New Issue