diff --git a/src/vi/blogtruyen/build.gradle b/src/vi/blogtruyen/build.gradle index 229b4b076..5e45dabf6 100644 --- a/src/vi/blogtruyen/build.gradle +++ b/src/vi/blogtruyen/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'BlogTruyen' pkgNameSuffix = 'vi.blogtruyen' extClass = '.BlogTruyen' - extVersionCode = 8 + extVersionCode = 9 } apply from: "$rootDir/common.gradle" diff --git a/src/vi/blogtruyen/src/eu/kanade/tachiyomi/extension/vi/blogtruyen/BlogTruyen.kt b/src/vi/blogtruyen/src/eu/kanade/tachiyomi/extension/vi/blogtruyen/BlogTruyen.kt index c3660aaf1..8b821b7ef 100644 --- a/src/vi/blogtruyen/src/eu/kanade/tachiyomi/extension/vi/blogtruyen/BlogTruyen.kt +++ b/src/vi/blogtruyen/src/eu/kanade/tachiyomi/extension/vi/blogtruyen/BlogTruyen.kt @@ -9,6 +9,10 @@ import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.ParsedHttpSource import eu.kanade.tachiyomi.util.asJsoup +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive import okhttp3.Headers import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.OkHttpClient @@ -16,6 +20,7 @@ import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.nodes.Element +import uy.kohesive.injekt.injectLazy import java.text.SimpleDateFormat import java.util.Locale @@ -31,6 +36,8 @@ class BlogTruyen : ParsedHttpSource() { override val client: OkHttpClient = network.cloudflareClient + private val json: Json by injectLazy() + override fun headersBuilder(): Headers.Builder = super.headersBuilder().add("Referer", baseUrl) override fun popularMangaSelector() = "div.list span.tiptip.fs-12.ellipsis" @@ -170,6 +177,18 @@ class BlogTruyen : ParsedHttpSource() { document.select("article#content > img").forEachIndexed { i, e -> pages.add(Page(i, pageUrl, e.attr("src"))) } + + // Some chapters use js script to render images + val script = document.select("article#content > script").lastOrNull() + if (script != null && script.data().contains("listImageCaption")) { + val imagesStr = script.data().split(";")[0].split("=").last().trim() + val imageArr = json.parseToJsonElement(imagesStr).jsonArray + for (image in imageArr) { + val imageUrl = image.jsonObject["url"]!!.jsonPrimitive.content + pages.add(Page(pages.size, pageUrl, imageUrl)) + } + } + return pages }