From 1b0381fde48bc5465b056631266e491725d82128 Mon Sep 17 00:00:00 2001 From: Ryan Harg Date: Thu, 16 Jun 2022 15:08:29 +0200 Subject: [PATCH] #119: Default deserializer has no string deserialization implementation --- .../ffa/repositories/AlbumsRepository.kt | 2 +- .../ffa/repositories/ArtistTracksRepository.kt | 2 +- .../ffa/repositories/ArtistsRepository.kt | 3 +-- .../ffa/repositories/FavoritesRepository.kt | 17 ++--------------- .../repositories/PlaylistTracksRepository.kt | 3 +-- .../ffa/repositories/PlaylistsRepository.kt | 13 ++----------- .../ffa/repositories/RadiosRepository.kt | 3 +-- .../ffa/repositories/SearchRepository.kt | 13 ++----------- .../ffa/repositories/TracksRepository.kt | 3 +-- .../audio/funkwhale/ffa/utils/Extensions.kt | 18 ++++++++++++++++-- 10 files changed, 28 insertions(+), 49 deletions(-) diff --git a/app/src/main/java/audio/funkwhale/ffa/repositories/AlbumsRepository.kt b/app/src/main/java/audio/funkwhale/ffa/repositories/AlbumsRepository.kt index b335a32..7d81ed4 100644 --- a/app/src/main/java/audio/funkwhale/ffa/repositories/AlbumsRepository.kt +++ b/app/src/main/java/audio/funkwhale/ffa/repositories/AlbumsRepository.kt @@ -5,7 +5,7 @@ import audio.funkwhale.ffa.model.Album import audio.funkwhale.ffa.model.AlbumsCache import audio.funkwhale.ffa.model.AlbumsResponse import audio.funkwhale.ffa.utils.OAuth -import com.github.kittinunf.fuel.gson.gsonDeserializerOf +import audio.funkwhale.ffa.utils.gsonDeserializerOf import com.google.gson.reflect.TypeToken import org.koin.java.KoinJavaComponent.inject diff --git a/app/src/main/java/audio/funkwhale/ffa/repositories/ArtistTracksRepository.kt b/app/src/main/java/audio/funkwhale/ffa/repositories/ArtistTracksRepository.kt index d4b420c..e1e155f 100644 --- a/app/src/main/java/audio/funkwhale/ffa/repositories/ArtistTracksRepository.kt +++ b/app/src/main/java/audio/funkwhale/ffa/repositories/ArtistTracksRepository.kt @@ -6,7 +6,7 @@ import audio.funkwhale.ffa.model.Track import audio.funkwhale.ffa.model.TracksCache import audio.funkwhale.ffa.model.TracksResponse import audio.funkwhale.ffa.utils.OAuth -import com.github.kittinunf.fuel.gson.gsonDeserializerOf +import audio.funkwhale.ffa.utils.gsonDeserializerOf import com.google.gson.reflect.TypeToken import org.koin.java.KoinJavaComponent.inject diff --git a/app/src/main/java/audio/funkwhale/ffa/repositories/ArtistsRepository.kt b/app/src/main/java/audio/funkwhale/ffa/repositories/ArtistsRepository.kt index ecb5aef..f232a51 100644 --- a/app/src/main/java/audio/funkwhale/ffa/repositories/ArtistsRepository.kt +++ b/app/src/main/java/audio/funkwhale/ffa/repositories/ArtistsRepository.kt @@ -6,10 +6,9 @@ import audio.funkwhale.ffa.model.ArtistsCache import audio.funkwhale.ffa.model.ArtistsResponse import audio.funkwhale.ffa.model.FFAResponse import audio.funkwhale.ffa.utils.OAuth -import com.github.kittinunf.fuel.gson.gsonDeserializerOf +import audio.funkwhale.ffa.utils.gsonDeserializerOf import com.google.gson.reflect.TypeToken import org.koin.java.KoinJavaComponent.inject -import java.io.BufferedReader class ArtistsRepository(override val context: Context?) : Repository() { diff --git a/app/src/main/java/audio/funkwhale/ffa/repositories/FavoritesRepository.kt b/app/src/main/java/audio/funkwhale/ffa/repositories/FavoritesRepository.kt index 3f7b34e..0100b95 100644 --- a/app/src/main/java/audio/funkwhale/ffa/repositories/FavoritesRepository.kt +++ b/app/src/main/java/audio/funkwhale/ffa/repositories/FavoritesRepository.kt @@ -1,22 +1,10 @@ package audio.funkwhale.ffa.repositories import android.content.Context -import audio.funkwhale.ffa.model.FFAResponse -import audio.funkwhale.ffa.model.FavoritedCache -import audio.funkwhale.ffa.model.FavoritedResponse -import audio.funkwhale.ffa.model.Track -import audio.funkwhale.ffa.model.TracksCache -import audio.funkwhale.ffa.model.TracksResponse -import audio.funkwhale.ffa.utils.FFACache -import audio.funkwhale.ffa.utils.OAuth -import audio.funkwhale.ffa.utils.Settings -import audio.funkwhale.ffa.utils.authorize -import audio.funkwhale.ffa.utils.maybeNormalizeUrl -import audio.funkwhale.ffa.utils.mustNormalizeUrl -import audio.funkwhale.ffa.utils.untilNetwork +import audio.funkwhale.ffa.model.* +import audio.funkwhale.ffa.utils.* import com.github.kittinunf.fuel.Fuel import com.github.kittinunf.fuel.coroutines.awaitByteArrayResponseResult -import com.github.kittinunf.fuel.gson.gsonDeserializerOf import com.google.android.exoplayer2.offline.DownloadManager import com.google.android.exoplayer2.upstream.cache.Cache import com.google.gson.Gson @@ -27,7 +15,6 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import org.koin.core.qualifier.named import org.koin.java.KoinJavaComponent.inject -import java.io.BufferedReader class FavoritesRepository(override val context: Context?) : Repository() { diff --git a/app/src/main/java/audio/funkwhale/ffa/repositories/PlaylistTracksRepository.kt b/app/src/main/java/audio/funkwhale/ffa/repositories/PlaylistTracksRepository.kt index c0a6430..8e53ea0 100644 --- a/app/src/main/java/audio/funkwhale/ffa/repositories/PlaylistTracksRepository.kt +++ b/app/src/main/java/audio/funkwhale/ffa/repositories/PlaylistTracksRepository.kt @@ -6,13 +6,12 @@ import audio.funkwhale.ffa.model.PlaylistTrack import audio.funkwhale.ffa.model.PlaylistTracksCache import audio.funkwhale.ffa.model.PlaylistTracksResponse import audio.funkwhale.ffa.utils.OAuth -import com.github.kittinunf.fuel.gson.gsonDeserializerOf +import audio.funkwhale.ffa.utils.gsonDeserializerOf import com.google.gson.reflect.TypeToken import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.toList import kotlinx.coroutines.runBlocking import org.koin.java.KoinJavaComponent.inject -import java.io.BufferedReader class PlaylistTracksRepository(override val context: Context?, playlistId: Int) : Repository() { diff --git a/app/src/main/java/audio/funkwhale/ffa/repositories/PlaylistsRepository.kt b/app/src/main/java/audio/funkwhale/ffa/repositories/PlaylistsRepository.kt index 519f185..8ec5a0f 100644 --- a/app/src/main/java/audio/funkwhale/ffa/repositories/PlaylistsRepository.kt +++ b/app/src/main/java/audio/funkwhale/ffa/repositories/PlaylistsRepository.kt @@ -1,25 +1,16 @@ package audio.funkwhale.ffa.repositories import android.content.Context -import audio.funkwhale.ffa.model.FFAResponse -import audio.funkwhale.ffa.model.Playlist -import audio.funkwhale.ffa.model.PlaylistsCache -import audio.funkwhale.ffa.model.PlaylistsResponse -import audio.funkwhale.ffa.model.Track -import audio.funkwhale.ffa.utils.OAuth -import audio.funkwhale.ffa.utils.Settings -import audio.funkwhale.ffa.utils.authorize -import audio.funkwhale.ffa.utils.mustNormalizeUrl +import audio.funkwhale.ffa.model.* +import audio.funkwhale.ffa.utils.* import com.github.kittinunf.fuel.Fuel import com.github.kittinunf.fuel.coroutines.awaitByteArrayResponseResult import com.github.kittinunf.fuel.coroutines.awaitObjectResponseResult -import com.github.kittinunf.fuel.gson.gsonDeserializerOf import com.google.gson.Gson import com.google.gson.reflect.TypeToken import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.koin.java.KoinJavaComponent.inject -import java.io.BufferedReader data class PlaylistAdd(val tracks: List, val allow_duplicates: Boolean) diff --git a/app/src/main/java/audio/funkwhale/ffa/repositories/RadiosRepository.kt b/app/src/main/java/audio/funkwhale/ffa/repositories/RadiosRepository.kt index 142af55..7e398d1 100644 --- a/app/src/main/java/audio/funkwhale/ffa/repositories/RadiosRepository.kt +++ b/app/src/main/java/audio/funkwhale/ffa/repositories/RadiosRepository.kt @@ -6,10 +6,9 @@ import audio.funkwhale.ffa.model.Radio import audio.funkwhale.ffa.model.RadiosCache import audio.funkwhale.ffa.model.RadiosResponse import audio.funkwhale.ffa.utils.OAuth -import com.github.kittinunf.fuel.gson.gsonDeserializerOf +import audio.funkwhale.ffa.utils.gsonDeserializerOf import com.google.gson.reflect.TypeToken import org.koin.java.KoinJavaComponent.inject -import java.io.BufferedReader class RadiosRepository(override val context: Context?) : Repository() { diff --git a/app/src/main/java/audio/funkwhale/ffa/repositories/SearchRepository.kt b/app/src/main/java/audio/funkwhale/ffa/repositories/SearchRepository.kt index 17a0873..bb4d46b 100644 --- a/app/src/main/java/audio/funkwhale/ffa/repositories/SearchRepository.kt +++ b/app/src/main/java/audio/funkwhale/ffa/repositories/SearchRepository.kt @@ -1,18 +1,10 @@ package audio.funkwhale.ffa.repositories import android.content.Context -import audio.funkwhale.ffa.model.Album -import audio.funkwhale.ffa.model.AlbumsCache -import audio.funkwhale.ffa.model.AlbumsResponse -import audio.funkwhale.ffa.model.Artist -import audio.funkwhale.ffa.model.ArtistsCache -import audio.funkwhale.ffa.model.ArtistsResponse -import audio.funkwhale.ffa.model.Track -import audio.funkwhale.ffa.model.TracksCache -import audio.funkwhale.ffa.model.TracksResponse +import audio.funkwhale.ffa.model.* import audio.funkwhale.ffa.utils.OAuth +import audio.funkwhale.ffa.utils.gsonDeserializerOf import audio.funkwhale.ffa.utils.mustNormalizeUrl -import com.github.kittinunf.fuel.gson.gsonDeserializerOf import com.google.android.exoplayer2.offline.DownloadManager import com.google.android.exoplayer2.upstream.cache.Cache import com.google.gson.reflect.TypeToken @@ -21,7 +13,6 @@ import kotlinx.coroutines.flow.toList import kotlinx.coroutines.runBlocking import org.koin.core.qualifier.named import org.koin.java.KoinJavaComponent.inject -import java.io.BufferedReader class TracksSearchRepository(override val context: Context?, var query: String) : Repository() { diff --git a/app/src/main/java/audio/funkwhale/ffa/repositories/TracksRepository.kt b/app/src/main/java/audio/funkwhale/ffa/repositories/TracksRepository.kt index 4ae67f4..6e14eef 100644 --- a/app/src/main/java/audio/funkwhale/ffa/repositories/TracksRepository.kt +++ b/app/src/main/java/audio/funkwhale/ffa/repositories/TracksRepository.kt @@ -7,8 +7,8 @@ import audio.funkwhale.ffa.model.TracksCache import audio.funkwhale.ffa.model.TracksResponse import audio.funkwhale.ffa.utils.OAuth import audio.funkwhale.ffa.utils.getMetadata +import audio.funkwhale.ffa.utils.gsonDeserializerOf import audio.funkwhale.ffa.utils.mustNormalizeUrl -import com.github.kittinunf.fuel.gson.gsonDeserializerOf import com.google.android.exoplayer2.offline.Download import com.google.android.exoplayer2.offline.DownloadManager import com.google.android.exoplayer2.upstream.cache.Cache @@ -18,7 +18,6 @@ import kotlinx.coroutines.flow.toList import kotlinx.coroutines.runBlocking import org.koin.core.qualifier.named import org.koin.java.KoinJavaComponent.inject -import java.io.BufferedReader class TracksRepository(override val context: Context?, albumId: Int) : Repository() { diff --git a/app/src/main/java/audio/funkwhale/ffa/utils/Extensions.kt b/app/src/main/java/audio/funkwhale/ffa/utils/Extensions.kt index af35567..0ea41df 100644 --- a/app/src/main/java/audio/funkwhale/ffa/utils/Extensions.kt +++ b/app/src/main/java/audio/funkwhale/ffa/utils/Extensions.kt @@ -10,20 +10,22 @@ import audio.funkwhale.ffa.model.DownloadInfo import audio.funkwhale.ffa.repositories.Repository import com.github.kittinunf.fuel.core.FuelError import com.github.kittinunf.fuel.core.Request +import com.github.kittinunf.fuel.core.ResponseDeserializable import com.google.android.exoplayer2.offline.Download import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.squareup.picasso.Picasso import com.squareup.picasso.RequestCreator import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import net.openid.appauth.ClientSecretPost +import java.io.Reader import java.text.SimpleDateFormat -import java.util.Date +import java.util.* import kotlin.coroutines.CoroutineContext inline fun Flow>.untilNetwork( @@ -113,3 +115,15 @@ val ISO_8601_DATE_TIME_FORMAT = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") fun Date.format(): String { return ISO_8601_DATE_TIME_FORMAT.format(this) } + +inline fun gsonDeserializerOf(clazz: Class) = gsonDeserializer() + +inline fun gsonDeserializer(gson: Gson = Gson()) = object : + ResponseDeserializable { + + override fun deserialize(content: String): T? = + gson.fromJson(content, object : TypeToken() {}.type) + + override fun deserialize(reader: Reader): T? = + gson.fromJson(reader, object : TypeToken() {}.type) +}