Prevent long-running requests to make the app crash when user is logging out.
This commit is contained in:
parent
490de25b05
commit
a19e500f09
|
@ -29,9 +29,9 @@ class FavoritesRepository(override val context: Context?) : Repository<Track, Tr
|
||||||
track.downloaded = downloaded.contains(track.id)
|
track.downloaded = downloaded.contains(track.id)
|
||||||
|
|
||||||
track.bestUpload()?.let { upload ->
|
track.bestUpload()?.let { upload ->
|
||||||
val url = mustNormalizeUrl(upload.listen_url)
|
maybeNormalizeUrl(upload.listen_url)?.let { url ->
|
||||||
|
track.cached = Otter.get().exoCache.isCached(url, 0, upload.duration * 1000L)
|
||||||
track.cached = Otter.get().exoCache.isCached(url, 0, upload.duration * 1000L)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
track
|
track
|
||||||
|
|
|
@ -65,32 +65,40 @@ class HttpUpstream<D : Any, R : FunkwhaleResponse<D>>(val behavior: Behavior, pr
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun get(url: String): Result<R, FuelError> {
|
suspend fun get(url: String): Result<R, FuelError> {
|
||||||
val request = Fuel.get(mustNormalizeUrl(url)).apply {
|
return try {
|
||||||
if (!Settings.isAnonymous()) {
|
|
||||||
header("Authorization", "Bearer ${Settings.getAccessToken()}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val (_, response, result) = request.awaitObjectResponseResult(GenericDeserializer<R>(type))
|
|
||||||
|
|
||||||
if (response.statusCode == 401) {
|
|
||||||
return retryGet(url)
|
|
||||||
}
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
private suspend fun retryGet(url: String): Result<R, FuelError> {
|
|
||||||
return if (HTTP.refresh()) {
|
|
||||||
val request = Fuel.get(mustNormalizeUrl(url)).apply {
|
val request = Fuel.get(mustNormalizeUrl(url)).apply {
|
||||||
if (!Settings.isAnonymous()) {
|
if (!Settings.isAnonymous()) {
|
||||||
header("Authorization", "Bearer ${Settings.getAccessToken()}")
|
header("Authorization", "Bearer ${Settings.getAccessToken()}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
request.awaitObjectResult(GenericDeserializer(type))
|
val (_, response, result) = request.awaitObjectResponseResult(GenericDeserializer<R>(type))
|
||||||
} else {
|
|
||||||
Result.Failure(FuelError.wrap(RefreshError))
|
if (response.statusCode == 401) {
|
||||||
|
return retryGet(url)
|
||||||
|
}
|
||||||
|
|
||||||
|
result
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Result.error(FuelError.wrap(e))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private suspend fun retryGet(url: String): Result<R, FuelError> {
|
||||||
|
return try {
|
||||||
|
return if (HTTP.refresh()) {
|
||||||
|
val request = Fuel.get(mustNormalizeUrl(url)).apply {
|
||||||
|
if (!Settings.isAnonymous()) {
|
||||||
|
header("Authorization", "Bearer ${Settings.getAccessToken()}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
request.awaitObjectResult(GenericDeserializer(type))
|
||||||
|
} else {
|
||||||
|
Result.Failure(FuelError.wrap(RefreshError))
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Result.error(FuelError.wrap(e))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -22,9 +22,13 @@ fun Any.log() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun maybeNormalizeUrl(rawUrl: String?): String? {
|
fun maybeNormalizeUrl(rawUrl: String?): String? {
|
||||||
if (rawUrl == null || rawUrl.isEmpty()) return null
|
try {
|
||||||
|
if (rawUrl == null || rawUrl.isEmpty()) return null
|
||||||
|
|
||||||
return mustNormalizeUrl(rawUrl)
|
return mustNormalizeUrl(rawUrl)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun mustNormalizeUrl(rawUrl: String): String {
|
fun mustNormalizeUrl(rawUrl: String): String {
|
||||||
|
|
Loading…
Reference in New Issue