package eu.kanade.tachiyomi.extension.id.komikstation import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.multisrc.wpmangastream.WPMangaStream import eu.kanade.tachiyomi.source.model.Page import kotlinx.serialization.json.Json import kotlinx.serialization.json.jsonArray import kotlinx.serialization.json.jsonPrimitive import okhttp3.OkHttpClient import org.jsoup.nodes.Document import uy.kohesive.injekt.injectLazy import java.util.concurrent.TimeUnit class KomikStation : WPMangaStream("Komik Station", "https://komikstation.com", "id") { // Formerly "Komik Station (WP Manga Stream)" override val id = 6148605743576635261 private val rateLimitInterceptor = RateLimitInterceptor(4) override val client: OkHttpClient = network.cloudflareClient.newBuilder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .addNetworkInterceptor(rateLimitInterceptor) .build() private val json: Json by injectLazy() override fun pageListParse(document: Document): List { val pages = mutableListOf() document.select(pageSelector) .filterNot { it.attr("abs:src").isNullOrEmpty() } .mapIndexed { i, img -> pages.add(Page(i, "", img.attr("abs:src"))) } // Some sites like mangakita now load pages via javascript if (pages.isNotEmpty()) { return pages } val docString = document.toString() val imageListRegex = Regex("\\\"images.*?:.*?(\\[.*?\\])") val imageListJson = imageListRegex.find(docString)!!.destructured.toList()[0] val imageList = json.parseToJsonElement(imageListJson).jsonArray pages += imageList.mapIndexed { i, jsonEl -> Page(i, "", jsonEl.jsonPrimitive.content) } return pages } override val projectPageString = "/project-list" override val hasProjectPage = true }