Jelajahi Sumber

Remove usage of Gson in Kitsu tracker

arkon 4 tahun lalu
induk
melakukan
f2a9247b68

+ 7 - 6
app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/Kitsu.kt

@@ -2,12 +2,14 @@ package eu.kanade.tachiyomi.data.track.kitsu
 
 import android.content.Context
 import android.graphics.Color
-import com.google.gson.Gson
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.data.database.models.Track
 import eu.kanade.tachiyomi.data.track.TrackService
 import eu.kanade.tachiyomi.data.track.model.TrackSearch
 import eu.kanade.tachiyomi.util.lang.runAsObservable
+import kotlinx.serialization.decodeFromString
+import kotlinx.serialization.encodeToString
+import kotlinx.serialization.json.Json
 import rx.Completable
 import rx.Observable
 import uy.kohesive.injekt.injectLazy
@@ -28,9 +30,9 @@ class Kitsu(private val context: Context, id: Int) : TrackService(id) {
 
     override val name = "Kitsu"
 
-    private val gson: Gson by injectLazy()
+    private val json: Json by injectLazy()
 
-    private val interceptor by lazy { KitsuInterceptor(this, gson) }
+    private val interceptor by lazy { KitsuInterceptor(this) }
 
     private val api by lazy { KitsuApi(client, interceptor) }
 
@@ -124,13 +126,12 @@ class Kitsu(private val context: Context, id: Int) : TrackService(id) {
     }
 
     fun saveToken(oauth: OAuth?) {
-        val json = gson.toJson(oauth)
-        preferences.trackToken(this).set(json)
+        preferences.trackToken(this).set(json.encodeToString(oauth))
     }
 
     fun restoreToken(): OAuth? {
         return try {
-            gson.fromJson(preferences.trackToken(this).get(), OAuth::class.java)
+            json.decodeFromString<OAuth>(preferences.trackToken(this).get())
         } catch (e: Exception) {
             null
         }

+ 7 - 3
app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuInterceptor.kt

@@ -1,10 +1,14 @@
 package eu.kanade.tachiyomi.data.track.kitsu
 
-import com.google.gson.Gson
+import kotlinx.serialization.decodeFromString
+import kotlinx.serialization.json.Json
 import okhttp3.Interceptor
 import okhttp3.Response
+import uy.kohesive.injekt.injectLazy
 
-class KitsuInterceptor(val kitsu: Kitsu, val gson: Gson) : Interceptor {
+class KitsuInterceptor(val kitsu: Kitsu) : Interceptor {
+
+    private val json: Json by injectLazy()
 
     /**
      * OAuth object used for authenticated requests.
@@ -22,7 +26,7 @@ class KitsuInterceptor(val kitsu: Kitsu, val gson: Gson) : Interceptor {
         if (currAuth.isExpired()) {
             val response = chain.proceed(KitsuApi.refreshTokenRequest(refreshToken))
             if (response.isSuccessful) {
-                newAuth(gson.fromJson(response.body!!.string(), OAuth::class.java))
+                newAuth(json.decodeFromString(response.body!!.string()))
             } else {
                 response.close()
             }

+ 1 - 1
app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuModels.kt

@@ -50,7 +50,7 @@ class KitsuLibManga(obj: JsonObject, manga: JsonObject) {
     private val canonicalTitle = manga["attributes"]!!.jsonObject["canonicalTitle"]!!.jsonPrimitive.content
     private val chapterCount = manga["attributes"]!!.jsonObject["chapterCount"]?.jsonPrimitive?.intOrNull
     val type = manga["attributes"]!!.jsonObject["mangaType"]?.jsonPrimitive?.contentOrNull.orEmpty()
-    val original = manga["attributes"]!!.jsonObject["original"]!!.jsonObject["posterImage"]!!.jsonPrimitive.content
+    val original = manga["attributes"]!!.jsonObject["posterImage"]!!.jsonObject["original"]!!.jsonPrimitive.content
     private val synopsis = manga["attributes"]!!.jsonObject["synopsis"]!!.jsonPrimitive.content
     private val startDate = manga["attributes"]!!.jsonObject["startDate"]?.jsonPrimitive?.contentOrNull.orEmpty()
     private val libraryId = obj["id"]!!.jsonPrimitive.int

+ 3 - 0
app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/OAuth.kt

@@ -1,5 +1,8 @@
 package eu.kanade.tachiyomi.data.track.kitsu
 
+import kotlinx.serialization.Serializable
+
+@Serializable
 data class OAuth(
     val access_token: String,
     val token_type: String,