Add status filter support

Add oneOrThrowIfMany() on MangaState
pull/401/head
devi 2 years ago
parent 46e863ef79
commit 81caa59a36

@ -33,6 +33,8 @@ internal class BatoToParser(context: MangaLoaderContext) : PagedMangaParser(
SortOrder.ALPHABETICAL, SortOrder.ALPHABETICAL,
) )
override val availableStates: Set<MangaState> = EnumSet.allOf(MangaState::class.java)
override val configKeyDomain = ConfigKey.Domain( override val configKeyDomain = ConfigKey.Domain(
"bato.to", "bato.to",
"batocomic.com", "batocomic.com",
@ -61,38 +63,69 @@ internal class BatoToParser(context: MangaLoaderContext) : PagedMangaParser(
"zbato.org", "zbato.org",
) )
override suspend fun getListPage( override suspend fun getListPage(page: Int, filter: MangaListFilter?): List<Manga> {
page: Int, when (filter) {
query: String?,
tags: Set<MangaTag>?, is MangaListFilter.Search -> {
sortOrder: SortOrder, return search(page, filter.query)
): List<Manga> { }
if (!query.isNullOrEmpty()) {
return search(page, query) is MangaListFilter.Advanced -> {
}
@Suppress("NON_EXHAUSTIVE_WHEN_STATEMENT")
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)
append("/browse?sort=")
when (sortOrder) {
SortOrder.UPDATED,
-> append("update.za")
append("/browse?sort=")
when (filter.sortOrder) {
SortOrder.UPDATED -> append("update.za")
SortOrder.POPULARITY -> append("views_a.za") SortOrder.POPULARITY -> append("views_a.za")
SortOrder.NEWEST -> append("create.za") SortOrder.NEWEST -> append("create.za")
SortOrder.ALPHABETICAL -> append("title.az") SortOrder.ALPHABETICAL -> append("title.az")
SortOrder.RATING -> Unit else -> append("update.za")
} }
if (!tags.isNullOrEmpty()) {
if (filter.states.isNotEmpty()) {
val state = filter.states.oneOrThrowIfMany()
append("&release=")
append(
when (state) {
MangaState.ONGOING -> "ongoing"
MangaState.FINISHED -> "completed"
MangaState.ABANDONED -> "cancelled"
MangaState.PAUSED -> "hiatus"
else -> ""
},
)
}
// langs= en ...
if (filter.tags.isNotEmpty()) {
append("&genres=") append("&genres=")
appendAll(tags, ",") { it.key } appendAll(filter.tags, ",") { it.key }
}
append("&page=")
append(page)
}
return parseList(url, page)
} }
null -> {
val url = buildString {
append("https://")
append(domain)
append("/browse?sort=update.za")
append("&page=") append("&page=")
append(page) append(page)
} }
return parseList(url, page) return parseList(url, page)
} }
}
}
override suspend fun getDetails(manga: Manga): Manga { override suspend fun getDetails(manga: Manga): Manga {
val root = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() val root = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml()
@ -109,9 +142,11 @@ internal class BatoToParser(context: MangaLoaderContext) : PagedMangaParser(
?.selectFirst(".limit-html") ?.selectFirst(".limit-html")
?.html(), ?.html(),
tags = manga.tags + attrs["Genres:"]?.parseTags().orEmpty(), tags = manga.tags + attrs["Genres:"]?.parseTags().orEmpty(),
state = when (attrs["Release status:"]?.text()) { state = when (attrs["Original work:"]?.text()) {
"Ongoing" -> MangaState.ONGOING "Ongoing" -> MangaState.ONGOING
"Completed" -> MangaState.FINISHED "Completed" -> MangaState.FINISHED
"Cancelled" -> MangaState.ABANDONED
"Hiatus" -> MangaState.PAUSED
else -> manga.state else -> manga.state
}, },
author = attrs["Authors:"]?.text()?.trim() ?: manga.author, author = attrs["Authors:"]?.text()?.trim() ?: manga.author,

Loading…
Cancel
Save