diff --git a/src/all/komga/CHANGELOG.md b/src/all/komga/CHANGELOG.md index f160dafbc..aa32fe8ab 100644 --- a/src/all/komga/CHANGELOG.md +++ b/src/all/komga/CHANGELOG.md @@ -1,3 +1,11 @@ +## 1.2.31 + +Minimum Komga version required: `0.113.0` + +### Refactor + +* replace Gson with kotlinx.serialization + ## 1.2.30 Minimum Komga version required: `0.113.0` diff --git a/src/all/komga/build.gradle b/src/all/komga/build.gradle index 9deb94cf7..38b8ca177 100644 --- a/src/all/komga/build.gradle +++ b/src/all/komga/build.gradle @@ -1,11 +1,12 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlinx-serialization' ext { extName = 'Komga' pkgNameSuffix = 'all.komga' extClass = '.KomgaFactory' - extVersionCode = 30 + extVersionCode = 31 } dependencies { 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 3627babd3..682f8f6ac 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 @@ -5,8 +5,6 @@ import android.content.SharedPreferences import android.text.InputType import android.util.Log 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 @@ -25,6 +23,8 @@ import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.HttpSource +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json import okhttp3.Credentials import okhttp3.Dns import okhttp3.Headers @@ -37,6 +37,7 @@ import rx.android.schedulers.AndroidSchedulers import rx.schedulers.Schedulers import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get +import uy.kohesive.injekt.injectLazy import java.text.SimpleDateFormat import java.util.Date import java.util.Locale @@ -177,10 +178,10 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() { override fun mangaDetailsParse(response: Response): SManga = if (response.fromReadList()) { - val readList = gson.fromJson(response.body?.charStream()!!) + val readList = json.decodeFromString(response.body?.string()!!) readList.toSManga() } else { - val series = gson.fromJson(response.body?.charStream()!!) + val series = json.decodeFromString(response.body?.string()!!) series.toSManga() } @@ -188,7 +189,7 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() { GET("${manga.url}/books?unpaged=true&media_status=READY&deleted=false", headers) override fun chapterListParse(response: Response): List { - val page = gson.fromJson>(response.body?.charStream()!!).content + val page = json.decodeFromString>(response.body?.string()!!).content val r = page.mapIndexed { index, book -> SChapter.create().apply { @@ -206,7 +207,7 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() { GET("${chapter.url}/pages") override fun pageListParse(response: Response): List { - val pages = gson.fromJson>(response.body?.charStream()!!) + val pages = json.decodeFromString>(response.body?.string()!!) return pages.map { val url = "${response.request.url}/${it.number}" + if (!supportedImageTypes.contains(it.mediaType)) { @@ -223,11 +224,11 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() { private fun processSeriesPage(response: Response): MangasPage { if (response.fromReadList()) { - with(gson.fromJson>(response.body?.charStream()!!)) { + with(json.decodeFromString>(response.body?.string()!!)) { return MangasPage(content.map { it.toSManga() }, !last) } } else { - with(gson.fromJson>(response.body?.charStream()!!)) { + with(json.decodeFromString>(response.body?.string()!!)) { return MangasPage(content.map { it.toSManga() }, !last) } } @@ -356,7 +357,7 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() { override val baseUrl by lazy { getPrefBaseUrl() } private val username by lazy { getPrefUsername() } private val password by lazy { getPrefPassword() } - private val gson by lazy { Gson() } + private val json: Json by injectLazy() override fun headersBuilder(): Headers.Builder = Headers.Builder() @@ -427,7 +428,7 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() { .subscribe( { response -> libraries = try { - gson.fromJson(response.body?.charStream()!!) + json.decodeFromString(response.body?.string()!!) } catch (e: Exception) { emptyList() } @@ -445,7 +446,7 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() { .subscribe( { response -> collections = try { - gson.fromJson>(response.body?.charStream()!!).content + json.decodeFromString>(response.body?.string()!!).content } catch (e: Exception) { emptyList() } @@ -463,7 +464,7 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() { .subscribe( { response -> genres = try { - gson.fromJson(response.body?.charStream()!!) + json.decodeFromString(response.body?.string()!!) } catch (e: Exception) { emptySet() } @@ -481,7 +482,7 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() { .subscribe( { response -> tags = try { - gson.fromJson(response.body?.charStream()!!) + json.decodeFromString(response.body?.string()!!) } catch (e: Exception) { emptySet() } @@ -499,7 +500,7 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() { .subscribe( { response -> publishers = try { - gson.fromJson(response.body?.charStream()!!) + json.decodeFromString(response.body?.string()!!) } catch (e: Exception) { emptySet() } @@ -517,7 +518,7 @@ open class Komga(suffix: String = "") : ConfigurableSource, HttpSource() { .subscribe( { response -> authors = try { - val list: List = gson.fromJson(response.body?.charStream()!!) + val list: List = json.decodeFromString(response.body?.string()!!) list.groupBy { it.role } } catch (e: Exception) { emptyMap() diff --git a/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/dto/Dto.kt b/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/dto/Dto.kt index a2e001d5d..94934be6f 100644 --- a/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/dto/Dto.kt +++ b/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/dto/Dto.kt @@ -1,10 +1,14 @@ package eu.kanade.tachiyomi.extension.all.komga.dto +import kotlinx.serialization.Serializable + +@Serializable data class LibraryDto( val id: String, val name: String ) +@Serializable data class SeriesDto( val id: String, val libraryId: String, @@ -17,6 +21,7 @@ data class SeriesDto( val booksMetadata: BookMetadataAggregationDto ) +@Serializable data class SeriesMetadataDto( val status: String, val created: String?, @@ -39,6 +44,7 @@ data class SeriesMetadataDto( val tagsLock: Boolean ) +@Serializable data class BookMetadataAggregationDto( val authors: List = emptyList(), val tags: Set = emptySet(), @@ -50,6 +56,7 @@ data class BookMetadataAggregationDto( val lastModified: String ) +@Serializable data class BookDto( val id: String, val seriesId: String, @@ -64,18 +71,21 @@ data class BookDto( val metadata: BookMetadataDto ) +@Serializable data class MediaDto( val status: String, val mediaType: String, val pagesCount: Int ) +@Serializable data class PageDto( val number: Int, val fileName: String, val mediaType: String ) +@Serializable data class BookMetadataDto( val title: String, val titleLock: Boolean, @@ -91,11 +101,13 @@ data class BookMetadataDto( val authorsLock: Boolean ) +@Serializable data class AuthorDto( val name: String, val role: String ) +@Serializable data class CollectionDto( val id: String, val name: String, @@ -106,6 +118,7 @@ data class CollectionDto( val filtered: Boolean ) +@Serializable data class ReadListDto( val id: String, val name: String, diff --git a/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/dto/PageWrapperDto.kt b/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/dto/PageWrapperDto.kt index 2b1683ba8..f758da1a1 100644 --- a/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/dto/PageWrapperDto.kt +++ b/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/dto/PageWrapperDto.kt @@ -1,5 +1,8 @@ package eu.kanade.tachiyomi.extension.all.komga.dto +import kotlinx.serialization.Serializable + +@Serializable data class PageWrapperDto( val content: List, val empty: Boolean,