From 5f6e00499adf0933be684623ef1479d5161cd104 Mon Sep 17 00:00:00 2001 From: AwkwardPeak7 <48650614+AwkwardPeak7@users.noreply.github.com> Date: Tue, 28 Oct 2025 19:36:43 +0500 Subject: [PATCH] MangaTaro: unescape title & get thumbnail directly (#11273) * MangaTaro: use `_embed` on /wp-json/ endpoint - saves a network call to get thumbnail * unescape entities --- src/en/mangataro/build.gradle | 2 +- .../tachiyomi/extension/en/mangataro/Dto.kt | 22 +++++++++++++++++-- .../extension/en/mangataro/MangaTaro.kt | 22 +++++-------------- 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/en/mangataro/build.gradle b/src/en/mangataro/build.gradle index f0cd2667e..9e55aa676 100644 --- a/src/en/mangataro/build.gradle +++ b/src/en/mangataro/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'MangaTaro' extClass = '.MangaTaro' - extVersionCode = 2 + extVersionCode = 3 isNsfw = false } diff --git a/src/en/mangataro/src/eu/kanade/tachiyomi/extension/en/mangataro/Dto.kt b/src/en/mangataro/src/eu/kanade/tachiyomi/extension/en/mangataro/Dto.kt index 0f5230745..e2750f4d4 100644 --- a/src/en/mangataro/src/eu/kanade/tachiyomi/extension/en/mangataro/Dto.kt +++ b/src/en/mangataro/src/eu/kanade/tachiyomi/extension/en/mangataro/Dto.kt @@ -79,10 +79,10 @@ class MangaDetails( val slug: String, val title: Rendered, val content: Rendered, - @SerialName("featured_media") - val featuredMedia: Int, @SerialName("class_list") private val classList: List, + @SerialName("_embedded") + val embedded: Embedded, ) { fun getFromClassList(type: String): List { return classList.filter { it.startsWith("$type-") } @@ -94,6 +94,24 @@ class MangaDetails( } } +@Serializable +class Embedded( + @SerialName("wp:featuredmedia") + val featuredMedia: List, + @SerialName("wp:term") + private val terms: List>, +) { + fun getTerms(type: String): List { + return terms.find { it.firstOrNull()?.taxonomy == type }.orEmpty().map { it.name } + } +} + +@Serializable +class Term( + val name: String, + val taxonomy: String, +) + @Serializable class Thumbnail( @SerialName("source_url") diff --git a/src/en/mangataro/src/eu/kanade/tachiyomi/extension/en/mangataro/MangaTaro.kt b/src/en/mangataro/src/eu/kanade/tachiyomi/extension/en/mangataro/MangaTaro.kt index a69f31e4b..acb9b8f25 100644 --- a/src/en/mangataro/src/eu/kanade/tachiyomi/extension/en/mangataro/MangaTaro.kt +++ b/src/en/mangataro/src/eu/kanade/tachiyomi/extension/en/mangataro/MangaTaro.kt @@ -21,6 +21,7 @@ import okhttp3.Request import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.Response import org.jsoup.Jsoup +import org.jsoup.parser.Parser import rx.Observable import java.lang.UnsupportedOperationException import java.util.Calendar @@ -193,6 +194,7 @@ class MangaTaro : HttpSource() { val url = baseUrl.toHttpUrl().newBuilder().apply { addPathSegments("wp-json/wp/v2/manga") addPathSegment(id) + addQueryParameter("_embed", null) fragment(status.toString()) }.build() @@ -201,34 +203,22 @@ class MangaTaro : HttpSource() { override fun mangaDetailsParse(response: Response): SManga { val data = response.parseAs() - val thumbnail = getThumbnail(data.featuredMedia) return SManga.create().apply { url = MangaUrl(data.id.toString(), data.slug).toJsonString() - title = data.title.rendered + title = Parser.unescapeEntities(data.title.rendered, false) description = Jsoup.parseBodyFragment(data.content.rendered).wholeText() genre = buildSet { - addAll(data.getFromClassList("tag")) + addAll(data.embedded.getTerms("post_tag")) addAll(data.getFromClassList("type")) }.joinToString() - author = data.getFromClassList("manga_author").joinToString() + author = data.embedded.getTerms("manga_author").joinToString() status = response.request.url.fragment!!.toInt() - thumbnail_url = thumbnail + thumbnail_url = data.embedded.featuredMedia.firstOrNull()?.url initialized = true } } - private fun getThumbnail(mediaId: Int): String { - val url = baseUrl.toHttpUrl().newBuilder().apply { - addPathSegments("wp-json/wp/v2/media") - addPathSegment(mediaId.toString()) - }.build() - - return client.newCall(GET(url, headers)).execute() - .parseAs() - .url - } - override fun getMangaUrl(manga: SManga): String { val slug = manga.url.parseAs().slug