From 6a813c9ab8271b933784324f3a11452d3830fc3e Mon Sep 17 00:00:00 2001 From: Gauthier Date: Mon, 1 Mar 2021 20:27:37 +0800 Subject: [PATCH] feat: filter by authors (#6014) --- src/all/komga/CHANGELOG.md | 8 +++++ src/all/komga/build.gradle | 2 +- .../tachiyomi/extension/all/komga/Komga.kt | 33 +++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/all/komga/CHANGELOG.md b/src/all/komga/CHANGELOG.md index 0bb312850..510eb4e68 100644 --- a/src/all/komga/CHANGELOG.md +++ b/src/all/komga/CHANGELOG.md @@ -1,3 +1,11 @@ +## 1.2.20 + +Minimum Komga version required: `0.75.0` + +### Features + +* filter by authors, grouped by role + ## 1.2.19 Minimum Komga version required: `0.68.0` diff --git a/src/all/komga/build.gradle b/src/all/komga/build.gradle index 8b065d870..8b64df89c 100644 --- a/src/all/komga/build.gradle +++ b/src/all/komga/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'Komga' pkgNameSuffix = 'all.komga' extClass = '.KomgaFactory' - extVersionCode = 19 + extVersionCode = 20 libVersion = '1.2' } diff --git a/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/Komga.kt b/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/Komga.kt index 396bb829c..edf62585e 100644 --- a/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/Komga.kt +++ b/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/Komga.kt @@ -9,6 +9,7 @@ import android.widget.Toast import com.github.salomonbrys.kotson.fromJson import com.google.gson.Gson import eu.kanade.tachiyomi.extension.BuildConfig +import eu.kanade.tachiyomi.extension.all.komga.dto.AuthorDto import eu.kanade.tachiyomi.extension.all.komga.dto.BookDto import eu.kanade.tachiyomi.extension.all.komga.dto.CollectionDto import eu.kanade.tachiyomi.extension.all.komga.dto.LibraryDto @@ -128,6 +129,17 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() { url.addQueryParameter("publisher", publisherToInclude.joinToString(",")) } } + is AuthorGroup -> { + val authorToInclude = mutableListOf() + filter.state.forEach { content -> + if (content.state) { + authorToInclude.add(content.author) + } + } + authorToInclude.forEach { + url.addQueryParameter("author", "${it.name},${it.role}") + } + } is Filter.Sort -> { var sortCriteria = when (filter.state?.index) { 0 -> "metadata.titleSort" @@ -265,6 +277,8 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() { private class TagGroup(tags: List) : Filter.Group("Tags", tags) private class PublisherFilter(publisher: String) : Filter.CheckBox(publisher, false) private class PublisherGroup(publishers: List) : Filter.Group("Publishers", publishers) + private class AuthorFilter(val author: AuthorDto) : Filter.CheckBox(author.name, false) + private class AuthorGroup(role: String, authors: List) : Filter.Group(role, authors) override fun getFilterList(): FilterList = FilterList( @@ -275,6 +289,7 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() { GenreGroup(genres.map { GenreFilter(it) }), TagGroup(tags.map { TagFilter(it) }), PublisherGroup(publishers.map { PublisherFilter(it) }), + *authors.map { (role, authors) -> AuthorGroup(role, authors.map { AuthorFilter(it) }) }.toTypedArray(), SeriesSort() ) @@ -283,6 +298,7 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() { private var genres = emptySet() private var tags = emptySet() private var publishers = emptySet() + private var authors = emptyMap>() // roles to list of authors override val name = "Komga${if (suffix.isNotBlank()) " ($suffix)" else ""}" override val lang = "en" @@ -458,6 +474,23 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() { }, {} ) + + Single.fromCallable { + client.newCall(GET("$baseUrl/api/v1/authors", headers)).execute() + } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + { response -> + authors = try { + val list: List = gson.fromJson(response.body()?.charStream()!!) + list.groupBy({ it.role }, { it }) + } catch (e: Exception) { + emptyMap() + } + }, + {} + ) } companion object {