236 lines
6.5 KiB
Kotlin
236 lines
6.5 KiB
Kotlin
package eu.kanade.tachiyomi.extension.en.manhwasmen
|
|
|
|
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
|
import eu.kanade.tachiyomi.network.GET
|
|
import eu.kanade.tachiyomi.source.model.Filter
|
|
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
|
|
|
|
class ManhwasMen : Madara("Manhwas Men", "https://manhwas.men", "en") {
|
|
override val versionId = 2
|
|
|
|
override val fetchGenres = false
|
|
override val sendViewCount = false
|
|
|
|
// popular
|
|
override fun popularMangaSelector() = "div.col-6"
|
|
override val popularMangaUrlSelector = ".series-box a"
|
|
override fun popularMangaNextPageSelector() = "a[rel=next]"
|
|
|
|
override fun popularMangaRequest(page: Int): Request {
|
|
return GET("$baseUrl/manga-list?page=$page", headers)
|
|
}
|
|
|
|
override fun popularMangaFromElement(element: Element): SManga {
|
|
return super.popularMangaFromElement(element).apply {
|
|
title = element.select(popularMangaUrlSelector).text()
|
|
}
|
|
}
|
|
|
|
// latest
|
|
override fun latestUpdatesSelector() = "div.d-flex:nth-child(6) div.col-6"
|
|
|
|
override fun latestUpdatesRequest(page: Int): Request {
|
|
return GET(baseUrl, headers)
|
|
}
|
|
|
|
// search
|
|
override fun searchMangaSelector() = popularMangaSelector()
|
|
override fun searchMangaNextPageSelector() = popularMangaNextPageSelector()
|
|
override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element)
|
|
|
|
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
|
val url = "$baseUrl/manga-list".toHttpUrl().newBuilder().apply {
|
|
if (query.isEmpty()) {
|
|
filters.forEach { filter ->
|
|
when (filter) {
|
|
is GenreFilter -> {
|
|
addQueryParameter("genero", filter.values[filter.state])
|
|
}
|
|
else -> {}
|
|
}
|
|
}
|
|
} else {
|
|
addQueryParameter("search", query)
|
|
}
|
|
addQueryParameter("page", "$page")
|
|
}.build()
|
|
|
|
return GET(url, headers)
|
|
}
|
|
|
|
// manga details
|
|
override fun mangaDetailsParse(document: Document): SManga {
|
|
return super.mangaDetailsParse(document).apply {
|
|
document.select(mangaDetailsSelectorStatus).last()?.let {
|
|
status = when (it.text()) {
|
|
in "complete" -> SManga.COMPLETED
|
|
in "ongoing" -> SManga.ONGOING
|
|
else -> SManga.UNKNOWN
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// chapter list
|
|
override val chapterUrlSuffix = ""
|
|
|
|
override fun chapterFromElement(element: Element): SChapter {
|
|
return super.chapterFromElement(element).apply {
|
|
name = element.select("p").text()
|
|
}
|
|
}
|
|
|
|
// page list
|
|
override val pageListParseSelector = "#chapter_imgs img"
|
|
|
|
// genre
|
|
private val getGenreList: Array<String> = arrayOf(
|
|
"sub-english",
|
|
"adult-drama-manhwa-mature",
|
|
"drama",
|
|
"rape",
|
|
"revenge",
|
|
"secret-relationship",
|
|
"mature",
|
|
"office",
|
|
"harem",
|
|
"romance",
|
|
"ecchi",
|
|
"noona",
|
|
"hypnosis",
|
|
"assistant",
|
|
"special-ability",
|
|
"awakening",
|
|
"raws",
|
|
"toomics",
|
|
"1",
|
|
"adult",
|
|
"toptoon",
|
|
"ntr",
|
|
"bullying",
|
|
"university",
|
|
"comedy-romance-school-life-harem",
|
|
"seinen",
|
|
"sports",
|
|
"virgin",
|
|
"pingon-jaja",
|
|
"lezhin",
|
|
"school-life",
|
|
"campus",
|
|
"action-drama-fantasy-themes",
|
|
"chef",
|
|
"drama-fantasy-omniverse-romance",
|
|
"vanilla",
|
|
"comedy",
|
|
"seniorjunior",
|
|
"first-love",
|
|
"saimin",
|
|
"fantasy-harem",
|
|
"raw",
|
|
"romance-drama-harem",
|
|
"fantasy",
|
|
"18-adult-smut-manhwa-mature",
|
|
"magic",
|
|
"murin",
|
|
"comedy-romance-school-life-drama-harem",
|
|
"romance-drama-mature",
|
|
"supernatural",
|
|
"laezhin",
|
|
"m",
|
|
"romance-drama-harem-mature",
|
|
"anytoon",
|
|
"psychological",
|
|
"militar",
|
|
"chantaje",
|
|
"four-sisters",
|
|
"in-laws",
|
|
"cheatinginfidelity-hypnosis-married-woman-netorare",
|
|
"smut",
|
|
"full-color",
|
|
"comedia",
|
|
"tragedia",
|
|
"adult-romance-mature",
|
|
"drama-harem-mature",
|
|
"adult-drama-seinen-fantasy-harem",
|
|
"adult-romance-drama-seinen-harem-mature",
|
|
"action",
|
|
"mystery",
|
|
"thriller",
|
|
"girlfriend",
|
|
"collegestudent",
|
|
"alumni",
|
|
"lovetriangle",
|
|
"parttimejob",
|
|
"female-friend",
|
|
"neighbour",
|
|
"adult-romance-manhwa-mature",
|
|
"married-woman",
|
|
"beauty",
|
|
"tomics",
|
|
"adaptation-drama-romance",
|
|
"succubus",
|
|
"cosplay",
|
|
"adult-romance-drama-harem",
|
|
"humiliation",
|
|
"two-girl",
|
|
"craving",
|
|
"aunt",
|
|
"housekeeper",
|
|
"manhwa",
|
|
"sci-fi",
|
|
"4-koma",
|
|
"adult-manhwa-mature",
|
|
"adult-romance-seinen",
|
|
"netorare",
|
|
"cohabitation-drama-ntr-office",
|
|
"vida-universitaria",
|
|
"vainilla",
|
|
"comedy-romance-mature",
|
|
"comedy-romance-drama-harem",
|
|
"bodybuilding",
|
|
"josei",
|
|
"topstar",
|
|
"naive-men",
|
|
"mistery",
|
|
"friend",
|
|
"young-woman",
|
|
"first-experience",
|
|
"romance-drama-fantasy-slice-of-life-raw",
|
|
"sisters",
|
|
"slice-of-life",
|
|
"dance",
|
|
"romance-school-life-drama-mature",
|
|
"drama-family",
|
|
"universidad",
|
|
"club",
|
|
"bondage",
|
|
"work-life",
|
|
"romance-school-life-drama-harem",
|
|
"big-pennis",
|
|
"milf",
|
|
"netori",
|
|
"yuri",
|
|
"adventure",
|
|
"adult-romance-drama-smut-manhwa-mature",
|
|
"wife",
|
|
"temptation",
|
|
"sexual-fantasy",
|
|
)
|
|
|
|
private class GenreFilter(title: String, genreList: Array<String>) :
|
|
Filter.Select<String>(title, genreList)
|
|
|
|
override fun getFilterList(): FilterList {
|
|
return FilterList(
|
|
Filter.Header("Note: Ignored if using text search"),
|
|
GenreFilter("Genre", getGenreList),
|
|
)
|
|
}
|
|
}
|