MangaTaro: fix type tag and count views (#11358)

* remove post type from genres

seems to always be manga

* count views

* lint and bump

* add type if others not in tags

* set
This commit is contained in:
AwkwardPeak7 2025-11-01 12:57:31 +05:00 committed by Draff
parent 68b70d54d9
commit 05817f38c2
Signed by: Draff
GPG Key ID: E8A89F3211677653
3 changed files with 35 additions and 16 deletions

View File

@ -1,7 +1,7 @@
ext { ext {
extName = 'MangaTaro' extName = 'MangaTaro'
extClass = '.MangaTaro' extClass = '.MangaTaro'
extVersionCode = 4 extVersionCode = 5
isNsfw = false isNsfw = false
} }

View File

@ -68,7 +68,7 @@ class BrowseManga(
) )
@Serializable @Serializable
class MangaUrl( data class MangaUrl(
val id: String, val id: String,
val slug: String, val slug: String,
) )
@ -79,20 +79,10 @@ class MangaDetails(
val slug: String, val slug: String,
val title: Rendered, val title: Rendered,
val content: Rendered, val content: Rendered,
@SerialName("class_list") val type: String,
private val classList: List<String>,
@SerialName("_embedded") @SerialName("_embedded")
val embedded: Embedded, val embedded: Embedded,
) { )
fun getFromClassList(type: String): List<String> {
return classList.filter { it.startsWith("$type-") }
.map {
it.substringAfter("$type-")
.split("-")
.joinToString(" ") { word -> word.replaceFirstChar { it.titlecase() } }
}
}
}
@Serializable @Serializable
class Embedded( class Embedded(

View File

@ -1,5 +1,6 @@
package eu.kanade.tachiyomi.extension.en.mangataro package eu.kanade.tachiyomi.extension.en.mangataro
import android.util.Log
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.network.asObservableSuccess
@ -15,11 +16,14 @@ import keiyoushi.utils.firstInstance
import keiyoushi.utils.firstInstanceOrNull import keiyoushi.utils.firstInstanceOrNull
import keiyoushi.utils.parseAs import keiyoushi.utils.parseAs
import keiyoushi.utils.toJsonString import keiyoushi.utils.toJsonString
import okhttp3.Callback
import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.MediaType.Companion.toMediaType import okhttp3.MediaType.Companion.toMediaType
import okhttp3.Request import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.RequestBody.Companion.toRequestBody
import okhttp3.Response import okhttp3.Response
import okhttp3.internal.closeQuietly
import okio.IOException
import org.jsoup.Jsoup import org.jsoup.Jsoup
import org.jsoup.parser.Parser import org.jsoup.parser.Parser
import rx.Observable import rx.Observable
@ -210,7 +214,9 @@ class MangaTaro : HttpSource() {
description = Jsoup.parseBodyFragment(data.content.rendered).wholeText() description = Jsoup.parseBodyFragment(data.content.rendered).wholeText()
genre = buildSet { genre = buildSet {
addAll(data.embedded.getTerms("post_tag")) addAll(data.embedded.getTerms("post_tag"))
addAll(data.getFromClassList("type")) if (listOf("Manhwa", "Manhua", "Manga").none { it -> this.contains(it) }) {
add(data.type)
}
}.joinToString() }.joinToString()
author = data.embedded.getTerms("manga_author").joinToString() author = data.embedded.getTerms("manga_author").joinToString()
status = response.request.url.fragment!!.toInt() status = response.request.url.fragment!!.toInt()
@ -226,10 +232,14 @@ class MangaTaro : HttpSource() {
} }
override fun chapterListRequest(manga: SManga): Request { override fun chapterListRequest(manga: SManga): Request {
return GET(getMangaUrl(manga), headers) val (id, slug) = manga.url.parseAs<MangaUrl>()
return GET("$baseUrl/manga/$slug#$id", headers)
} }
override fun chapterListParse(response: Response): List<SChapter> { override fun chapterListParse(response: Response): List<SChapter> {
countViews(response.request.url.fragment!!)
val document = response.asJsoup() val document = response.asJsoup()
val placeholders = listOf("", "N/A", "") val placeholders = listOf("", "N/A", "")
var hasScanlator = false var hasScanlator = false
@ -303,6 +313,25 @@ class MangaTaro : HttpSource() {
private val relativeDateRegex = Regex("""(\d+)(h|d|w|mo|y) ago""") private val relativeDateRegex = Regex("""(\d+)(h|d|w|mo|y) ago""")
private fun countViews(postId: String) {
val payload = """{"post_id":"$postId"}"""
.toRequestBody("application/json".toMediaType())
val url = "$baseUrl/wp-json/pviews/v1/increment/"
val request = POST(url, headers, payload)
client.newCall(request)
.enqueue(
object : Callback {
override fun onResponse(call: okhttp3.Call, response: Response) {
response.closeQuietly()
}
override fun onFailure(call: okhttp3.Call, e: IOException) {
Log.e(name, "Failed to count views", e)
}
},
)
}
override fun imageUrlParse(response: Response): String { override fun imageUrlParse(response: Response): String {
throw UnsupportedOperationException() throw UnsupportedOperationException()
} }