Add TopTruyen (#5133)

This commit is contained in:
Chopper 2024-09-20 04:29:20 -03:00 committed by GitHub
parent 68f0a22087
commit 61d0751ee5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 89 additions and 2 deletions

View File

@ -131,8 +131,8 @@ abstract class WPComics(
}
open fun String?.toStatus(): Int {
val ongoingWords = listOf("Ongoing", "Updating", "Đang tiến hành", "連載中")
val completedWords = listOf("Complete", "Completed", "Hoàn thành", "完結済み")
val ongoingWords = listOf("Ongoing", "Updating", "Đang tiến hành", "Đang cập nhật", "連載中")
val completedWords = listOf("Complete", "Completed", "Hoàn thành", "Đã hoàn thành", "完結済み")
return when {
this == null -> SManga.UNKNOWN
ongoingWords.doesInclude(this) -> SManga.ONGOING

View File

@ -0,0 +1,10 @@
ext {
extName = 'Top Truyen'
extClass = '.TopTruyen'
themePkg = 'wpcomics'
baseUrl = 'https://www.toptruyenviet.info'
overrideVersionCode = 0
isNsfw = true
}
apply from: "$rootDir/common.gradle"

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -0,0 +1,77 @@
package eu.kanade.tachiyomi.extension.vi.toptruyen
import eu.kanade.tachiyomi.multisrc.wpcomics.WPComics
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.interceptor.rateLimit
import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.Request
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import java.text.SimpleDateFormat
import java.util.Locale
class TopTruyen : WPComics(
"Top Truyen",
"https://www.toptruyenviet.info",
"vi",
dateFormat = SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()),
gmtOffset = null,
) {
override val client = super.client.newBuilder()
.rateLimit(3)
.build()
override fun popularMangaSelector() = "div.item-manga div.item"
override fun popularMangaFromElement(element: Element) = SManga.create().apply {
element.select("h3 a").let {
title = it.text()
setUrlWithoutDomain(it.attr("abs:href"))
}
thumbnail_url = imageOrNull(element.selectFirst("img")!!)
}
override fun searchMangaSelector() = popularMangaSelector()
override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element)
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
val url = "$baseUrl/$searchPath".toHttpUrl().newBuilder()
filters.forEach { filter ->
when (filter) {
is GenreFilter -> filter.toUriPart()?.let { url.addPathSegment(it) }
is StatusFilter -> filter.toUriPart()?.let { url.addQueryParameter("status", it) }
else -> {}
}
}
when {
query.isNotBlank() -> url.addQueryParameter(queryParam, query)
else -> url.addQueryParameter("page", page.toString())
}
return GET(url.toString(), headers)
}
override fun mangaDetailsParse(document: Document) = SManga.create().apply {
title = document.selectFirst("h1.title-manga")!!.text()
description = document.selectFirst("p.detail-summary")?.text()
status = document.selectFirst("li.status p.detail-info span")?.text().toStatus()
genre = document.select("li.category p.detail-info a")?.joinToString { it.text() }
thumbnail_url = imageOrNull(document.selectFirst("img.image-comic")!!)
}
override fun chapterListSelector() = "div.list-chapter li.row:not(.heading):not([style])"
override fun chapterFromElement(element: Element): SChapter {
return super.chapterFromElement(element).apply {
date_upload = element.select(".chapters + div").text().toDate()
}
}
override val genresSelector = ".categories-detail ul.nav li:not(.active) a"
}