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 b335a32905f0987f24d457f512b342b2582b219b..7d81ed4d5fa58dd1bd9978582ebe38dcb63e6a96 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 d4b420ca660d46d111699f78bcb67e61963cd5cd..e1e155f1dc22d07a826c232e4f32506b418e2fb0 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 ecb5aef183f92ba281d7cdc8408dcf0817c8e173..f232a5170bc652c69ea4d2b9064768edc16da02a 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<Artist, ArtistsCache>() { 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 3f7b34e4fb5d162e33e15ac4677fcd21e7a1af16..0100b9579f43b8ff70916cb6eb662964691f75cf 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<Track, TracksCache>() { 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 c0a64303af0806d082c75a0fc7b3955cbabeb239..8e53ea04d8ccc65dcb1844d2db0ce76fb7c422ac 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<PlaylistTrack, PlaylistTracksCache>() { 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 519f1855810145f7d6866c12db9e4184881a592f..8ec5a0fd39d7a742807c89cc25d4d71c02f1b38f 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<Int>, 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 142af555b55224cce9e632e349f0e152b4faa083..7e398d1923185239bae2a13e1eba39a0068fbfb6 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<Radio, RadiosCache>() { 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 17a0873da62dd0b6526fd44e7524cd3c33c94b78..bb4d46b5894c4b4e5fc3989b33c54dee5c26dcbc 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<Track, TracksCache>() { 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 4ae67f483f94e969c1f6d95ad3801c0007a046e9..6e14eef5aeea89e0b94b50a7415a9dcbf77ea364 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<Track, TracksCache>() { 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 af35567b74d9c0490cd5b8b53e59865790f6b5f2..0ea41df547fbd3b57c04faa48f3ec746a7bb8260 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 <D> Flow<Repository.Response<D>>.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 <reified T : Any> gsonDeserializerOf(clazz: Class<T>) = gsonDeserializer<T>() + +inline fun <reified T : Any> gsonDeserializer(gson: Gson = Gson()) = object : + ResponseDeserializable<T> { + + override fun deserialize(content: String): T? = + gson.fromJson<T>(content, object : TypeToken<T>() {}.type) + + override fun deserialize(reader: Reader): T? = + gson.fromJson<T>(reader, object : TypeToken<T>() {}.type) +}