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
This commit is contained in:
parent
d88776ce6e
commit
d8ef062ba8
@ -6,7 +6,7 @@ ext {
|
|||||||
extName = 'MangaTigre'
|
extName = 'MangaTigre'
|
||||||
pkgNameSuffix = 'es.mangatigre'
|
pkgNameSuffix = 'es.mangatigre'
|
||||||
extClass = '.MangaTigre'
|
extClass = '.MangaTigre'
|
||||||
extVersionCode = 2
|
extVersionCode = 3
|
||||||
isNsfw = true
|
isNsfw = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ import okhttp3.Request
|
|||||||
import okhttp3.RequestBody.Companion.toRequestBody
|
import okhttp3.RequestBody.Companion.toRequestBody
|
||||||
import okhttp3.Response
|
import okhttp3.Response
|
||||||
import okio.Buffer
|
import okio.Buffer
|
||||||
import org.jsoup.nodes.Document
|
import org.jsoup.nodes.Element
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
import java.util.Calendar
|
import java.util.Calendar
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ class MangaTigre : HttpSource() {
|
|||||||
|
|
||||||
if (response.code == 419) {
|
if (response.code == 419) {
|
||||||
response.close()
|
response.close()
|
||||||
getToken()
|
setToken()
|
||||||
|
|
||||||
val newBody = json.parseToJsonElement(request.bodyString).jsonObject.toMutableMap().apply {
|
val newBody = json.parseToJsonElement(request.bodyString).jsonObject.toMutableMap().apply {
|
||||||
this["_token"] = JsonPrimitive(mtToken)
|
this["_token"] = JsonPrimitive(mtToken)
|
||||||
@ -81,7 +81,7 @@ class MangaTigre : HttpSource() {
|
|||||||
.rateLimitHost(baseUrl.toHttpUrl(), 1, 2)
|
.rateLimitHost(baseUrl.toHttpUrl(), 1, 2)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
private fun getToken() {
|
private fun setToken() {
|
||||||
val document = client.newCall(GET(baseUrl, headers)).execute().asJsoup()
|
val document = client.newCall(GET(baseUrl, headers)).execute().asJsoup()
|
||||||
mtToken = document.selectFirst("input.input-search[data-csrf]")!!.attr("data-csrf")
|
mtToken = document.selectFirst("input.input-search[data-csrf]")!!.attr("data-csrf")
|
||||||
}
|
}
|
||||||
@ -249,31 +249,36 @@ class MangaTigre : HttpSource() {
|
|||||||
|
|
||||||
override fun mangaDetailsParse(response: Response): SManga {
|
override fun mangaDetailsParse(response: Response): SManga {
|
||||||
val document = response.asJsoup()
|
val document = response.asJsoup()
|
||||||
|
|
||||||
return SManga.create().apply {
|
return SManga.create().apply {
|
||||||
description = createDescription(document)
|
document.selectFirst("div.mangas-content")!!.let { mangasContent ->
|
||||||
genre = createGenres(document)
|
thumbnail_url = mangasContent.selectFirst("div.manga-image > img")!!.attr("abs:data-src")
|
||||||
thumbnail_url = document.selectFirst("div.manga-image > img")!!.attr("abs:data-src")
|
val summary = mangasContent.selectFirst("div.synopsis > p")?.ownText()?.trim() ?: ""
|
||||||
author = document.selectFirst("li.list-group-item:has(strong:contains(Autor)) > a")?.ownText()?.trim()
|
with(mangasContent.selectFirst("ul.list-group")!!) {
|
||||||
artist = document.selectFirst("li.list-group-item:has(strong:contains(Artista)) > a")?.ownText()?.trim()
|
description = createDescription(this, summary)
|
||||||
status = document.selectFirst("li.list-group-item:has(strong:contains(Estado))")?.ownText()?.trim()!!.toStatus()
|
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 {
|
private fun createGenres(element: Element): String {
|
||||||
val demographic = document.select("li.list-group-item:has(strong:contains(Demografía)) a").joinToString { it.text() }
|
val demographic = element.select("li: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 genres = element.select("li: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 themes = element.select("li:has(strong:contains(Temas)) a").joinToString { it.text() }
|
||||||
val content = document.select("li.list-group-item:has(strong:contains(Contenido)) a").joinToString { it.text() }
|
val content = element.select("li:has(strong:contains(Contenido)) a").joinToString { it.text() }
|
||||||
return listOf(demographic, genres, themes, content).joinToString(", ")
|
return listOf(demographic, genres, themes, content).joinToString(", ")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createDescription(document: Document): String {
|
private fun createDescription(element: Element, summary: String): String {
|
||||||
val originalName = document.selectFirst("li.list-group-item:has(strong:contains(Original))")?.ownText()?.trim() ?: ""
|
val originalName = element.selectFirst("li:has(strong:contains(Original))")?.ownText()?.trim() ?: ""
|
||||||
val alternativeName = document.select("li.list-group-item:has(strong:contains(Alternativo)) span.alter-name").text()
|
val alternativeName = element.select("li:has(strong:contains(Alternativo)) span.alter-name").text()
|
||||||
val year = document.selectFirst("li.list-group-item:has(strong:contains(Año))")?.ownText()?.trim() ?: ""
|
val year = element.selectFirst("li:has(strong:contains(Año))")?.ownText()?.trim() ?: ""
|
||||||
val animeAdaptation = document.selectFirst("li.list-group-item:has(strong:contains(Anime))")?.ownText()?.trim() ?: ""
|
val animeAdaptation = element.selectFirst("li:has(strong:contains(Anime))")?.ownText()?.trim() ?: ""
|
||||||
val country = document.selectFirst("li.list-group-item:has(strong:contains(País))")?.ownText()?.trim() ?: ""
|
val country = element.selectFirst("li:has(strong:contains(País))")?.ownText()?.trim() ?: ""
|
||||||
val summary = document.selectFirst("div.synopsis > p")?.ownText()?.trim() ?: ""
|
|
||||||
return StringBuilder()
|
return StringBuilder()
|
||||||
.appendLine("Nombre Original: $originalName")
|
.appendLine("Nombre Original: $originalName")
|
||||||
.appendLine("Títulos Alternativos: $alternativeName")
|
.appendLine("Títulos Alternativos: $alternativeName")
|
||||||
@ -317,7 +322,7 @@ class MangaTigre : HttpSource() {
|
|||||||
|
|
||||||
val result = json.decodeFromString<ChapterDto>(jsonString)
|
val result = json.decodeFromString<ChapterDto>(jsonString)
|
||||||
val slug = result.manga.slug
|
val slug = result.manga.slug
|
||||||
val number = result.number
|
val number = result.number.toString()
|
||||||
|
|
||||||
return result.images.map {
|
return result.images.map {
|
||||||
val imageUrl = "$imgCDNUrl/chapters/$slug/$number/${it.value.name}.${it.value.format}"
|
val imageUrl = "$imgCDNUrl/chapters/$slug/$number/${it.value.name}.${it.value.format}"
|
||||||
|
@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.extension.es.mangatigre
|
|||||||
import eu.kanade.tachiyomi.source.model.SManga
|
import eu.kanade.tachiyomi.source.model.SManga
|
||||||
import kotlinx.serialization.SerialName
|
import kotlinx.serialization.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
import kotlinx.serialization.json.JsonPrimitive
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class PayloadManga(
|
data class PayloadManga(
|
||||||
@ -38,7 +39,7 @@ data class MangasDataDto(
|
|||||||
@Serializable
|
@Serializable
|
||||||
data class ChapterDto(
|
data class ChapterDto(
|
||||||
val manga: ChapterMangaInfoDto,
|
val manga: ChapterMangaInfoDto,
|
||||||
val number: Float,
|
val number: JsonPrimitive, // Can be Int or Float
|
||||||
val images: Map<String, ChapterImagesDto>,
|
val images: Map<String, ChapterImagesDto>,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user