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,37 +63,68 @@ 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>?,
sortOrder: SortOrder,
): List<Manga> {
if (!query.isNullOrEmpty()) {
return search(page, query)
}
@Suppress("NON_EXHAUSTIVE_WHEN_STATEMENT")
val url = buildString {
append("https://")
append(domain)
append("/browse?sort=")
when (sortOrder) {
SortOrder.UPDATED,
-> append("update.za")
SortOrder.POPULARITY -> append("views_a.za") is MangaListFilter.Search -> {
SortOrder.NEWEST -> append("create.za") return search(page, filter.query)
SortOrder.ALPHABETICAL -> append("title.az")
SortOrder.RATING -> Unit
} }
if (!tags.isNullOrEmpty()) {
append("&genres=") is MangaListFilter.Advanced -> {
appendAll(tags, ",") { it.key }
val url = buildString {
append("https://")
append(domain)
append("/browse?sort=")
when (filter.sortOrder) {
SortOrder.UPDATED -> append("update.za")
SortOrder.POPULARITY -> append("views_a.za")
SortOrder.NEWEST -> append("create.za")
SortOrder.ALPHABETICAL -> append("title.az")
else -> append("update.za")
}
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=")
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)
}
return parseList(url, page)
} }
append("&page=")
append(page)
} }
return parseList(url, page)
} }
override suspend fun getDetails(manga: Manga): Manga { override suspend fun getDetails(manga: Manga): Manga {
@ -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