diff --git a/multisrc/overrides/mangathemesia/sushiscan/src/SushiScan.kt b/multisrc/overrides/mangathemesia/sushiscan/src/SushiScan.kt index cca6e6dd2..54e0bcb0e 100644 --- a/multisrc/overrides/mangathemesia/sushiscan/src/SushiScan.kt +++ b/multisrc/overrides/mangathemesia/sushiscan/src/SushiScan.kt @@ -3,8 +3,8 @@ package eu.kanade.tachiyomi.extension.fr.sushiscan import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.SManga -import kotlinx.serialization.json.jsonArray -import kotlinx.serialization.json.jsonPrimitive +import kotlinx.serialization.Serializable +import kotlinx.serialization.decodeFromString import org.jsoup.nodes.Document import java.text.SimpleDateFormat import java.util.Locale @@ -25,28 +25,23 @@ class SushiScan : MangaThemesia("Sushi-Scan", "https://sushiscan.net", "fr", man status = document.select(seriesStatusSelector).text().parseStatus() } - // Overriding to fix http -> https when needed override fun pageListParse(document: Document): List { - val htmlPages = document.select(pageSelector) - .filterNot { it.imgAttr().isEmpty() } - .mapIndexed { i, img -> Page(i, "", if (img.imgAttr().contains("https")) img.imgAttr() else img.imgAttr().replace("http", "https")) } - - countViews(document) - - // Some sites also loads pages via javascript - if (htmlPages.isNotEmpty()) { return htmlPages } - - val docString = document.toString() - val imageListJson = JSON_IMAGE_LIST_REGEX.find(docString)?.destructured?.toList()?.get(0).orEmpty() - val imageList = try { - json.parseToJsonElement(imageListJson).jsonArray - } catch (_: IllegalArgumentException) { - emptyList() - } - val scriptPages = imageList.mapIndexed { i, jsonEl -> - Page(i, "", jsonEl.jsonPrimitive.content) - } - - return scriptPages + val scriptContent = document.selectFirst("script:containsData(ts_reader)")?.data() + ?: return super.pageListParse(document) + val jsonString = scriptContent.substringAfter("ts_reader.run(").substringBefore(");") + val tsReader = json.decodeFromString(jsonString) + val imageUrls = tsReader.sources.firstOrNull()?.images ?: return emptyList() + return imageUrls.mapIndexed { index, imageUrl -> Page(index, document.location(), 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 37111d029..c723f0585 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 @@ -132,7 +132,7 @@ class MangaThemesiaGenerator : ThemeSourceGenerator { SingleLang("Summer Fansub", "https://smmr.in", "pt-BR", isNsfw = true), SingleLang("SummerToon", "https://summertoon.com", "tr"), SingleLang("Surya Scans", "https://suryareader.com", "en", overrideVersionCode = 1), - SingleLang("Sushi-Scan", "https://sushiscan.net", "fr", className = "SushiScan", overrideVersionCode = 6), + SingleLang("Sushi-Scan", "https://sushiscan.net", "fr", className = "SushiScan", overrideVersionCode = 7), SingleLang("Sushiscan.fr", "https://sushiscan.fr", "fr", className = "SushiScanFR"), SingleLang("Tarot Scans", "https://www.tarotscans.com", "tr"), SingleLang("Tecno Scan", "https://tecnoscann.com", "es", isNsfw = true, overrideVersionCode = 6),