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:
parent
8c66a35f27
commit
771f65d7e9
@ -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
|
||||||
}
|
}
|
||||||
|
@ -92,16 +92,21 @@ 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(",") +
|
||||||
|
"|" +
|
||||||
|
genreToExclude
|
||||||
.joinToString(",")
|
.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)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user