DragonTranslation.net (ES): Migrate to HttpSource (#7629)

* fix extension

* fix details

* migrate to ParsedHttpSource

* migrate to HttpSource

* Update src/es/dragontranslationnet/src/eu/kanade/tachiyomi/extension/es/dragontranslationnet/DragonTranslationNet.kt

Co-authored-by: Vetle Ledaal <vetle.ledaal@gmail.com>

---------

Co-authored-by: Vetle Ledaal <vetle.ledaal@gmail.com>
This commit is contained in:
dngonz 2025-02-16 10:31:09 +01:00 committed by Draff
parent 78a055915d
commit 7408c2e05a
No known key found for this signature in database
GPG Key ID: E8A89F3211677653
2 changed files with 68 additions and 41 deletions

View File

@ -1,9 +1,7 @@
ext {
extName = 'DragonTranslation.net'
extClass = '.DragonTranslationNet'
themePkg = 'madara'
baseUrl = 'https://dragontranslation.net'
overrideVersionCode = 0
extVersionCode = 40
isNsfw = true
}

View File

@ -1,84 +1,103 @@
package eu.kanade.tachiyomi.extension.es.dragontranslationnet
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.model.MangasPage
import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.HttpSource
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.Request
import okhttp3.Response
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
class DragonTranslationNet : Madara("DragonTranslation.net", "https://dragontranslation.net", "es") {
open class DragonTranslationNet : HttpSource() {
override val name = "DragonTranslation.net"
override val baseUrl = "https://dragontranslation.net"
override val lang = "es"
override val supportsLatest = true
// Popular
override fun popularMangaRequest(page: Int): Request {
return GET("$baseUrl/mangas?page=$page", headers)
}
override fun popularMangaSelector() = "div:has(> div.series-card)"
override fun popularMangaNextPageSelector() = "li.page-item a[rel=next]"
override fun popularMangaFromElement(element: Element) = SManga.create().apply {
setUrlWithoutDomain(element.select("div.series-box a").attr("href"))
thumbnail_url = element.select("img.thumb-img").attr("abs:src")
title = element.select(".series-title").text()
override fun popularMangaParse(response: Response): MangasPage {
val document = response.asJsoup()
val entries = document.select("article.card").map {
SManga.create().apply {
setUrlWithoutDomain(it.selectFirst("a.lanzador")!!.attr("href"))
thumbnail_url = it.selectFirst("img")?.attr("abs:src")
title = it.selectFirst("h2")!!.text()
}
}
val hasNextPage = document.selectFirst("li.page-item a[rel=next]") != null
return MangasPage(entries, hasNextPage)
}
// Latest
override fun latestUpdatesRequest(page: Int): Request {
return GET(baseUrl, headers)
}
override fun latestUpdatesParse(response: Response): MangasPage {
val document = response.asJsoup()
val latestMangaContainer = document.selectFirst("div.d-flex:has(div.series-card)")
val mangaList = latestMangaContainer!!.select("> div").map { element ->
val mangaList = document.select("div#pills-home:lt(1) article").map {
SManga.create().apply {
setUrlWithoutDomain(element.select("div.series-box a").attr("href"))
title = element.select(".series-title").text()
thumbnail_url = element.select("img.thumb-img").attr("abs:src")
setUrlWithoutDomain(it.selectFirst("a[rel=bookmark]")!!.attr("href"))
title = it.selectFirst("h2")!!.text()
thumbnail_url = it.selectFirst("img")?.attr("abs:src")
}
}
return MangasPage(mangaList, false)
}
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
val url = baseUrl.toHttpUrl().newBuilder()
.addPathSegment("mangas")
.addQueryParameter("buscar", query)
.addQueryParameter("page", page.toString())
// Search
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
val url = baseUrl.toHttpUrl().newBuilder().addPathSegment("mangas")
.addQueryParameter("buscar", query).addQueryParameter("page", page.toString())
return GET(url.build(), headers)
}
override fun searchMangaSelector() = popularMangaSelector()
override fun searchMangaParse(response: Response): MangasPage = popularMangaParse(response)
override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element)
// Chapters
override fun searchMangaNextPageSelector() = popularMangaNextPageSelector()
override fun getFilterList() = FilterList(emptyList())
override fun chapterFromElement(element: Element): SChapter {
val chapter = SChapter.create()
with(element) {
select(chapterUrlSelector).first()?.let { urlElement ->
chapter.url = urlElement.attr("abs:href")
chapter.name = urlElement.select("p.chapter-manhwa-title").text()
chapter.date_upload = parseChapterDate(select("span.chapter-release-date").text())
override fun chapterListParse(response: Response): List<SChapter> {
val document = response.asJsoup()
return document.select("ul.list-group a").map {
SChapter.create().apply {
name = it.selectFirst("li")!!.text()
setUrlWithoutDomain(it.attr("abs:href"))
}
}
return chapter
}
override fun pageListParse(document: Document): List<Page> {
// Details
override fun mangaDetailsParse(response: Response): SManga {
val document = response.asJsoup()
val infoRow = document.selectFirst("div.section-main > div.row")
return SManga.create().apply {
description = infoRow?.selectFirst("> :eq(1)")?.ownText()
status = infoRow?.selectFirst("p:contains(Status) > a").parseStatus()
genre = infoRow?.select("p:contains(Tag(s)) a")?.joinToString { it.text() }
}
}
// Pages
override fun pageListParse(response: Response): List<Page> {
val document = response.asJsoup()
return document.select("div#chapter_imgs img").mapIndexed { index, element ->
Page(
index,
@ -87,4 +106,14 @@ class DragonTranslationNet : Madara("DragonTranslation.net", "https://dragontran
)
}
}
override fun imageUrlParse(response: Response): String = throw UnsupportedOperationException()
// Helpers
private fun Element?.parseStatus(): Int = when (this?.text()?.lowercase()) {
"publishing", "ongoing" -> SManga.ONGOING
"ended" -> SManga.COMPLETED
else -> SManga.UNKNOWN
}
}