extensions-source/multisrc/overrides/zeistmanga/mikoroku/src/MikoRoku.kt

87 lines
3.4 KiB
Kotlin
Raw Normal View History

2024-01-09 06:12:39 +08:00
package eu.kanade.tachiyomi.extension.id.mikoroku
import eu.kanade.tachiyomi.multisrc.zeistmanga.Genre
import eu.kanade.tachiyomi.multisrc.zeistmanga.Status
import eu.kanade.tachiyomi.multisrc.zeistmanga.ZeistManga
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.Response
import org.jsoup.nodes.Element
class MikoRoku : ZeistManga("MikoRoku", "https://www.mikoroku.web.id", "id") {
// ============================== Popular ===============================
override val popularMangaSelector = "div.PopularPosts article"
override val popularMangaSelectorTitle = ".post-title a"
override val popularMangaSelectorUrl = ".post-title a"
// ============================== Filters ===============================
override val hasFilters = true
// The source actually has both, but they return no result, so its useless.
override val hasLanguageFilter = false
override val hasTypeFilter = false
override fun getStatusList() = listOf(
Status("Semua", ""),
Status("Ongoing", "Ongoing"),
Status("Completed", "Completed"),
)
override fun getGenreList() = listOf(
Genre("Action", "Action"),
Genre("Adventure", "Adventure"),
Genre("Comedy", "Comedy"),
Genre("Dark Fantasy", "Dark Fantasy"),
Genre("Drama", "Drama"),
Genre("Fantasy", "Fantasy"),
Genre("Harem", "H4rem"),
Genre("Historical", "Historical"),
Genre("Horror", "Horror"),
Genre("Isekai", "Isekai"),
Genre("Magic", "Magic"),
Genre("Mecha", "Mecha"),
Genre("Military", "Military"),
Genre("Monsters", "Monsters"),
Genre("Mystery", "Mystery"),
Genre("Psychological", "Psychological"),
Genre("Romance", "Romance"),
Genre("School Life", "School Life"),
Genre("Sci-Fi", "Sci-Fi"),
Genre("Seinen", "Seinen"),
Genre("Shounen", "Shounen"),
Genre("Slice of Life", "Slice of Life"),
Genre("Supernatural", "Supernatural"),
Genre("Survival", "Survival"),
Genre("Tragedy", "Tragedy"),
)
// =========================== Manga Details ============================
override val mangaDetailsSelector = "div.section#main div.widget:has(main)"
override val mangaDetailsSelectorGenres = "dl > dd > a[rel=tag]"
override fun mangaDetailsParse(response: Response): SManga {
val document = response.use { it.asJsoup() }
val profileManga = document.selectFirst(mangaDetailsSelector)!!
return SManga.create().apply {
with(profileManga) {
thumbnail_url = selectFirst("img")?.absUrl("src")
description = document.select(mangaDetailsSelectorDescription).text()
genre = select(mangaDetailsSelectorGenres).eachText().joinToString()
status = parseStatus(selectFirst("span[data-status]")?.text().orEmpty())
author = getInfo("Author")
artist = getInfo("Artist")
}
}
}
private fun Element.getInfo(text: String): String? =
selectFirst("$mangaDetailsSelectorInfo:containsOwn($text) > $mangaDetailsSelectorInfoDescription")
?.text()
?.trim()
// =============================== Pages ================================
// Specific/faster selection first, generic/slower last
override val pageListSelector = "article#reader div.separator a, article#reader"
}