From d8ef062ba8cc80b60c970961a7331555e2350f73 Mon Sep 17 00:00:00 2001 From: Rolando Lecca <90949336+bapeey@users.noreply.github.com> Date: Tue, 6 Jun 2023 04:23:25 -0500 Subject: [PATCH] MangaTigre: Optimize mangaDetails parsing (#16508) * Optimize * Miskey * Use BigDecimal.stripTrailingZeros * Use JsonPrimitive instead Float * Set token on init * Remove init due to app don't recognize extension --- src/es/mangatigre/build.gradle | 2 +- .../extension/es/mangatigre/MangaTigre.kt | 49 ++++++++++--------- .../extension/es/mangatigre/MangaTigreDto.kt | 3 +- 3 files changed, 30 insertions(+), 24 deletions(-) diff --git a/src/es/mangatigre/build.gradle b/src/es/mangatigre/build.gradle index 170d12679..88aa9fdcd 100644 --- a/src/es/mangatigre/build.gradle +++ b/src/es/mangatigre/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'MangaTigre' pkgNameSuffix = 'es.mangatigre' extClass = '.MangaTigre' - extVersionCode = 2 + extVersionCode = 3 isNsfw = true } diff --git a/src/es/mangatigre/src/eu/kanade/tachiyomi/extension/es/mangatigre/MangaTigre.kt b/src/es/mangatigre/src/eu/kanade/tachiyomi/extension/es/mangatigre/MangaTigre.kt index 41077916c..56a730c0e 100644 --- a/src/es/mangatigre/src/eu/kanade/tachiyomi/extension/es/mangatigre/MangaTigre.kt +++ b/src/es/mangatigre/src/eu/kanade/tachiyomi/extension/es/mangatigre/MangaTigre.kt @@ -25,7 +25,7 @@ import okhttp3.Request import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.Response import okio.Buffer -import org.jsoup.nodes.Document +import org.jsoup.nodes.Element import uy.kohesive.injekt.injectLazy import java.util.Calendar @@ -54,7 +54,7 @@ class MangaTigre : HttpSource() { if (response.code == 419) { response.close() - getToken() + setToken() val newBody = json.parseToJsonElement(request.bodyString).jsonObject.toMutableMap().apply { this["_token"] = JsonPrimitive(mtToken) @@ -81,7 +81,7 @@ class MangaTigre : HttpSource() { .rateLimitHost(baseUrl.toHttpUrl(), 1, 2) .build() - private fun getToken() { + private fun setToken() { val document = client.newCall(GET(baseUrl, headers)).execute().asJsoup() mtToken = document.selectFirst("input.input-search[data-csrf]")!!.attr("data-csrf") } @@ -249,31 +249,36 @@ class MangaTigre : HttpSource() { override fun mangaDetailsParse(response: Response): SManga { val document = response.asJsoup() + return SManga.create().apply { - description = createDescription(document) - genre = createGenres(document) - thumbnail_url = document.selectFirst("div.manga-image > img")!!.attr("abs:data-src") - author = document.selectFirst("li.list-group-item:has(strong:contains(Autor)) > a")?.ownText()?.trim() - artist = document.selectFirst("li.list-group-item:has(strong:contains(Artista)) > a")?.ownText()?.trim() - status = document.selectFirst("li.list-group-item:has(strong:contains(Estado))")?.ownText()?.trim()!!.toStatus() + document.selectFirst("div.mangas-content")!!.let { mangasContent -> + thumbnail_url = mangasContent.selectFirst("div.manga-image > img")!!.attr("abs:data-src") + val summary = mangasContent.selectFirst("div.synopsis > p")?.ownText()?.trim() ?: "" + with(mangasContent.selectFirst("ul.list-group")!!) { + description = createDescription(this, summary) + genre = createGenres(this) + author = selectFirst("li:has(strong:contains(Autor)) > a")?.ownText()?.trim() + artist = selectFirst("li:has(strong:contains(Artista)) > a")?.ownText()?.trim() + status = selectFirst("li:has(strong:contains(Estado))")?.ownText()?.trim()!!.toStatus() + } + } } } - private fun createGenres(document: Document): String { - val demographic = document.select("li.list-group-item:has(strong:contains(Demografía)) a").joinToString { it.text() } - val genres = document.select("li.list-group-item:has(strong:contains(Géneros)) a").joinToString { it.text() } - val themes = document.select("li.list-group-item:has(strong:contains(Temas)) a").joinToString { it.text() } - val content = document.select("li.list-group-item:has(strong:contains(Contenido)) a").joinToString { it.text() } + private fun createGenres(element: Element): String { + val demographic = element.select("li:has(strong:contains(Demografía)) a").joinToString { it.text() } + val genres = element.select("li:has(strong:contains(Géneros)) a").joinToString { it.text() } + val themes = element.select("li:has(strong:contains(Temas)) a").joinToString { it.text() } + val content = element.select("li:has(strong:contains(Contenido)) a").joinToString { it.text() } return listOf(demographic, genres, themes, content).joinToString(", ") } - private fun createDescription(document: Document): String { - val originalName = document.selectFirst("li.list-group-item:has(strong:contains(Original))")?.ownText()?.trim() ?: "" - val alternativeName = document.select("li.list-group-item:has(strong:contains(Alternativo)) span.alter-name").text() - val year = document.selectFirst("li.list-group-item:has(strong:contains(Año))")?.ownText()?.trim() ?: "" - val animeAdaptation = document.selectFirst("li.list-group-item:has(strong:contains(Anime))")?.ownText()?.trim() ?: "" - val country = document.selectFirst("li.list-group-item:has(strong:contains(País))")?.ownText()?.trim() ?: "" - val summary = document.selectFirst("div.synopsis > p")?.ownText()?.trim() ?: "" + private fun createDescription(element: Element, summary: String): String { + val originalName = element.selectFirst("li:has(strong:contains(Original))")?.ownText()?.trim() ?: "" + val alternativeName = element.select("li:has(strong:contains(Alternativo)) span.alter-name").text() + val year = element.selectFirst("li:has(strong:contains(Año))")?.ownText()?.trim() ?: "" + val animeAdaptation = element.selectFirst("li:has(strong:contains(Anime))")?.ownText()?.trim() ?: "" + val country = element.selectFirst("li:has(strong:contains(País))")?.ownText()?.trim() ?: "" return StringBuilder() .appendLine("Nombre Original: $originalName") .appendLine("Títulos Alternativos: $alternativeName") @@ -317,7 +322,7 @@ class MangaTigre : HttpSource() { val result = json.decodeFromString(jsonString) val slug = result.manga.slug - val number = result.number + val number = result.number.toString() return result.images.map { val imageUrl = "$imgCDNUrl/chapters/$slug/$number/${it.value.name}.${it.value.format}" diff --git a/src/es/mangatigre/src/eu/kanade/tachiyomi/extension/es/mangatigre/MangaTigreDto.kt b/src/es/mangatigre/src/eu/kanade/tachiyomi/extension/es/mangatigre/MangaTigreDto.kt index 273be06aa..7a82d9ce3 100644 --- a/src/es/mangatigre/src/eu/kanade/tachiyomi/extension/es/mangatigre/MangaTigreDto.kt +++ b/src/es/mangatigre/src/eu/kanade/tachiyomi/extension/es/mangatigre/MangaTigreDto.kt @@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.extension.es.mangatigre import eu.kanade.tachiyomi.source.model.SManga import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonPrimitive @Serializable data class PayloadManga( @@ -38,7 +39,7 @@ data class MangasDataDto( @Serializable data class ChapterDto( val manga: ChapterMangaInfoDto, - val number: Float, + val number: JsonPrimitive, // Can be Int or Float val images: Map, )