Keyoapp: tweak selector; Asmodeus Scans: filter novel,fix info (#10870)

* Asmodeus Scans: filter novel, add/fix genres

* Keyoapp: fix n tweak genre,type selector

- previous type selector was mistakenly named genre
- make genre selector val
- tweak the genre selector to exclude manga status from genre

* fix

* tweak description
This commit is contained in:
Luqman 2025-10-05 16:03:35 +07:00 committed by Draff
parent ab4b1e2276
commit 92a0ada358
Signed by: Draff
GPG Key ID: E8A89F3211677653
11 changed files with 44 additions and 14 deletions

View File

@ -2,7 +2,7 @@ plugins {
id("lib-multisrc")
}
baseVersionCode = 17
baseVersionCode = 18
dependencies {
api(project(":lib:i18n"))

View File

@ -215,7 +215,9 @@ abstract class Keyoapp(
protected open val statusSelector: String = "div:has(span:containsOwn(Status)) ~ div"
protected open val authorSelector: String = "div:has(span:containsOwn(Author)) ~ div"
protected open val artistSelector: String = "div:has(span:containsOwn(Artist)) ~ div"
protected open val genreSelector: String = "div:has(span:containsOwn(Type)) ~ div"
protected open val genreSelector: String = "div.grid:has(>h1) > div > a:not([title='Status'])"
protected open val typeSelector: String = "div:has(span:containsOwn(Type)) ~ div"
protected open val dateSelector: String = ".text-xs"
override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
@ -226,16 +228,16 @@ abstract class Keyoapp(
author = document.selectFirst(authorSelector)?.text()
artist = document.selectFirst(artistSelector)?.text()
genre = buildList {
document.selectFirst(genreSelector)?.text()?.replaceFirstChar {
document.selectFirst(typeSelector)?.text()?.replaceFirstChar {
if (it.isLowerCase()) {
it.titlecase(
Locale.getDefault(),
Locale.ENGLISH,
)
} else {
it.toString()
}
}.let(::add)
document.select("div.grid:has(>h1) > div > a").forEach { add(it.text()) }
document.select(genreSelector).forEach { add(it.text()) }
}.joinToString()
}

View File

@ -11,5 +11,5 @@ class AeinScans : Keyoapp(
override val statusSelector: String = "div[alt=Status]"
override val authorSelector: String = "div[alt=Author]"
override val artistSelector: String = "div[alt=Artist]"
override val genreSelector: String = "div[alt='Series Type']"
override val typeSelector: String = "div[alt='Series Type']"
}

View File

@ -66,7 +66,7 @@ class ArtLapsa : Keyoapp("Art Lapsa", "https://artlapsa.com", "en") {
override val descriptionSelector = "#expand_content"
override val statusSelector = "[alt=Status]"
override val genreSelector = "[alt=Type]"
override val typeSelector = "[alt=Type]"
override fun chapterListSelector(): String {
if (!preferences.showPaidChapters) {

View File

@ -1,9 +1,37 @@
package eu.kanade.tachiyomi.extension.en.asmotoon
import eu.kanade.tachiyomi.multisrc.keyoapp.Keyoapp
import eu.kanade.tachiyomi.source.model.SManga
import org.jsoup.nodes.Document
import java.util.Locale
class Asmotoon : Keyoapp(
"Asmodeus Scans",
"https://asmotoon.com",
"en",
)
) {
// filtering novel entries
override fun popularMangaSelector() = "div:contains(Trending) + div .group.overflow-hidden.grid:not(:has(.capitalize:contains(Novel)))"
override fun latestUpdatesSelector() = "div.grid > div.group:not(:has(.capitalize:contains(Novel)))"
override fun searchMangaSelector() = "#searched_series_page > button:not(:has(.capitalize:contains(Novel)))"
override val descriptionSelector: String = "#expand_content"
override val genreSelector: String = ".gap-3 .gap-1 a"
override fun mangaDetailsParse(document: Document): SManga {
return super.mangaDetailsParse(document).apply {
genre = buildList {
document.selectFirst(typeSelector)?.text()?.replaceFirstChar {
if (it.isLowerCase()) {
it.titlecase(
Locale.ENGLISH,
)
} else {
it.toString()
}
}.let(::add)
document.select(genreSelector).forEach { add(it.text().removeSuffix(",")) }
}.joinToString()
}
}
}

View File

@ -11,5 +11,5 @@ class CasaComic : Keyoapp(
override val statusSelector: String = "div[alt=Status]"
override val authorSelector: String = "div[alt=Author]"
override val artistSelector: String = "div[alt=Artist]"
override val genreSelector: String = "div[alt='Series Type']"
override val typeSelector: String = "div[alt='Series Type']"
}

View File

@ -11,5 +11,5 @@ class KaynScans : Keyoapp(
override val statusSelector: String = "div[alt=Status]"
override val authorSelector: String = "div[alt=Author]"
override val artistSelector: String = "div[alt=Artist]"
override val genreSelector: String = "div[alt='Series Type']"
override val typeSelector: String = "div[alt='Series Type']"
}

View File

@ -11,5 +11,5 @@ class MSYToon : Keyoapp(
override val statusSelector: String = "div[alt=Status]"
override val authorSelector: String = "div[alt=Author]"
override val artistSelector: String = "div[alt=Artist]"
override val genreSelector: String = "div[alt='Series Type']"
override val typeSelector: String = "div[alt='Series Type']"
}

View File

@ -11,5 +11,5 @@ class NyanuKafe : Keyoapp(
override val statusSelector: String = "div[alt=Status]"
override val authorSelector: String = "div[alt=Author]"
override val artistSelector: String = "div[alt=Artist]"
override val genreSelector: String = "div[alt='Series Type']"
override val typeSelector: String = "div[alt='Series Type']"
}

View File

@ -66,7 +66,7 @@ class RitharScans : Keyoapp("RitharScans", "https://ritharscans.com", "en") {
override val descriptionSelector = "#expand_content"
override val statusSelector = "[alt=Status]"
override val genreSelector = "[alt=Type]"
override val typeSelector = "[alt=Type]"
override fun pageListParse(document: Document): List<Page> {
val (pages, baseLink) = document.selectFirst("[x-data*=pages]")!!.attr("x-data")

View File

@ -11,5 +11,5 @@ class ValirScans : Keyoapp(
override val statusSelector: String = "div[alt=Status]"
override val authorSelector: String = "div[alt=Author]"
override val artistSelector: String = "div[alt=Artist]"
override val genreSelector: String = "div[alt='Series Type']"
override val typeSelector: String = "div[alt='Series Type']"
}