filter by collection (#3620)

add CHANGELOG.md

closes gotson/komga#211
This commit is contained in:
Gauthier 2020-06-27 01:43:31 +08:00 committed by GitHub
parent 3bd98888ee
commit 1556685031
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 129 additions and 6 deletions

View File

@ -0,0 +1,84 @@
## [1.2.12]
Requires Komga `0.41.0`
### Features
* filter by collection
## [1.2.11]
Requires Komga `0.35.2`
### Features
* Set password preferences inputTypes
## [1.2.10]
Requires Komga `0.35.2`
### Features
* unread only filter (closes gotson/komga#180)
* prefix book titles with number (closes gotson/komga#169)
## [1.2.9]
Requires Komga `0.22.0`
### Features
* use SourceFactory to have multiple Komga servers (3 for the moment)
## [1.2.8]
Requires Komga `0.22.0`
### Features
* use book metadata title for chapter display name
* use book metadata sort number for chapter number
## [1.2.7]
### Features
* use series metadata title for display name
* filter on series status
## [1.2.6]
### Features
* Add support for AndroidX preferences
## [1.2.5]
### Features
* add sort options in filter
## [1.2.4]
### Features
* better handling of authentication
## [1.2.3]
### Features
* filters by library
## [1.2.2]
### Features
* request converted image from server if format is not supported
## [1.2.1]
### Features
* first version

View File

@ -5,7 +5,7 @@ ext {
extName = 'Komga' extName = 'Komga'
pkgNameSuffix = 'all.komga' pkgNameSuffix = 'all.komga'
extClass = '.KomgaFactory' extClass = '.KomgaFactory'
extVersionCode = 11 extVersionCode = 12
libVersion = '1.2' libVersion = '1.2'
} }

View File

@ -10,6 +10,7 @@ import com.github.salomonbrys.kotson.fromJson
import com.google.gson.Gson import com.google.gson.Gson
import eu.kanade.tachiyomi.extension.BuildConfig import eu.kanade.tachiyomi.extension.BuildConfig
import eu.kanade.tachiyomi.extension.all.komga.dto.BookDto 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 import eu.kanade.tachiyomi.extension.all.komga.dto.LibraryDto
import eu.kanade.tachiyomi.extension.all.komga.dto.PageDto import eu.kanade.tachiyomi.extension.all.komga.dto.PageDto
import eu.kanade.tachiyomi.extension.all.komga.dto.PageWrapperDto import eu.kanade.tachiyomi.extension.all.komga.dto.PageWrapperDto
@ -23,10 +24,6 @@ import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.source.online.HttpSource
import java.text.DecimalFormat
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
import okhttp3.Credentials import okhttp3.Credentials
import okhttp3.Headers import okhttp3.Headers
import okhttp3.HttpUrl import okhttp3.HttpUrl
@ -38,6 +35,10 @@ import rx.android.schedulers.AndroidSchedulers
import rx.schedulers.Schedulers import rx.schedulers.Schedulers
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import java.text.DecimalFormat
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() { open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() {
override fun popularMangaRequest(page: Int): Request = override fun popularMangaRequest(page: Int): Request =
@ -73,6 +74,17 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() {
url.addQueryParameter("library_id", libraryToInclude.joinToString(",")) url.addQueryParameter("library_id", libraryToInclude.joinToString(","))
} }
} }
is CollectionGroup -> {
val collectionToInclude = mutableListOf<Long>()
filter.state.forEach { content ->
if (content.state) {
collectionToInclude.add(content.id)
}
}
if (collectionToInclude.isNotEmpty()) {
url.addQueryParameter("collection_id", collectionToInclude.joinToString(","))
}
}
is StatusGroup -> { is StatusGroup -> {
val statusToInclude = mutableListOf<String>() val statusToInclude = mutableListOf<String>()
filter.state.forEach { content -> filter.state.forEach { content ->
@ -187,6 +199,8 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() {
private class LibraryFilter(val id: Long, name: String) : Filter.CheckBox(name, false) private class LibraryFilter(val id: Long, name: String) : Filter.CheckBox(name, false)
private class LibraryGroup(libraries: List<LibraryFilter>) : Filter.Group<LibraryFilter>("Libraries", libraries) private class LibraryGroup(libraries: List<LibraryFilter>) : Filter.Group<LibraryFilter>("Libraries", libraries)
private class CollectionFilter(val id: Long, name: String) : Filter.CheckBox(name, false)
private class CollectionGroup(collections: List<CollectionFilter>) : Filter.Group<CollectionFilter>("Collections", collections)
private class SeriesSort : Filter.Sort("Sort", arrayOf("Alphabetically", "Date added", "Date updated"), Selection(0, true)) private class SeriesSort : Filter.Sort("Sort", arrayOf("Alphabetically", "Date added", "Date updated"), Selection(0, true))
private class StatusFilter(name: String) : Filter.CheckBox(name, false) private class StatusFilter(name: String) : Filter.CheckBox(name, false)
private class StatusGroup(filters: List<StatusFilter>) : Filter.Group<StatusFilter>("Status", filters) private class StatusGroup(filters: List<StatusFilter>) : Filter.Group<StatusFilter>("Status", filters)
@ -195,12 +209,14 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() {
override fun getFilterList(): FilterList = override fun getFilterList(): FilterList =
FilterList( FilterList(
UnreadOnly(), UnreadOnly(),
LibraryGroup(libraries.map { LibraryFilter(it.id, it.name) }.sortedBy { it.name }), LibraryGroup(libraries.map { LibraryFilter(it.id, it.name) }.sortedBy { it.name.toLowerCase() }),
CollectionGroup(collections.map { CollectionFilter(it.id, it.name) }.sortedBy { it.name.toLowerCase() }),
StatusGroup(listOf("Ongoing", "Ended", "Abandoned", "Hiatus").map { StatusFilter(it) }), StatusGroup(listOf("Ongoing", "Ended", "Abandoned", "Hiatus").map { StatusFilter(it) }),
SeriesSort() SeriesSort()
) )
private var libraries = emptyList<LibraryDto>() private var libraries = emptyList<LibraryDto>()
private var collections = emptyList<CollectionDto>()
override val name = "Komga${if (suffix.isNotBlank()) " ($suffix)" else ""}" override val name = "Komga${if (suffix.isNotBlank()) " ($suffix)" else ""}"
override val lang = "en" override val lang = "en"
@ -311,6 +327,19 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() {
emptyList() emptyList()
} }
}, {}) }, {})
Single.fromCallable {
client.newCall(GET("$baseUrl/api/v1/collections?unpaged=true", headers)).execute()
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
collections = try {
gson.fromJson<PageWrapperDto<CollectionDto>>(it.body()?.charStream()!!).content
} catch (e: Exception) {
emptyList()
}
}, {})
} }
companion object { companion object {

View File

@ -75,3 +75,13 @@ data class AuthorDto(
val name: String, val name: String,
val role: String val role: String
) )
data class CollectionDto(
val id: Long,
val name: String,
val ordered: Boolean,
val seriesIds: List<Long>,
val createdDate: String,
val lastModifiedDate: String,
val filtered: Boolean
)