From abe47d81f259a8133e95c1f32e02e13ef36413d6 Mon Sep 17 00:00:00 2001 From: Vetle Ledaal Date: Sun, 10 Sep 2023 18:44:57 +0000 Subject: [PATCH] Nekomik: update domain, and deobfuscate page list (#17876) --- .../mangathemesia/nekomik/src/Nekomik.kt | 37 ++++++++++++++++++- .../mangathemesia/MangaThemesiaGenerator.kt | 2 +- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/multisrc/overrides/mangathemesia/nekomik/src/Nekomik.kt b/multisrc/overrides/mangathemesia/nekomik/src/Nekomik.kt index e396c0e02..79eb502be 100644 --- a/multisrc/overrides/mangathemesia/nekomik/src/Nekomik.kt +++ b/multisrc/overrides/mangathemesia/nekomik/src/Nekomik.kt @@ -1,14 +1,49 @@ package eu.kanade.tachiyomi.extension.id.nekomik +import app.cash.quickjs.QuickJs import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia import eu.kanade.tachiyomi.network.interceptor.rateLimit +import eu.kanade.tachiyomi.source.model.Page +import kotlinx.serialization.Serializable +import kotlinx.serialization.decodeFromString import okhttp3.OkHttpClient +import org.jsoup.nodes.Document -class Nekomik : MangaThemesia("Nekomik", "https://nekomik.com", "id") { +class Nekomik : MangaThemesia("Nekomik", "https://nekomik.me", "id") { override val client: OkHttpClient = super.client.newBuilder() .rateLimit(4) .build() override val hasProjectPage = true + + override fun pageListParse(document: Document): List { + val obfuscatedJs = document.selectFirst("script:containsData(fromCharCode)")?.data() + ?: return super.pageListParse(document) + + val data = QuickJs.create().use { context -> + context.evaluate( + """ + ts_reader = { run: function(...args) { whatever = args[0] } }; + $obfuscatedJs; + JSON.stringify(whatever); + """.trimIndent(), + ) as String + } + + val tsReader = json.decodeFromString(data) + val imageUrls = tsReader.sources.firstOrNull()?.images ?: return emptyList() + return imageUrls.mapIndexed { index, imageUrl -> Page(index, imageUrl = imageUrl) } + } + + @Serializable + data class TSReader( + val sources: List, + ) + + @Serializable + data class ReaderImageSource( + val source: String, + val images: List, + ) } diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt index 4dce9dede..71758711b 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt @@ -91,7 +91,7 @@ class MangaThemesiaGenerator : ThemeSourceGenerator { SingleLang("MirrorDesu", "https://mirrordesu.me", "id", isNsfw = true), SingleLang("Moon Daisy Scans", "https://moondaisyscans.com", "tr", isNsfw = true), SingleLang("Mundo Mangá-Kun", "https://mundomangakun.com.br", "pt-BR", className = "MundoMangaKun", isNsfw = true), - SingleLang("Nekomik", "https://nekomik.com", "id"), + SingleLang("Nekomik", "https://nekomik.me", "id", overrideVersionCode = 1), SingleLang("Ngomik", "https://ngomik.net", "id", overrideVersionCode = 2), SingleLang("NIGHT SCANS", "https://nightscans.org", "en", isNsfw = true, className = "NightScans", overrideVersionCode = 1), SingleLang("Nocturnal Scans", "https://nocturnalscans.com", "en", overrideVersionCode = 1),