From 04ca6e2fb7d7252f2850fe9df162b3339a664317 Mon Sep 17 00:00:00 2001 From: beerpsi <92439990+beerpiss@users.noreply.github.com> Date: Sun, 14 Jan 2024 17:18:04 +0700 Subject: [PATCH] Add ColaManga/ColaManhua (#243) * Add ColaManhua * Remove unneeded preference change listener Co-authored-by: stevenyomi <95685115+stevenyomi@users.noreply.github.com> --------- Co-authored-by: stevenyomi <95685115+stevenyomi@users.noreply.github.com> --- src/zh/onemanhua/AndroidManifest.xml | 2 + src/zh/onemanhua/build.gradle | 16 + .../onemanhua/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3010 bytes .../onemanhua/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1609 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4274 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7962 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11454 bytes .../extension/zh/onemanhua/Onemanhua.kt | 394 ++++++++++++++++++ 8 files changed, 412 insertions(+) create mode 100644 src/zh/onemanhua/AndroidManifest.xml create mode 100644 src/zh/onemanhua/build.gradle create mode 100644 src/zh/onemanhua/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/zh/onemanhua/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/zh/onemanhua/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/zh/onemanhua/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/zh/onemanhua/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/zh/onemanhua/src/eu/kanade/tachiyomi/extension/zh/onemanhua/Onemanhua.kt diff --git a/src/zh/onemanhua/AndroidManifest.xml b/src/zh/onemanhua/AndroidManifest.xml new file mode 100644 index 000000000..85f9d2409 --- /dev/null +++ b/src/zh/onemanhua/AndroidManifest.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest package="eu.kanade.tachiyomi.extension" /> diff --git a/src/zh/onemanhua/build.gradle b/src/zh/onemanhua/build.gradle new file mode 100644 index 000000000..4cfe9cfd5 --- /dev/null +++ b/src/zh/onemanhua/build.gradle @@ -0,0 +1,16 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlinx-serialization' + +ext { + extName = 'ColaManhua (OhManhua)' + pkgNameSuffix = 'zh.onemanhua' + extClass = '.Onemanhua' + extVersionCode = 12 +} + +dependencies { + implementation(project(":lib-synchrony")) +} + +apply from: "$rootDir/common.gradle" diff --git a/src/zh/onemanhua/res/mipmap-hdpi/ic_launcher.png b/src/zh/onemanhua/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..39a379fdf0a8049c71edea13c44772becadce4ef GIT binary patch literal 3010 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 Ef=fK7p#T5? literal 0 HcmV?d00001 diff --git a/src/zh/onemanhua/res/mipmap-mdpi/ic_launcher.png b/src/zh/onemanhua/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..37e5873ed4cc5bbb56211ef992ad81716ecbcca5 GIT binary patch literal 1609 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 Hu0mjf+7|fT literal 0 HcmV?d00001 diff --git a/src/zh/onemanhua/res/mipmap-xhdpi/ic_launcher.png b/src/zh/onemanhua/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..558c74c88b29782b217b55efe86972993e447e75 GIT binary patch literal 4274 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 U*(k!!&j0`b07*qoM6N<$g7*0uIRF3v literal 0 HcmV?d00001 diff --git a/src/zh/onemanhua/res/mipmap-xxhdpi/ic_launcher.png b/src/zh/onemanhua/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..fd1d7c0b61154d5400d45b7fb42553c23279860b GIT binary patch literal 7962 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 literal 0 HcmV?d00001 diff --git a/src/zh/onemanhua/res/mipmap-xxxhdpi/ic_launcher.png b/src/zh/onemanhua/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..91c62beda484711c3c00a3aaa33883b5378bc608 GIT binary patch literal 11454 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 PkPN6QYAH0lu#Ws66bP&w literal 0 HcmV?d00001 diff --git a/src/zh/onemanhua/src/eu/kanade/tachiyomi/extension/zh/onemanhua/Onemanhua.kt b/src/zh/onemanhua/src/eu/kanade/tachiyomi/extension/zh/onemanhua/Onemanhua.kt new file mode 100644 index 000000000..be13bda3c --- /dev/null +++ b/src/zh/onemanhua/src/eu/kanade/tachiyomi/extension/zh/onemanhua/Onemanhua.kt @@ -0,0 +1,394 @@ +package eu.kanade.tachiyomi.extension.zh.onemanhua + +import android.annotation.SuppressLint +import android.app.Application +import android.content.SharedPreferences +import android.os.Handler +import android.os.Looper +import android.util.Log +import android.view.View +import android.webkit.ConsoleMessage +import android.webkit.CookieManager +import android.webkit.JavascriptInterface +import android.webkit.WebChromeClient +import android.webkit.WebView +import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.lib.synchrony.Deobfuscator +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.interceptor.rateLimitHost +import eu.kanade.tachiyomi.source.ConfigurableSource +import eu.kanade.tachiyomi.source.model.Filter +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.source.online.ParsedHttpSource +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import okhttp3.Headers +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.ResponseBody.Companion.toResponseBody +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import uy.kohesive.injekt.injectLazy +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit +import javax.crypto.Cipher +import javax.crypto.spec.IvParameterSpec +import javax.crypto.spec.SecretKeySpec + +// Originally, the site was called One漫画. The name has been changing every once in awhile +class Onemanhua : ConfigurableSource, ParsedHttpSource() { + override val id = 8252565807829914103 // name used to be "One漫画" + override val lang = "zh" + override val supportsLatest = true + override val name = "COLA漫画 (OH漫画)" + override val baseUrl = "https://www.colamanga.com" + + // Preference setting + private val preferences: SharedPreferences by lazy { + Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000) + } + + private val cookieManager by lazy { CookieManager.getInstance() } + + override val client: OkHttpClient = network.cloudflareClient.newBuilder() + .rateLimitHost( + baseUrl.toHttpUrl(), + preferences.getString(MAINSITE_RATEPERMITS_PREF, MAINSITE_RATEPERMITS_PREF_DEFAULT)!!.toInt(), + preferences.getString(MAINSITE_RATEPERIOD_PREF, MAINSITE_RATEPERIOD_PREF_DEFAULT)!!.toLong(), + TimeUnit.MILLISECONDS, + ) + .addInterceptor { chain -> + val response = chain.proceed(chain.request()) + + if (response.request.url.fragment?.contains("key") != true) { + return@addInterceptor response + } + + val keyStr = response.request.url.fragment!!.substringAfter("key=") + val key = keyStr.toByteArray() + + val cipher = Cipher.getInstance("AES/CBC/PKCS7Padding") + cipher.init( + Cipher.DECRYPT_MODE, + SecretKeySpec(key, "AES"), + IvParameterSpec("0000000000000000".toByteArray()), + ) + + val output = cipher.doFinal(response.body.bytes()) + response.newBuilder() + .body(output.toResponseBody("image/jpeg".toMediaType())) + .build() + } + .build() + + override fun headersBuilder(): Headers.Builder = Headers.Builder() + .add("Origin", baseUrl) + .add("Referer", "$baseUrl/") + + // Common + private var commonSelector = "li.fed-list-item" + private var commonNextPageSelector = "a:contains(下页):not(.fed-btns-disad)" + private fun commonMangaFromElement(element: Element): SManga { + val picElement = element.selectFirst("a.fed-list-pics")!! + val manga = SManga.create().apply { + title = element.selectFirst("a.fed-list-title")!!.text() + thumbnail_url = picElement.attr("data-original") + } + + manga.setUrlWithoutDomain(picElement.attr("href")) + + return manga + } + + // Popular Manga + override fun popularMangaRequest(page: Int) = GET("$baseUrl/show?orderBy=dailyCount&page=$page", headers) + override fun popularMangaNextPageSelector() = commonNextPageSelector + override fun popularMangaSelector() = commonSelector + override fun popularMangaFromElement(element: Element) = commonMangaFromElement(element) + + // Latest Updates + override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/show?orderBy=update&page=$page", headers) + override fun latestUpdatesNextPageSelector() = commonNextPageSelector + override fun latestUpdatesSelector() = commonSelector + override fun latestUpdatesFromElement(element: Element) = commonMangaFromElement(element) + + // Filter + private class StatusFilter : Filter.TriState("已完结") + private class SortFilter : Filter.Select<String>("排序", arrayOf("更新日", "收录日", "日点击", "月点击"), 2) + + override fun getFilterList() = FilterList( + SortFilter(), + StatusFilter(), + ) + + // Search + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + return if (query.isNotBlank()) { + GET("$baseUrl/search?searchString=$query&page=$page", headers) + } else { + val url = "$baseUrl/show".toHttpUrl().newBuilder() + url.addQueryParameter("page", page.toString()) + + filters.forEach { filter -> + when (filter) { + is StatusFilter -> { + if (!filter.isIgnored()) { + url.addQueryParameter("status", arrayOf("0", "2", "1")[filter.state]) + } + } + is SortFilter -> { + url.addQueryParameter("orderBy", arrayOf("update", "create", "dailyCount", "weeklyCount", "monthlyCount")[filter.state]) + } + else -> {} + } + } + GET(url.toString(), headers) + } + } + + override fun searchMangaNextPageSelector() = commonNextPageSelector + override fun searchMangaSelector() = "dl.fed-deta-info, $commonSelector" + override fun searchMangaFromElement(element: Element): SManga { + if (element.tagName() == "li") { + return commonMangaFromElement(element) + } + + val picElement = element.selectFirst("a.fed-list-pics")!! + val manga = SManga.create().apply { + title = element.selectFirst("h1.fed-part-eone a")!!.text() + thumbnail_url = picElement.attr("data-original") + } + + manga.setUrlWithoutDomain(picElement.attr("href")) + + return manga + } + + override fun mangaDetailsParse(document: Document): SManga { + val picElement = document.selectFirst("a.fed-list-pics")!! + val detailElements = document.select("ul.fed-part-rows li.fed-col-xs12") + return SManga.create().apply { + title = document.selectFirst("h1.fed-part-eone")!!.text().trim() + thumbnail_url = picElement.attr("data-original") + + status = when ( + detailElements.firstOrNull { + it.children().firstOrNull { it2 -> + it2.hasClass("fed-text-muted") && it2.ownText() == "状态" + } != null + }?.select("a")?.first()?.text() + ) { + "连载中" -> SManga.ONGOING + "已完结" -> SManga.COMPLETED + else -> SManga.UNKNOWN + } + + author = detailElements.firstOrNull { + it.children().firstOrNull { it2 -> + it2.hasClass("fed-text-muted") && it2.ownText() == "作者" + } != null + }?.select("a")?.first()?.text() + + genre = detailElements.firstOrNull { + it.children().firstOrNull { it2 -> + it2.hasClass("fed-text-muted") && it2.ownText() == "类别" + } != null + }?.select("a")?.joinToString { it.text() } + + description = document.select("ul.fed-part-rows li.fed-col-xs12.fed-show-md-block .fed-part-esan") + .firstOrNull()?.text()?.trim() + } + } + + override fun chapterListSelector(): String = "div:not(.fed-hidden) > div.all_data_list > ul.fed-part-rows a" + + override fun chapterFromElement(element: Element): SChapter { + val chapter = SChapter.create().apply { + name = element.attr("title") + } + chapter.setUrlWithoutDomain(element.attr("href")) + return chapter + } + + private fun randomString(length: Int = 10): String { + val charPool = ('a'..'z') + ('A'..'Z') + return List(length) { charPool.random() }.joinToString("") + } + + internal class JsObject(val latch: CountDownLatch, val cookieManager: CookieManager) { + + private val json: Json by injectLazy() + + var images: List<String> = listOf() + private set + + var key: String = "" + private set + + var keyType: String = "" + private set + + @JavascriptInterface + fun passJsonData(rawData: String) { + val data = json.parseToJsonElement(rawData).jsonObject + images = data["images"]!!.jsonArray.map { it.jsonPrimitive.content } + key = data["key"]!!.jsonPrimitive.content + + latch.countDown() + } + + @JavascriptInterface + fun passKeyType(key: String) { + keyType = key + } + } + + private val keyMappingRegex = Regex("""[0-9A-Za-z_]+\s*==\s*['"](?<keyType>\d+)['"]\s*&&\s*\([0-9A-Za-z_]+\s*=\s*['"](?<key>[a-zA-Z0-9]+)['"]\)""") + + private val keyMapping by lazy { + val obfuscatedReadJs = client.newCall(GET("$baseUrl/js/manga.read.js")).execute().body.string() + val readJs = Deobfuscator.deobfuscateScript(obfuscatedReadJs) + ?: throw Exception("Could not deobufuscate manga.read.js") + + keyMappingRegex.findAll(readJs).associate { it.groups["keyType"]!!.value to it.groups["key"]!!.value } + } + + @SuppressLint("SetJavaScriptEnabled") + override fun pageListParse(document: Document): List<Page> { + val interfaceName = randomString() + document.body().prepend( + """ + <script> + (function () { + __cr.init(); + __cad.setCookieValue(); + + const pageCountKey = __cad.getCookieValue()[1] + mh_info.pageid.toString(); + const pageCount = parseInt($.cookie(pageCountKey) || "0"); + + const images = [...Array(pageCount).keys()].map((i) => __cr.getPicUrl(i + 1)); + + __cr.isfromMangaRead = 1 + const key = CryptoJS.enc.Utf8.stringify(__js.getDataParse()) + + if (!window.image_info.keyType || window.image_info.keyType != "0") { + window.$interfaceName.passKeyType(window.image_info.keyType) + } + window.$interfaceName.passJsonData(JSON.stringify({ images, key })) + })(); + </script> + """.trimIndent(), + ) + + val handler = Handler(Looper.getMainLooper()) + val latch = CountDownLatch(1) + val jsInterface = JsObject(latch, cookieManager) + var webView: WebView? = null + + handler.post { + val webview = WebView(Injekt.get<Application>()) + webView = webview + webview.settings.javaScriptEnabled = true + webview.settings.domStorageEnabled = true + webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null) + webview.settings.useWideViewPort = false + webview.settings.loadWithOverviewMode = false + webview.settings.userAgentString = webview.settings.userAgentString.replace("Mobile", "eliboM").replace("Android", "diordnA") + webview.addJavascriptInterface(jsInterface, interfaceName) + + webview.webChromeClient = object : WebChromeClient() { + override fun onConsoleMessage(consoleMessage: ConsoleMessage?): Boolean { + if (consoleMessage == null) { return false } + val logContent = "wv: ${consoleMessage.message()} (${consoleMessage.sourceId()}, line ${consoleMessage.lineNumber()})" + when (consoleMessage.messageLevel()) { + ConsoleMessage.MessageLevel.DEBUG -> Log.d("onemanhua", logContent) + ConsoleMessage.MessageLevel.ERROR -> Log.e("onemanhua", logContent) + ConsoleMessage.MessageLevel.LOG -> Log.i("onemanhua", logContent) + ConsoleMessage.MessageLevel.TIP -> Log.i("onemanhua", logContent) + ConsoleMessage.MessageLevel.WARNING -> Log.w("onemanhua", logContent) + else -> Log.d("onemanhua", logContent) + } + + return true + } + } + webview.loadDataWithBaseURL(document.location(), document.toString(), "text/html", "UTF-8", null) + } + + latch.await() + handler.post { webView?.destroy() } + + val key = if (jsInterface.keyType.isNotEmpty()) { + keyMapping[jsInterface.keyType] + ?: throw Exception("Could not find key mapping for keyType ${jsInterface.keyType}") + } else { + jsInterface.key + } + + return jsInterface.images.mapIndexed { i, url -> + var imageUrl = url + if (imageUrl.startsWith("//")) { + imageUrl = "https:$imageUrl" + } + Page(i, imageUrl = imageUrl + "#key=$key") + } + } + + override fun imageUrlParse(document: Document) = "" + + override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) { + val mainSiteRatePermitsPreference = androidx.preference.ListPreference(screen.context).apply { + key = MAINSITE_RATEPERMITS_PREF + title = MAINSITE_RATEPERMITS_PREF_TITLE + entries = MAINSITE_RATEPERMITS_PREF_ENTRIES_ARRAY + entryValues = MAINSITE_RATEPERMITS_PREF_ENTRIES_ARRAY + summary = MAINSITE_RATEPERMITS_PREF_SUMMARY + + setDefaultValue(MAINSITE_RATEPERMITS_PREF_DEFAULT) + } + + val mainSiteRatePeriodPreference = androidx.preference.ListPreference(screen.context).apply { + key = MAINSITE_RATEPERIOD_PREF + title = MAINSITE_RATEPERIOD_PREF_TITLE + entries = MAINSITE_RATEPERIOD_PREF_ENTRIES_ARRAY + entryValues = MAINSITE_RATEPERIOD_PREF_ENTRIES_ARRAY + summary = MAINSITE_RATEPERIOD_PREF_SUMMARY + + setDefaultValue(MAINSITE_RATEPERIOD_PREF_DEFAULT) + } + + screen.addPreference(mainSiteRatePermitsPreference) + screen.addPreference(mainSiteRatePeriodPreference) + } + + companion object { + private const val MAINSITE_RATEPERMITS_PREF = "mainSiteRatePermitsPreference" + private const val MAINSITE_RATEPERMITS_PREF_DEFAULT = "1" + + /** main site's connection limit */ + private const val MAINSITE_RATEPERMITS_PREF_TITLE = "主站连接限制" + + /** This value affects connection request amount to main site. Lowering this value may reduce the chance to get HTTP 403 error, but loading speed will be slower too. Tachiyomi restart required. Current value: %s" */ + private const val MAINSITE_RATEPERMITS_PREF_SUMMARY = "此值影响主站的连接请求量。降低此值可以减少获得HTTP 403错误的几率,但加载速度也会变慢。需要重启软件以生效。\n默认值:$MAINSITE_RATEPERMITS_PREF_DEFAULT \n当前值:%s" + private val MAINSITE_RATEPERMITS_PREF_ENTRIES_ARRAY = (1..10).map { i -> i.toString() }.toTypedArray() + + private const val MAINSITE_RATEPERIOD_PREF = "mainSiteRatePeriodMillisPreference" + private const val MAINSITE_RATEPERIOD_PREF_DEFAULT = "2500" + + /** main site's connection limit period */ + private const val MAINSITE_RATEPERIOD_PREF_TITLE = "主站连接限制期" + + /** This value affects the delay when hitting the connection limit to main site. Increasing this value may reduce the chance to get HTTP 403 error, but loading speed will be slower too. Tachiyomi restart required. Current value: %s" */ + private const val MAINSITE_RATEPERIOD_PREF_SUMMARY = "此值影响主站点连接限制时的延迟(毫秒)。增加这个值可能会减少出现HTTP 403错误的机会,但加载速度也会变慢。需要重启软件以生效。\n默认值:$MAINSITE_RATEPERIOD_PREF_DEFAULT\n当前值:%s" + private val MAINSITE_RATEPERIOD_PREF_ENTRIES_ARRAY = (2000..6000 step 500).map { i -> i.toString() }.toTypedArray() + } +}