Tachiyomi-Extensions/multisrc/overrides/wpmangastream/komikstation/src/KomikStation.kt

54 lines
1.9 KiB
Kotlin

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<Page> {
val pages = mutableListOf<Page>()
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
}