From a172fa5a5b44f00c99e8c7dca2ae10a2d9c22a75 Mon Sep 17 00:00:00 2001 From: devi Date: Wed, 3 Jan 2024 19:33:45 +0100 Subject: [PATCH] Add new filter on sources Add BurningScans --- .../kotatsu/parsers/site/all/BatoToParser.kt | 26 ++++++++++++++++--- .../parsers/site/all/MangaDexParser.kt | 10 +++++-- .../kotatsu/parsers/site/all/MangaPark.kt | 24 +++++++++++++++-- .../parsers/site/fr/BentomangaParser.kt | 10 +++++++ .../parsers/site/madara/pt/BurningScans.kt | 12 +++++++++ 5 files changed, 75 insertions(+), 7 deletions(-) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/BurningScans.kt 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 7b8f90f2..fac5a58e 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 @@ -35,6 +35,10 @@ internal class BatoToParser(context: MangaLoaderContext) : PagedMangaParser( override val availableStates: Set = EnumSet.allOf(MangaState::class.java) + override val isTagsExclusionSupported = true + + override val availableContentRating: Set = EnumSet.of(ContentRating.SAFE) + override val configKeyDomain = ConfigKey.Domain( "bato.to", "batocomic.com", @@ -103,13 +107,29 @@ internal class BatoToParser(context: MangaLoaderContext) : PagedMangaParser( append(it.language) } + append("&genres=") if (filter.tags.isNotEmpty()) { - append("&genres=") appendAll(filter.tags, ",") { it.key } } + append("|") + if (filter.tagsExclude.isNotEmpty()) { + appendAll(filter.tagsExclude, ",") { it.key } + } + + if (filter.contentRating.isNotEmpty()) { + filter.contentRating.oneOrThrowIfMany()?.let { + append( + when (it) { + ContentRating.SAFE -> append(",gore,bloody,violence,ecchi,adult,mature,smut,hentai") + else -> append("") + }, + ) + } + } + append("&page=") - append(page) + append(page.toString()) } return parseList(url, page) @@ -121,7 +141,7 @@ internal class BatoToParser(context: MangaLoaderContext) : PagedMangaParser( append(domain) append("/browse?sort=update.za") append("&page=") - append(page) + append(page.toString()) } return parseList(url, page) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaDexParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaDexParser.kt index cd4bcdfe..70e245df 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaDexParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaDexParser.kt @@ -35,6 +35,8 @@ internal class MangaDexParser(context: MangaLoaderContext) : MangaParser(context override val availableStates: Set = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED, MangaState.PAUSED, MangaState.ABANDONED) + override val isTagsExclusionSupported = true + override suspend fun getList(offset: Int, filter: MangaListFilter?): List { val domain = domain @@ -53,11 +55,15 @@ internal class MangaDexParser(context: MangaLoaderContext) : MangaParser(context } is MangaListFilter.Advanced -> { - filter.tags.forEach { tag -> + filter.tags.forEach { append("&includedTags[]=") - append(tag.key) + append(it.key) } + filter.tagsExclude.forEach { + append("&excludedTags[]=") + append(it.key) + } if (filter.contentRating.isNotEmpty()) { filter.contentRating.forEach { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaPark.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaPark.kt index b3acfff1..e4cdabf0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaPark.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaPark.kt @@ -20,6 +20,10 @@ internal class MangaPark(context: MangaLoaderContext) : override val availableStates: Set = EnumSet.allOf(MangaState::class.java) + override val availableContentRating: Set = EnumSet.of(ContentRating.SAFE) + + override val isTagsExclusionSupported = true + override val configKeyDomain = ConfigKey.Domain("mangapark.net") private val tagsMap = SuspendLazy(::parseTags) @@ -42,9 +46,25 @@ internal class MangaPark(context: MangaLoaderContext) : is MangaListFilter.Advanced -> { + append("&genres=") if (filter.tags.isNotEmpty()) { - append("&genres=") - append(filter.tags.joinToString(",") { it.key }) + appendAll(filter.tags, ",") { it.key } + } + + append("|") + if (filter.tagsExclude.isNotEmpty()) { + appendAll(filter.tagsExclude, ",") { it.key } + } + + if (filter.contentRating.isNotEmpty()) { + filter.contentRating.oneOrThrowIfMany()?.let { + append( + when (it) { + ContentRating.SAFE -> append(",gore,bloody,violence,ecchi,adult,mature,smut,hentai") + else -> append("") + }, + ) + } } filter.states.oneOrThrowIfMany()?.let { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/BentomangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/BentomangaParser.kt index 80e9b600..f35c8cac 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/BentomangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/BentomangaParser.kt @@ -53,10 +53,20 @@ internal class BentomangaParser(context: MangaLoaderContext) : PagedMangaParser( when (filter.sortOrder) { SortOrder.UPDATED -> url.addQueryParameter("order_by", "update") + .addQueryParameter("order", "desc") + SortOrder.POPULARITY -> url.addQueryParameter("order_by", "views") + .addQueryParameter("order", "desc") + SortOrder.RATING -> url.addQueryParameter("order_by", "top") + .addQueryParameter("order", "desc") + SortOrder.NEWEST -> url.addQueryParameter("order_by", "create") + .addQueryParameter("order", "desc") + SortOrder.ALPHABETICAL -> url.addQueryParameter("order_by", "name") + .addQueryParameter("order", "asc") + SortOrder.ALPHABETICAL_DESC -> url.addQueryParameter("order_by", "name") .addQueryParameter("order", "desc") } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/BurningScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/BurningScans.kt new file mode 100644 index 00000000..d340bcec --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/BurningScans.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("BURNINGSCANS", "BurningScans", "pt") +internal class BurningScans(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.BURNINGSCANS, "burningscans.com") { + override val datePattern = "dd/MM/yyyy" +}