From 82bb3dafd8f6337fd36378261e876d0600557962 Mon Sep 17 00:00:00 2001 From: bapeey <90949336+bapeey@users.noreply.github.com> Date: Thu, 14 Mar 2024 12:48:25 -0500 Subject: [PATCH] Remove Kumanga (#1857) * Remove Kumanga * Add rule to issue_moderator * Rebuild * Update regex Co-authored-by: stevenyomi <95685115+stevenyomi@users.noreply.github.com> --------- Co-authored-by: stevenyomi <95685115+stevenyomi@users.noreply.github.com> --- src/es/kumanga/build.gradle | 11 - .../kumanga/res/mipmap-hdpi/ic_launcher.png | Bin 3406 -> 0 bytes .../kumanga/res/mipmap-mdpi/ic_launcher.png | Bin 1941 -> 0 bytes .../kumanga/res/mipmap-xhdpi/ic_launcher.png | Bin 4462 -> 0 bytes .../kumanga/res/mipmap-xxhdpi/ic_launcher.png | Bin 8086 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 11076 -> 0 bytes .../tachiyomi/extension/es/kumanga/Kumanga.kt | 373 ------------------ .../extension/es/kumanga/KumangaDto.kt | 31 -- 8 files changed, 415 deletions(-) delete mode 100644 src/es/kumanga/build.gradle delete mode 100644 src/es/kumanga/res/mipmap-hdpi/ic_launcher.png delete mode 100644 src/es/kumanga/res/mipmap-mdpi/ic_launcher.png delete mode 100644 src/es/kumanga/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 src/es/kumanga/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 src/es/kumanga/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 src/es/kumanga/src/eu/kanade/tachiyomi/extension/es/kumanga/Kumanga.kt delete mode 100644 src/es/kumanga/src/eu/kanade/tachiyomi/extension/es/kumanga/KumangaDto.kt diff --git a/src/es/kumanga/build.gradle b/src/es/kumanga/build.gradle deleted file mode 100644 index 8310a459d..000000000 --- a/src/es/kumanga/build.gradle +++ /dev/null @@ -1,11 +0,0 @@ -ext { - extName = 'Kumanga' - extClass = '.Kumanga' - extVersionCode = 11 -} - -apply from: "$rootDir/common.gradle" - -dependencies { - implementation(project(':lib:randomua')) -} diff --git a/src/es/kumanga/res/mipmap-hdpi/ic_launcher.png b/src/es/kumanga/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index c8a55e2026a227fa3a3cb36b35fb64bcf2493d51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3406 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 bFR#G=Ufk1sFIv|e)-Kzp5$6aDUg@ZtLH8* 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 diff --git a/src/es/kumanga/res/mipmap-xxxhdpi/ic_launcher.png b/src/es/kumanga/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index c4da6924649963015881ccdcef8a68f8bfafdd8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11076 zcma)CWmg;D*G)nS!9&oZ!Agr$+#LcGw^H1TL-FG77NF3g#ihksDDF|2rV)sI$g`Jq7>(2Pnu$ zYIzwQW?|1*OFwVlzQ3Bk_d6sR5UuWK|DZR?&a8;Qk}bq8j9E}jf)TvZqH~j%flUyr z6WPoghP`J)YOu%DHXT$r`S}0gH~!I=`Pp-1^GSUBN&H-7`TWq|dIWW6>HdC1ShUOr z7u-k&5;bhTvf9N3Ye@reVQ#!&a?sA+p%ck6R3Ze;5H~0s(D?B_qlX_nwj!Y`ol6^7 zvGizliVNfs7@LB=hvb(3YSZ&Yh2s5xL%+WW)Cs7ZUA>buv1BP;zzTKq%O_rTV5H1& zBE|q_02G>JkCy9KTbSf^C znwv+ZOOmV~M2@YpNS68(=Dl0_@(E&&yAy>zVwaPewx?@7d$ZO#+Cym^*N(Z8I0JGK zP}-q$4?ljZMX|M00=d+c@#*Pexp>M_xdiI(FW#i*%EgkoT%K(Xsb=##Em5I`nh*vh zL1|lQKN=AM8Ip|YTQzL^zv=zJGpaW0(Mu3Hiv-;ovUQhAE%eHzvqA{S#d+GkjmE&M zzU||F7rYQbc2&L}hMLCHh#P&c?j-J3|B*>0Gm`n|pNHFXYkVm1 z3LxIlEF}vKRQC&KE(~{Q*!5Gr6s_sou_8nqznOo= zB!v68<$8%QRbwa`3G&8l2RHuQ%TFN}bKje^qxLzdK8%I%QFin_HxsC_5E+mQ70@Qm znNIDBAPaYE(=qnD)Ti;kSrtvu7}YCNd#y%Nh-JwbSa631#L-lYd+WLAer(X}b!uw^ zgLeZ9Lh1A@byP^^s+dJMy6|b9?G%8Jc4!coO=mYb z4WOeQkfK39{nk7#;t*1qlB`HzEM$auhV3mm_fLf9iCHuaD)-4xNwJw$I=sYk=+pPo zly^cB0J82Ee2D`TDG`9!YiqTCL4cw+pU>1HlM9kcL(P>i8N0ClhI5B!mVwnS|?uWR!yFASP;0G>HKGPysboGbKjFou;pG%xA)u&VyqQF$rpV5K?78{tMM?-!|2rBrg{OFj6++%}723Jiwj6?Aw-FC;i;0 z92Ihj4uRW1tfMiAP|q`|W;aWeMTQB~rMM#Q!&;fVjY4seS5%lmT1nERz<^R+)HpbU z<7nUbt1&XPBkTb*z)-&W_wj7nwFT!$D1w-P=Vxn8b{f}zL%90{ZiiNYfhK^2mmvU# z35L*gS?8C%5WnJ#93?@oFIX=uDQoEh6Y+M|Z!`?`=Qs-PtxoSr8BGUQQo>FA_;lX~ z41Uq2uAhnq6l6}zLcVW2z>e5=HLWq#wiaS2n@GUWHA+j@M-j^2Z2k9CT%$h_>123R z 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.getSharedPreferences("source_$id", 0x0000) - - override fun headersBuilder() = super.headersBuilder() - .add("Referer", "$baseUrl/") - .add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8") - .add("Accept-language", "es-419,es;q=0.6") - .add("Cache-Control", "max-age=0") - .add("Sec-Fetch-Dest", "document") - .add("Sec-Fetch-Mode", "navigate") - .add("Sec-Fetch-Site", "none") - .add("Sec-Fetch-User", "?1") - .add("Sec-GPC", "1") - .add("Upgrade-Insecure-Requests", "1") - - override val client: OkHttpClient = network.cloudflareClient.newBuilder() - .setRandomUserAgent( - preferences.getPrefUAType(), - preferences.getPrefCustomUA(), - ) - .rateLimit(1) - .addInterceptor { chain -> - val request = chain.request() - if (!request.url.toString().startsWith(apiUrl)) return@addInterceptor chain.proceed(request) - if (kumangaToken.isBlank()) getKumangaToken() - var newRequest = addTokenToRequest(request) - val response = chain.proceed(newRequest) - if (response.code == 400) { - response.close() - getKumangaToken() - newRequest = addTokenToRequest(request) - chain.proceed(newRequest) - } else { - response - } - } - .build() - - private fun addTokenToRequest(request: Request): Request { - return request.newBuilder() - .url(request.url.newBuilder().removeAllQueryParameters("token").addQueryParameter("token", kumangaToken).build()) - .build() - } - - private fun getKumangaToken() { - val body = client.newCall(GET("$baseUrl/mangalist?&page=1", headers)).execute().asJsoup() - val dt = body.select("#searchinput").attr("dt").toString() - val kumangaTokenKey = encodeAndReverse(encodeAndReverse(dt)) - .replace("=", "k") - .lowercase(Locale.ROOT) - kumangaToken = body.select("div.input-group [type=hidden]").attr(kumangaTokenKey) - } - - override fun popularMangaRequest(page: Int): Request { - val url = apiUrl.toHttpUrl().newBuilder() - .addQueryParameter("page", page.toString()) - .addQueryParameter("perPage", CONTENT_PER_PAGE.toString()) - .addQueryParameter("retrieveCategories", "true") - .addQueryParameter("retrieveAuthors", "true") - .addQueryParameter("contentType", "manga") - .build() - - return POST(url.toString(), headers) - } - - override fun popularMangaParse(response: Response): MangasPage { - val jsonResult = json.decodeFromString(response.body.string()) - val mangas = jsonResult.contents.map { it.toSManga(baseUrl) } - val hasNextPage = jsonResult.retrievedCount == CONTENT_PER_PAGE - return MangasPage(mangas, hasNextPage) - } - - override fun latestUpdatesRequest(page: Int) = throw UnsupportedOperationException() - - override fun latestUpdatesParse(response: Response) = throw UnsupportedOperationException() - - override fun mangaDetailsParse(response: Response) = SManga.create().apply { - val document = response.asJsoup() - thumbnail_url = document.selectFirst("div.km-img-gral-2 img")?.attr("abs:src") - document.select("div#tab1").let { - description = it.select("p").text() - } - document.select("div#tab2").let { - status = parseStatus(it.select("span").text().orEmpty()) - author = it.select("p:contains(Autor) > a").text() - artist = it.select("p:contains(Artista) > a").text() - } - } - - private fun chapterSelector() = "div[id^=accordion] .title" - - private fun chapterFromElement(element: Element) = SChapter.create().apply { - element.select("a:has(i)").let { - setUrlWithoutDomain(it.attr("abs:href").replace("/c/", "/leer/")) - name = it.text() - date_upload = parseDate(it.attr("title")) - } - scanlator = element.select("span.pull-right.greenSpan").text() - } - - override fun chapterListParse(response: Response): List = mutableListOf().apply { - var document = response.asJsoup() - var location = document.location() - val params = document.select("script:containsData(totCntnts)").toString() - val pagesVar = params.substringAfter("totCntnts").substringAfter("=").substringBefore(";").trim() - val chaptersNumber = params.substringAfter(pagesVar).substringAfter("=").substringBefore(";").toIntOrNull() - val mangaId = params.substringAfter("mid").substringAfter("=").substringBefore(";").trim() - val mangaSlug = params.substringAfter("slg").substringAfter("=").substringBefore(";").trim().removeSurrounding("'") - if (chaptersNumber != null) { - val numberOfPages = ((chaptersNumber - 10) / 10.toDouble() + 0.4).roundToInt() - document.select(chapterSelector()).map { add(chapterFromElement(it)) } - var page = 2 - while (page <= numberOfPages) { - val pageHeaders = headersBuilder().set("Referer", location).build() - document = client.newCall( - GET( - baseUrl + getMangaUrl(mangaId, mangaSlug, page), - pageHeaders, - ), - ).execute().asJsoup() - location = document.location() - document.select(chapterSelector()).map { add(chapterFromElement(it)) } - page++ - } - } else { - throw Exception("No fue posible obtener los capítulos") - } - } - - override fun pageListParse(response: Response): List { - val document = response.asJsoup() - val form = document.selectFirst("form#myForm[action]") - if (form != null) { - val url = form.attr("action") - val bodyBuilder = FormBody.Builder() - val inputs = form.select("input") - inputs.map { input -> - bodyBuilder.add(input.attr("name"), input.attr("value")) - } - return pageListParse(client.newCall(POST(url, headers, bodyBuilder.build())).execute()) - } else { - val imagesJsonRaw = document.select("script:containsData(var pUrl=)").firstOrNull() - ?.data() - ?.substringAfter("var pUrl=") - ?.substringBefore(";") - ?.let { decodeBase64(decodeBase64(it).reversed().dropLast(10).drop(10)) } - ?: throw Exception("No se pudo obtener la lista de imágenes") - - val jsonResult = json.decodeFromString>(imagesJsonRaw) - - return jsonResult.mapIndexed { i, item -> - val imagePath = item.imgURL.replace("\\", "") - val docUrl = document.location() - val baseUrl = URL(docUrl).protocol + "://" + URL(docUrl).host // For some reason baseUri returns the full url - Page(i, baseUrl, "$baseUrl/$imagePath") - } - } - } - - override fun imageRequest(page: Page): Request { - val imageHeaders = Headers.Builder() - .add("Referer", page.url) - .build() - return GET(page.imageUrl!!, imageHeaders) - } - - override fun imageUrlParse(response: Response) = throw UnsupportedOperationException() - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = apiUrl.toHttpUrl().newBuilder() - .addQueryParameter("page", page.toString()) - .addQueryParameter("perPage", CONTENT_PER_PAGE.toString()) - .addQueryParameter("retrieveCategories", "true") - .addQueryParameter("retrieveAuthors", "true") - .addQueryParameter("contentType", "manga") - .addQueryParameter("keywords", query) - - filters.forEach { filter -> - when (filter) { - is TypeList -> { - filter.state - .filter { type -> type.state } - .forEach { type -> url.addQueryParameter("type_filter[]", type.id) } - } - is StatusList -> { - filter.state - .filter { status -> status.state } - .forEach { status -> url.addQueryParameter("status_filter[]", status.id) } - } - is GenreList -> { - filter.state - .filter { genre -> genre.state } - .forEach { genre -> url.addQueryParameter("category_filter[]", genre.id) } - } - else -> {} - } - } - - return POST(url.build().toString(), headers) - } - - override fun searchMangaParse(response: Response) = popularMangaParse(response) - - override fun getFilterList() = FilterList( - TypeList(getTypeList()), - Filter.Separator(), - StatusList(getStatusList()), - Filter.Separator(), - GenreList(getGenreList()), - ) - - override fun setupPreferenceScreen(screen: PreferenceScreen) { - addRandomUAPreferenceToScreen(screen) - } - - private class Type(name: String, val id: String) : Filter.CheckBox(name) - private class TypeList(types: List) : Filter.Group("Filtrar por tipos", types) - - private class Status(name: String, val id: String) : Filter.CheckBox(name) - private class StatusList(status: List) : Filter.Group("Filtrar por estado", status) - - private class Genre(name: String, val id: String) : Filter.CheckBox(name) - private class GenreList(genres: List) : Filter.Group("Filtrar por géneros", genres) - - private fun getTypeList() = listOf( - Type("Manga", "1"), - Type("Manhwa", "2"), - Type("Manhua", "3"), - Type("One shot", "4"), - Type("Doujinshi", "5"), - ) - - private fun getStatusList() = listOf( - Status("Activo", "1"), - Status("Finalizado", "2"), - Status("Inconcluso", "3"), - ) - - private fun getGenreList() = listOf( - Genre("Acción", "1"), - Genre("Artes marciales", "2"), - Genre("Automóviles", "3"), - Genre("Aventura", "4"), - Genre("Ciencia Ficción", "5"), - Genre("Comedia", "6"), - Genre("Demonios", "7"), - Genre("Deportes", "8"), - Genre("Doujinshi", "9"), - Genre("Drama", "10"), - Genre("Ecchi", "11"), - Genre("Espacio exterior", "12"), - Genre("Fantasía", "13"), - Genre("Gender bender", "14"), - Genre("Gore", "46"), - Genre("Harem", "15"), - Genre("Hentai", "16"), - Genre("Histórico", "17"), - Genre("Horror", "18"), - Genre("Josei", "19"), - Genre("Juegos", "20"), - Genre("Locura", "21"), - Genre("Magia", "22"), - Genre("Mecha", "23"), - Genre("Militar", "24"), - Genre("Misterio", "25"), - Genre("Música", "26"), - Genre("Niños", "27"), - Genre("Parodia", "28"), - Genre("Policía", "29"), - Genre("Psicológico", "30"), - Genre("Recuentos de la vida", "31"), - Genre("Romance", "32"), - Genre("Samurai", "33"), - Genre("Seinen", "34"), - Genre("Shoujo", "35"), - Genre("Shoujo Ai", "36"), - Genre("Shounen", "37"), - Genre("Shounen Ai", "38"), - Genre("Sobrenatural", "39"), - Genre("Súperpoderes", "41"), - Genre("Suspenso", "40"), - Genre("Terror", "47"), - Genre("Tragedia", "48"), - Genre("Vampiros", "42"), - Genre("Vida escolar", "43"), - Genre("Yaoi", "44"), - Genre("Yuri", "45"), - ) - - private fun parseStatus(status: String) = when { - status.contains("Activo") -> SManga.ONGOING - status.contains("Finalizado") -> SManga.COMPLETED - else -> SManga.UNKNOWN - } - - private fun parseDate(date: String): Long { - return try { - DATE_FORMAT.parse(date)?.time ?: 0 - } catch (_: Exception) { - 0 - } - } - - private fun getMangaUrl(mangaId: String, mangaSlug: String, page: Int) = "/manga/$mangaId/p/$page/$mangaSlug" - - private fun encodeAndReverse(dtValue: String): String { - return Base64.encodeToString(dtValue.toByteArray(), Base64.DEFAULT).reversed().trim() - } - - private fun decodeBase64(encodedString: String): String { - return Base64.decode(encodedString, Base64.DEFAULT).toString(charset("UTF-8")) - } - - companion object { - private val DATE_FORMAT = SimpleDateFormat("dd/MM/yyyy HH:mm", Locale.ROOT) - private const val CONTENT_PER_PAGE = 24 - } -} diff --git a/src/es/kumanga/src/eu/kanade/tachiyomi/extension/es/kumanga/KumangaDto.kt b/src/es/kumanga/src/eu/kanade/tachiyomi/extension/es/kumanga/KumangaDto.kt deleted file mode 100644 index 07daf5ad2..000000000 --- a/src/es/kumanga/src/eu/kanade/tachiyomi/extension/es/kumanga/KumangaDto.kt +++ /dev/null @@ -1,31 +0,0 @@ -package eu.kanade.tachiyomi.extension.es.kumanga - -import eu.kanade.tachiyomi.source.model.SManga -import kotlinx.serialization.Serializable - -@Serializable -class ComicsPayloadDto( - val contents: List, - val retrievedCount: Int, -) - -@Serializable -class ComicDto( - private val id: Int, - private val name: String, - private val slug: String, -) { - fun toSManga(baseUrl: String) = SManga.create().apply { - title = name - url = createMangaUrl(id.toString(), slug) - thumbnail_url = guessMangaCover(id.toString(), baseUrl) - } - - private fun guessMangaCover(mangaId: String, baseUrl: String) = "$baseUrl/kumathumb.php?src=$mangaId" - private fun createMangaUrl(mangaId: String, mangaSlug: String) = "/manga/$mangaId/$mangaSlug" -} - -@Serializable -class ImageDto( - val imgURL: String, -)