diff --git a/src/es/dragontranslationnet/build.gradle b/src/es/dragontranslationnet/build.gradle index b9b05d2de..102751637 100644 --- a/src/es/dragontranslationnet/build.gradle +++ b/src/es/dragontranslationnet/build.gradle @@ -1,9 +1,7 @@ ext { extName = 'DragonTranslation.net' extClass = '.DragonTranslationNet' - themePkg = 'madara' - baseUrl = 'https://dragontranslation.net' - overrideVersionCode = 0 + extVersionCode = 40 isNsfw = true } diff --git a/src/es/dragontranslationnet/src/eu/kanade/tachiyomi/extension/es/dragontranslationnet/DragonTranslationNet.kt b/src/es/dragontranslationnet/src/eu/kanade/tachiyomi/extension/es/dragontranslationnet/DragonTranslationNet.kt index 1b6896667..ec1c4f121 100644 --- a/src/es/dragontranslationnet/src/eu/kanade/tachiyomi/extension/es/dragontranslationnet/DragonTranslationNet.kt +++ b/src/es/dragontranslationnet/src/eu/kanade/tachiyomi/extension/es/dragontranslationnet/DragonTranslationNet.kt @@ -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 { + 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 { + // 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 { + 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 + } }