Skip to content

Commit

Permalink
Add TopTruyen (#5133)
Browse files Browse the repository at this point in the history
  • Loading branch information
choppeh authored Sep 20, 2024
1 parent 68f0a22 commit 61d0751
Show file tree
Hide file tree
Showing 8 changed files with 89 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 10 additions & 0 deletions src/vi/toptruyen/build.gradle
Original file line number Diff line number Diff line change
@@ -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 added src/vi/toptruyen/res/mipmap-hdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/vi/toptruyen/res/mipmap-mdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -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"
}

0 comments on commit 61d0751

Please sign in to comment.