Migrate to kotlinx.serialization for download store and deleter
This commit is contained in:
parent
e7d6605490
commit
980feb6c96
2 changed files with 17 additions and 19 deletions
|
@ -2,11 +2,12 @@ package eu.kanade.tachiyomi.data.download
|
|||
|
||||
import android.content.Context
|
||||
import androidx.core.content.edit
|
||||
import com.github.salomonbrys.kotson.fromJson
|
||||
import com.google.gson.Gson
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.decodeFromString
|
||||
import kotlinx.serialization.encodeToString
|
||||
import kotlinx.serialization.json.Json
|
||||
|
||||
/**
|
||||
* Class used to keep a list of chapters for future deletion.
|
||||
|
@ -15,11 +16,6 @@ import uy.kohesive.injekt.injectLazy
|
|||
*/
|
||||
class DownloadPendingDeleter(context: Context) {
|
||||
|
||||
/**
|
||||
* Gson instance to encode and decode chapters.
|
||||
*/
|
||||
private val gson by injectLazy<Gson>()
|
||||
|
||||
/**
|
||||
* Preferences used to store the list of chapters to delete.
|
||||
*/
|
||||
|
@ -53,7 +49,7 @@ class DownloadPendingDeleter(context: Context) {
|
|||
val existingEntry = preferences.getString(manga.id!!.toString(), null)
|
||||
if (existingEntry != null) {
|
||||
// Existing entry found on preferences, decode json and add the new chapter
|
||||
val savedEntry = gson.fromJson<Entry>(existingEntry)
|
||||
val savedEntry = Json.decodeFromString<Entry>(existingEntry)
|
||||
|
||||
// Append new chapters
|
||||
val newChapters = savedEntry.chapters.addUniqueById(chapters)
|
||||
|
@ -69,7 +65,7 @@ class DownloadPendingDeleter(context: Context) {
|
|||
}
|
||||
|
||||
// Save current state
|
||||
val json = gson.toJson(newEntry)
|
||||
val json = Json.encodeToString(newEntry)
|
||||
preferences.edit {
|
||||
putString(newEntry.manga.id.toString(), json)
|
||||
}
|
||||
|
@ -101,7 +97,7 @@ class DownloadPendingDeleter(context: Context) {
|
|||
private fun decodeAll(): List<Entry> {
|
||||
return preferences.all.values.mapNotNull { rawEntry ->
|
||||
try {
|
||||
(rawEntry as? String)?.let { gson.fromJson<Entry>(it) }
|
||||
(rawEntry as? String)?.let { Json.decodeFromString<Entry>(it) }
|
||||
} catch (e: Exception) {
|
||||
null
|
||||
}
|
||||
|
@ -124,6 +120,7 @@ class DownloadPendingDeleter(context: Context) {
|
|||
/**
|
||||
* Class used to save an entry of chapters with their manga into preferences.
|
||||
*/
|
||||
@Serializable
|
||||
private data class Entry(
|
||||
val chapters: List<ChapterEntry>,
|
||||
val manga: MangaEntry
|
||||
|
@ -132,6 +129,7 @@ class DownloadPendingDeleter(context: Context) {
|
|||
/**
|
||||
* Class used to save an entry for a chapter into preferences.
|
||||
*/
|
||||
@Serializable
|
||||
private data class ChapterEntry(
|
||||
val id: Long,
|
||||
val url: String,
|
||||
|
@ -142,6 +140,7 @@ class DownloadPendingDeleter(context: Context) {
|
|||
/**
|
||||
* Class used to save an entry for a manga into preferences.
|
||||
*/
|
||||
@Serializable
|
||||
private data class MangaEntry(
|
||||
val id: Long,
|
||||
val url: String,
|
||||
|
|
|
@ -2,12 +2,15 @@ package eu.kanade.tachiyomi.data.download
|
|||
|
||||
import android.content.Context
|
||||
import androidx.core.content.edit
|
||||
import com.google.gson.Gson
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.data.download.model.Download
|
||||
import eu.kanade.tachiyomi.source.SourceManager
|
||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.decodeFromString
|
||||
import kotlinx.serialization.encodeToString
|
||||
import kotlinx.serialization.json.Json
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
|
||||
/**
|
||||
|
@ -25,11 +28,6 @@ class DownloadStore(
|
|||
*/
|
||||
private val preferences = context.getSharedPreferences("active_downloads", Context.MODE_PRIVATE)
|
||||
|
||||
/**
|
||||
* Gson instance to serialize/deserialize downloads.
|
||||
*/
|
||||
private val gson: Gson by injectLazy()
|
||||
|
||||
private val db: DatabaseHelper by injectLazy()
|
||||
|
||||
/**
|
||||
|
@ -111,7 +109,7 @@ class DownloadStore(
|
|||
*/
|
||||
private fun serialize(download: Download): String {
|
||||
val obj = DownloadObject(download.manga.id!!, download.chapter.id!!, counter++)
|
||||
return gson.toJson(obj)
|
||||
return Json.encodeToString(obj)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -121,7 +119,7 @@ class DownloadStore(
|
|||
*/
|
||||
private fun deserialize(string: String): DownloadObject? {
|
||||
return try {
|
||||
gson.fromJson(string, DownloadObject::class.java)
|
||||
Json.decodeFromString<DownloadObject>(string)
|
||||
} catch (e: Exception) {
|
||||
null
|
||||
}
|
||||
|
@ -134,5 +132,6 @@ class DownloadStore(
|
|||
* @param chapterId the id of the chapter.
|
||||
* @param order the order of the download in the queue.
|
||||
*/
|
||||
@Serializable
|
||||
data class DownloadObject(val mangaId: Long, val chapterId: Long, val order: Int)
|
||||
}
|
||||
|
|
Reference in a new issue