From 81caa59a362203ef4f4ca901209345c1f0aeba14 Mon Sep 17 00:00:00 2001 From: devi Date: Sat, 25 Nov 2023 17:06:21 +0100 Subject: [PATCH] Add status filter support Add oneOrThrowIfMany() on MangaState --- .../kotatsu/parsers/site/all/BatoToParser.kt | 91 +++++++++++++------ 1 file changed, 63 insertions(+), 28 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/BatoToParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/BatoToParser.kt index c9da08f5..a453063a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/BatoToParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/BatoToParser.kt @@ -33,6 +33,8 @@ internal class BatoToParser(context: MangaLoaderContext) : PagedMangaParser( SortOrder.ALPHABETICAL, ) + override val availableStates: Set = EnumSet.allOf(MangaState::class.java) + override val configKeyDomain = ConfigKey.Domain( "bato.to", "batocomic.com", @@ -61,37 +63,68 @@ internal class BatoToParser(context: MangaLoaderContext) : PagedMangaParser( "zbato.org", ) - override suspend fun getListPage( - page: Int, - query: String?, - tags: Set?, - sortOrder: SortOrder, - ): List { - 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") + override suspend fun getListPage(page: Int, filter: MangaListFilter?): List { + when (filter) { - SortOrder.POPULARITY -> append("views_a.za") - SortOrder.NEWEST -> append("create.za") - SortOrder.ALPHABETICAL -> append("title.az") - SortOrder.RATING -> Unit + is MangaListFilter.Search -> { + return search(page, filter.query) } - if (!tags.isNullOrEmpty()) { - append("&genres=") - appendAll(tags, ",") { it.key } + + is MangaListFilter.Advanced -> { + + 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 { @@ -109,9 +142,11 @@ internal class BatoToParser(context: MangaLoaderContext) : PagedMangaParser( ?.selectFirst(".limit-html") ?.html(), tags = manga.tags + attrs["Genres:"]?.parseTags().orEmpty(), - state = when (attrs["Release status:"]?.text()) { + state = when (attrs["Original work:"]?.text()) { "Ongoing" -> MangaState.ONGOING "Completed" -> MangaState.FINISHED + "Cancelled" -> MangaState.ABANDONED + "Hiatus" -> MangaState.PAUSED else -> manga.state }, author = attrs["Authors:"]?.text()?.trim() ?: manga.author,