ManhwasMen: fix sources not loading mangas (#9836)

* ManhwasMen: fix popular manda selectors and creator, latest manga selectors and parser, manga details parser

* manhwasmen: add alternative names in description

* manhwasmen: change .not to isNotBlank

Co-authored-by: stevenyomi <95685115+stevenyomi@users.noreply.github.com>

---------

Co-authored-by: stevenyomi <95685115+stevenyomi@users.noreply.github.com>
This commit is contained in:
whitebeardhelper 2025-07-30 04:48:40 -03:00 committed by Draff
parent 22913c11e0
commit ca348c78eb
Signed by: Draff
GPG Key ID: E8A89F3211677653
2 changed files with 56 additions and 23 deletions

View File

@ -3,7 +3,7 @@ ext {
extClass = '.ManhwasMen' extClass = '.ManhwasMen'
themePkg = 'madara' themePkg = 'madara'
baseUrl = 'https://manhwas.men' baseUrl = 'https://manhwas.men'
overrideVersionCode = 0 overrideVersionCode = 1
isNsfw = true isNsfw = true
} }

View File

@ -4,10 +4,13 @@ import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.Filter
import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.model.MangasPage
import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.Request import okhttp3.Request
import okhttp3.Response
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
@ -18,27 +21,43 @@ class ManhwasMen : Madara("Manhwas Men", "https://manhwas.men", "en") {
override val sendViewCount = false override val sendViewCount = false
// popular // popular
override fun popularMangaSelector() = "div.col-6" override fun popularMangaSelector() = "ul > li > article.anime"
override val popularMangaUrlSelector = ".series-box a" override fun popularMangaNextPageSelector() = "div nav ul.pagination li.page-item.active + li a"
override fun popularMangaNextPageSelector() = "a[rel=next]"
override fun popularMangaRequest(page: Int): Request { override fun popularMangaRequest(page: Int): Request {
return GET("$baseUrl/manga-list?page=$page", headers) return GET("$baseUrl/manga-list?page=$page", headers)
} }
override fun popularMangaFromElement(element: Element): SManga { override fun popularMangaFromElement(element: Element) = SManga.create().apply {
return super.popularMangaFromElement(element).apply { setUrlWithoutDomain(element.selectFirst("a")!!.attr("abs:href"))
title = element.select(popularMangaUrlSelector).text() title = element.selectFirst("h3.title")!!.text()
} thumbnail_url = element.selectFirst("img")!!.attr("abs:src")
} }
// latest // latest
override fun latestUpdatesSelector() = "div.d-flex:nth-child(6) div.col-6" override fun latestUpdatesNextPageSelector() = null
override fun latestUpdatesRequest(page: Int): Request { override fun latestUpdatesRequest(page: Int): Request {
return GET(baseUrl, headers) return GET(baseUrl, headers)
} }
override fun latestUpdatesParse(response: Response): MangasPage {
val document = response.asJsoup()
val mangas = document.select(popularMangaSelector())
.map(::latestMangaFromElement).distinctBy { it.url }
return MangasPage(mangas, false)
}
private fun latestMangaFromElement(element: Element): SManga {
return popularMangaFromElement(element).apply {
setUrlWithoutDomain(
element.selectFirst("a")!!.attr("abs:href").replaceAfterLast("/", ""),
)
}
}
// search // search
override fun searchMangaSelector() = popularMangaSelector() override fun searchMangaSelector() = popularMangaSelector()
override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() override fun searchMangaNextPageSelector() = popularMangaNextPageSelector()
@ -66,27 +85,41 @@ class ManhwasMen : Madara("Manhwas Men", "https://manhwas.men", "en") {
// manga details // manga details
override fun mangaDetailsParse(document: Document): SManga { override fun mangaDetailsParse(document: Document): SManga {
return super.mangaDetailsParse(document).apply { val profileManga = document.selectFirst(".anime-single")!!
document.select(mangaDetailsSelectorStatus).last()?.let { return SManga.create().apply {
status = when (it.text()) { title = profileManga.selectFirst(".title")!!.text()
in "complete" -> SManga.COMPLETED thumbnail_url = profileManga.selectFirst("img")!!.attr("abs:src")
in "ongoing" -> SManga.ONGOING description = profileManga.selectFirst(".sinopsis")!!.text()
else -> SManga.UNKNOWN status = parseStatus(profileManga.select("span.anime-type-peli").last()!!.text())
genre = profileManga.select("p.genres > span").joinToString { it.text() }
profileManga.selectFirst(altNameSelector)?.ownText()?.let {
if (it.isNotBlank() && it.notUpdating()) {
description = when {
description.isNullOrBlank() -> "$altName $it"
else -> "${description}\n\n$altName $it"
}
} }
} }
} }
} }
// chapter list private fun parseStatus(status: String): Int = when (status) {
override val chapterUrlSuffix = "" "ongoing" -> SManga.ONGOING
"complete" -> SManga.COMPLETED
override fun chapterFromElement(element: Element): SChapter { else -> SManga.UNKNOWN
return super.chapterFromElement(element).apply { }
name = element.select("p").text()
} override val altNameSelector = "div.container div aside h2.h5"
// chapter list
override fun chapterListSelector() = "aside.principal ul.episodes-list li"
override fun chapterFromElement(element: Element) = SChapter.create().apply {
setUrlWithoutDomain(element.selectFirst("a")!!.attr("abs:href"))
name = element.selectFirst("a > div > p > span")!!.text()
date_upload = parseRelativeDate(element.selectFirst("a > div > span")!!.text())
} }
// page list
override val pageListParseSelector = "#chapter_imgs img" override val pageListParseSelector = "#chapter_imgs img"
// genre // genre