Fix bad URLs and missing pages in SS. (#15149)
This commit is contained in:
parent
9675111870
commit
900a44839d
3
multisrc/overrides/madara/sinensis/additional.gradle
Normal file
3
multisrc/overrides/madara/sinensis/additional.gradle
Normal file
@ -0,0 +1,3 @@
|
||||
dependencies {
|
||||
implementation(project(':lib-cryptoaes'))
|
||||
}
|
@ -1,10 +1,18 @@
|
||||
package eu.kanade.tachiyomi.extension.pt.sinensis
|
||||
|
||||
import android.util.Base64
|
||||
import eu.kanade.tachiyomi.lib.cryptoaes.CryptoAES
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
||||
import eu.kanade.tachiyomi.source.model.Page
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import kotlinx.serialization.decodeFromString
|
||||
import kotlinx.serialization.json.jsonArray
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import org.jsoup.nodes.Document
|
||||
import org.jsoup.nodes.Element
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
@ -26,19 +34,68 @@ class SinensisScan : Madara(
|
||||
|
||||
override fun popularMangaFromElement(element: Element): SManga {
|
||||
return super.popularMangaFromElement(element).apply {
|
||||
url = url.removePrefix("/home")
|
||||
setUrlWithoutDomain(url.removeBadPath("manga"))
|
||||
}
|
||||
}
|
||||
|
||||
override fun searchMangaFromElement(element: Element): SManga {
|
||||
return super.searchMangaFromElement(element).apply {
|
||||
url = url.removePrefix("/home")
|
||||
setUrlWithoutDomain(url.removeBadPath("manga"))
|
||||
}
|
||||
}
|
||||
|
||||
override fun chapterFromElement(element: Element): SChapter {
|
||||
return super.chapterFromElement(element).apply {
|
||||
url = url.removePrefix("/home")
|
||||
setUrlWithoutDomain(url.removeBadPath("manga"))
|
||||
}
|
||||
}
|
||||
|
||||
override fun pageListParse(document: Document): List<Page> {
|
||||
val chapterProtector = document.selectFirst("script#chapter-protector-data")?.data()
|
||||
?: return super.pageListParse(document)
|
||||
|
||||
val password = chapterProtector
|
||||
.substringAfter("wpmangaprotectornonce='")
|
||||
.substringBefore("';")
|
||||
val chapterData = chapterProtector
|
||||
.substringAfter("chapter_data='")
|
||||
.substringBefore("';")
|
||||
.replace("\\/", "/")
|
||||
.let { json.decodeFromString<Map<String, String>>(it) }
|
||||
|
||||
val unsaltedCipherText = Base64.decode(chapterData["ct"]!!, Base64.DEFAULT)
|
||||
val salt = chapterData["s"]!!.decodeHex()
|
||||
val cipherText = SALTED + salt + unsaltedCipherText
|
||||
|
||||
val rawImageArray = CryptoAES.decrypt(Base64.encodeToString(cipherText, Base64.DEFAULT), password)
|
||||
val imageArrayString = json.parseToJsonElement(rawImageArray).jsonPrimitive.content
|
||||
val imageArray = json.parseToJsonElement(imageArrayString).jsonArray
|
||||
|
||||
return imageArray.mapIndexed { i, jsonElement ->
|
||||
Page(i, document.location(), jsonElement.jsonPrimitive.content)
|
||||
}
|
||||
}
|
||||
|
||||
private fun String.decodeHex(): ByteArray {
|
||||
check(length % 2 == 0) { "Must have an even length" }
|
||||
|
||||
return chunked(2)
|
||||
.map { it.toInt(16).toByte() }
|
||||
.toByteArray()
|
||||
}
|
||||
|
||||
private fun String.removeBadPath(expectedFirstPath: String): String {
|
||||
val fullUrl = if (contains(baseUrl)) this else (baseUrl + this)
|
||||
val url = fullUrl.toHttpUrl()
|
||||
|
||||
if (url.pathSegments.firstOrNull() != expectedFirstPath) {
|
||||
return url.newBuilder().removePathSegment(0).toString()
|
||||
}
|
||||
|
||||
return url.toString()
|
||||
}
|
||||
|
||||
companion object {
|
||||
val SALTED = "Salted__".toByteArray(Charsets.UTF_8)
|
||||
}
|
||||
}
|
||||
|
@ -375,7 +375,7 @@ class MadaraGenerator : ThemeSourceGenerator {
|
||||
SingleLang("Shirai Scans", "https://shiraiscans.com.br", "pt-BR"),
|
||||
SingleLang("Shooting Star Scans", "https://shootingstarscans.com", "en"),
|
||||
SingleLang("ShoujoHearts", "https://shoujohearts.com", "en", overrideVersionCode = 2),
|
||||
SingleLang("Sinensis Scan", "https://sinensisscans.com", "pt-BR", pkgName = "sinensis", overrideVersionCode = 4),
|
||||
SingleLang("Sinensis Scan", "https://sinensisscans.com", "pt-BR", pkgName = "sinensis", overrideVersionCode = 5),
|
||||
SingleLang("SISI GELAP", "https://sigel.asia", "id", overrideVersionCode = 4),
|
||||
SingleLang("Siyahmelek", "https://siyahmelek.net", "tr", isNsfw = true, overrideVersionCode = 3),
|
||||
SingleLang("SkyManga.xyz", "https://skymanga.xyz", "en", isNsfw = true, className = "SkyMangaXyz"),
|
||||
|
Loading…
x
Reference in New Issue
Block a user