Tri-state genre filtering for Batoto (#5618)

* Tri-state genre filtering for Batoto
* include or exclude genres
* Fixes typo for Harlequin genre
* Update build.gradle

* Cleaner genre filter list syntax - batoto
This commit is contained in:
Peter Appleby 2021-02-01 18:49:53 -05:00 committed by GitHub
parent 8c66a35f27
commit 771f65d7e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 121 additions and 116 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'Bato.to' extName = 'Bato.to'
pkgNameSuffix = 'all.batoto' pkgNameSuffix = 'all.batoto'
extClass = '.BatoToFactory' extClass = '.BatoToFactory'
extVersionCode = 3 extVersionCode = 4
libVersion = '1.2' libVersion = '1.2'
containsNsfw = true containsNsfw = true
} }

View File

@ -92,17 +92,22 @@ open class BatoTo(
} }
} }
is GenreFilter -> { is GenreFilter -> {
val genreToInclude = mutableListOf<String>() val genreToInclude = filter.state
filter.state.forEach { content -> .filter { it.isIncluded() }
if (content.state) { .map { it.name }
genreToInclude.add(content.name)
} val genreToExclude = filter.state
} .filter { it.isExcluded() }
if (genreToInclude.isNotEmpty()) { .map { it.name }
if (genreToInclude.isNotEmpty() || genreToExclude.isNotEmpty()) {
url.addQueryParameter( url.addQueryParameter(
"genres", "genres",
genreToInclude genreToInclude
.joinToString(",") .joinToString(",") +
"|" +
genreToExclude
.joinToString(",")
) )
} }
} }
@ -298,8 +303,7 @@ open class BatoTo(
override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("Not used") override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("Not used")
private class OriginFilter(genres: List<Tag>) : Filter.Group<Tag>("Origin", genres) private class OriginFilter(genres: List<Tag>) : Filter.Group<Tag>("Origin", genres)
private class GenreFilter(genres: List<Tag>) : Filter.Group<Tag>("Genres", genres) private class GenreFilter(genres: List<Genre>) : Filter.Group<Genre>("Genres", genres)
private class ChapterFilter : UriPartFilter( private class ChapterFilter : UriPartFilter(
"Chapters", "Chapters",
@ -383,111 +387,111 @@ open class BatoTo(
) )
private fun getGenreList() = listOf( private fun getGenreList() = listOf(
Tag("Artbook"), Genre("Artbook"),
Tag("Cartoon"), Genre("Cartoon"),
Tag("Comic"), Genre("Comic"),
Tag("Doujinshi"), Genre("Doujinshi"),
Tag("Imageset"), Genre("Imageset"),
Tag("Manga"), Genre("Manga"),
Tag("Manhua"), Genre("Manhua"),
Tag("Manhwa"), Genre("Manhwa"),
Tag("Webtoon"), Genre("Webtoon"),
Tag("Western"), Genre("Western"),
Tag("Josei"), Genre("Josei"),
Tag("Seinen"), Genre("Seinen"),
Tag("Shoujo"), Genre("Shoujo"),
Tag("Shoujo_Ai"), Genre("Shoujo_Ai"),
Tag("Shounen"), Genre("Shounen"),
Tag("Shounen_Ai"), Genre("Shounen_Ai"),
Tag("Yaoi"), Genre("Yaoi"),
Tag("Yuri"), Genre("Yuri"),
Tag("Ecchi"), Genre("Ecchi"),
Tag("Mature"), Genre("Mature"),
Tag("Adult"), Genre("Adult"),
Tag("Gore"), Genre("Gore"),
Tag("Violence"), Genre("Violence"),
Tag("Smut"), Genre("Smut"),
Tag("Hentai"), Genre("Hentai"),
Tag("4_Koma"), Genre("4_Koma"),
Tag("Action"), Genre("Action"),
Tag("Adaptation"), Genre("Adaptation"),
Tag("Adventure"), Genre("Adventure"),
Tag("Aliens"), Genre("Aliens"),
Tag("Animals"), Genre("Animals"),
Tag("Anthology"), Genre("Anthology"),
Tag("Comedy"), Genre("Comedy"),
Tag("Cooking"), Genre("Cooking"),
Tag("Crime"), Genre("Crime"),
Tag("Crossdressing"), Genre("Crossdressing"),
Tag("Delinquents"), Genre("Delinquents"),
Tag("Dementia"), Genre("Dementia"),
Tag("Demons"), Genre("Demons"),
Tag("Drama"), Genre("Drama"),
Tag("Fantasy"), Genre("Fantasy"),
Tag("Fan_Colored"), Genre("Fan_Colored"),
Tag("Full_Color"), Genre("Full_Color"),
Tag("Game"), Genre("Game"),
Tag("Gender_Bender"), Genre("Gender_Bender"),
Tag("Genderswap"), Genre("Genderswap"),
Tag("Ghosts"), Genre("Ghosts"),
Tag("Gyaru"), Genre("Gyaru"),
Tag("Harem"), Genre("Harem"),
Tag("Halequin"), Genre("Harlequin"),
Tag("Historical"), Genre("Historical"),
Tag("Horror"), Genre("Horror"),
Tag("Incest"), Genre("Incest"),
Tag("Isekai"), Genre("Isekai"),
Tag("Kids"), Genre("Kids"),
Tag("Loli"), Genre("Loli"),
Tag("Lolicon"), Genre("Lolicon"),
Tag("Magic"), Genre("Magic"),
Tag("Magical_Girls"), Genre("Magical_Girls"),
Tag("Martial_Arts"), Genre("Martial_Arts"),
Tag("Mecha"), Genre("Mecha"),
Tag("Medical"), Genre("Medical"),
Tag("Military"), Genre("Military"),
Tag("Monster_Girls"), Genre("Monster_Girls"),
Tag("Monsters"), Genre("Monsters"),
Tag("Music"), Genre("Music"),
Tag("Mystery"), Genre("Mystery"),
Tag("Netorare"), Genre("Netorare"),
Tag("Ninja"), Genre("Ninja"),
Tag("Office_Workers"), Genre("Office_Workers"),
Tag("Oneshot"), Genre("Oneshot"),
Tag("Parody"), Genre("Parody"),
Tag("Philosophical"), Genre("Philosophical"),
Tag("Police"), Genre("Police"),
Tag("Post_Apocalyptic"), Genre("Post_Apocalyptic"),
Tag("Psychological"), Genre("Psychological"),
Tag("Reincarnation"), Genre("Reincarnation"),
Tag("Reverse_Harem"), Genre("Reverse_Harem"),
Tag("Romance"), Genre("Romance"),
Tag("Samurai"), Genre("Samurai"),
Tag("School_Life"), Genre("School_Life"),
Tag("Sci_Fi"), Genre("Sci_Fi"),
Tag("Shota"), Genre("Shota"),
Tag("Shotacon"), Genre("Shotacon"),
Tag("Slice_Of_Life"), Genre("Slice_Of_Life"),
Tag("SM_BDSM"), Genre("SM_BDSM"),
Tag("Space"), Genre("Space"),
Tag("Sports"), Genre("Sports"),
Tag("Super_Power"), Genre("Super_Power"),
Tag("Superhero"), Genre("Superhero"),
Tag("Supernatural"), Genre("Supernatural"),
Tag("Survival"), Genre("Survival"),
Tag("Thriller"), Genre("Thriller"),
Tag("Time_Travel"), Genre("Time_Travel"),
Tag("Tragedy"), Genre("Tragedy"),
Tag("Vampires"), Genre("Vampires"),
Tag("Video_Games"), Genre("Video_Games"),
Tag("Virtual_Reality"), Genre("Virtual_Reality"),
Tag("Wuxia"), Genre("Wuxia"),
Tag("Xianxia"), Genre("Xianxia"),
Tag("Xuanhuan"), Genre("Xuanhuan"),
Tag("Zombies"), Genre("Zombies"),
Tag("award_winning"), Genre("award_winning"),
Tag("youkai"), Genre("youkai"),
Tag("uncategorized") Genre("uncategorized")
) )
private open class UriPartFilter(displayName: String, val vals: Array<Pair<String, String>>) : private open class UriPartFilter(displayName: String, val vals: Array<Pair<String, String>>) :
@ -496,4 +500,5 @@ open class BatoTo(
} }
private class Tag(name: String) : Filter.CheckBox(name) private class Tag(name: String) : Filter.CheckBox(name)
private class Genre(name: String) : Filter.TriState(name)
} }