From 18aed05f8950535e4dcc9a0ead3f731651b62ada Mon Sep 17 00:00:00 2001 From: Slowlife Date: Wed, 10 May 2023 20:44:20 +0700 Subject: [PATCH] Manhua SY: Fix chapter pages and latest/popular manhua (#16376) * Manhua SY: Fix chapter pages and latest/popular manhua * reformat --- .../madara/manhuasy/additional.gradle | 3 ++ .../overrides/madara/manhuasy/src/ManhuaSY.kt | 53 +++++++++++++++++++ .../multisrc/madara/MadaraGenerator.kt | 2 +- 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 multisrc/overrides/madara/manhuasy/additional.gradle create mode 100644 multisrc/overrides/madara/manhuasy/src/ManhuaSY.kt diff --git a/multisrc/overrides/madara/manhuasy/additional.gradle b/multisrc/overrides/madara/manhuasy/additional.gradle new file mode 100644 index 000000000..06abd18c6 --- /dev/null +++ b/multisrc/overrides/madara/manhuasy/additional.gradle @@ -0,0 +1,3 @@ +dependencies { + implementation(project(':lib-cryptoaes')) +} \ No newline at end of file diff --git a/multisrc/overrides/madara/manhuasy/src/ManhuaSY.kt b/multisrc/overrides/madara/manhuasy/src/ManhuaSY.kt new file mode 100644 index 000000000..d4bebcedf --- /dev/null +++ b/multisrc/overrides/madara/manhuasy/src/ManhuaSY.kt @@ -0,0 +1,53 @@ +package eu.kanade.tachiyomi.extension.en.manhuasy + +import android.util.Base64 +import eu.kanade.tachiyomi.lib.cryptoaes.CryptoAES +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.source.model.Page +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import org.jsoup.nodes.Document + +class ManhuaSY : Madara("Manhua SY", "https://www.manhuasy.com", "en") { + override val mangaSubString = "manhua" + override fun pageListParse(document: Document): List { + val chapterProtector = document.getElementById("chapter-protector-data")?.html() + ?: return super.pageListParse(document) + + val password = chapterProtector + .substringAfter("wpmangaprotectornonce='") + .substringBefore("';") + val chapterData = json.parseToJsonElement( + chapterProtector + .substringAfter("chapter_data='") + .substringBefore("';") + .replace("\\/", "/"), + ).jsonObject + + val unsaltedCiphertext = Base64.decode(chapterData["ct"]!!.jsonPrimitive.content, Base64.DEFAULT) + val salt = chapterData["s"]!!.jsonPrimitive.content.decodeHex() + val ciphertext = SALTED + salt + unsaltedCiphertext + + val rawImgArray = CryptoAES.decrypt(Base64.encodeToString(ciphertext, Base64.DEFAULT), password) + val imgArrayString = json.parseToJsonElement(rawImgArray).jsonPrimitive.content + val imgArray = json.parseToJsonElement(imgArrayString).jsonArray + + return imgArray.mapIndexed { idx, it -> + Page(idx, document.location(), it.jsonPrimitive.content) + } + } + + // https://stackoverflow.com/a/66614516 + private fun String.decodeHex(): ByteArray { + check(length % 2 == 0) { "Must have an even length" } + + return chunked(2) + .map { it.toInt(16).toByte() } + .toByteArray() + } + + companion object { + val SALTED = "Salted__".toByteArray(Charsets.UTF_8) + } +} diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt index c5c6bc2de..dce023715 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt @@ -273,7 +273,7 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("Manhua ES", "https://manhuaes.com", "en", overrideVersionCode = 6), SingleLang("Manhua Kiss", "https://manhuakiss.com", "en", isNsfw = true, overrideVersionCode = 1), SingleLang("Manhua Plus", "https://manhuaplus.com", "en", overrideVersionCode = 6), - SingleLang("Manhua SY", "https://www.manhuasy.com", "en", overrideVersionCode = 1), + SingleLang("Manhua SY", "https://www.manhuasy.com", "en", overrideVersionCode = 2), SingleLang("ManhuaBox", "https://manhuabox.net", "en", overrideVersionCode = 2), SingleLang("ManhuaChill", "https://manhuachill.com", "en"), SingleLang("ManhuaFast", "https://manhuafast.com", "en", overrideVersionCode = 2),