diff --git a/app/src/main/java/com/github/apognu/otter/repositories/FavoritesRepository.kt b/app/src/main/java/com/github/apognu/otter/repositories/FavoritesRepository.kt index 039f388..7d972ec 100644 --- a/app/src/main/java/com/github/apognu/otter/repositories/FavoritesRepository.kt +++ b/app/src/main/java/com/github/apognu/otter/repositories/FavoritesRepository.kt @@ -29,9 +29,9 @@ class FavoritesRepository(override val context: Context?) : Repository - val url = mustNormalizeUrl(upload.listen_url) - - track.cached = Otter.get().exoCache.isCached(url, 0, upload.duration * 1000L) + maybeNormalizeUrl(upload.listen_url)?.let { url -> + track.cached = Otter.get().exoCache.isCached(url, 0, upload.duration * 1000L) + } } track diff --git a/app/src/main/java/com/github/apognu/otter/repositories/HttpUpstream.kt b/app/src/main/java/com/github/apognu/otter/repositories/HttpUpstream.kt index 6b08836..6a6b978 100644 --- a/app/src/main/java/com/github/apognu/otter/repositories/HttpUpstream.kt +++ b/app/src/main/java/com/github/apognu/otter/repositories/HttpUpstream.kt @@ -65,32 +65,40 @@ class HttpUpstream>(val behavior: Behavior, pr } suspend fun get(url: String): Result { - val request = Fuel.get(mustNormalizeUrl(url)).apply { - if (!Settings.isAnonymous()) { - header("Authorization", "Bearer ${Settings.getAccessToken()}") - } - } - - val (_, response, result) = request.awaitObjectResponseResult(GenericDeserializer(type)) - - if (response.statusCode == 401) { - return retryGet(url) - } - - return result - } - - private suspend fun retryGet(url: String): Result { - return if (HTTP.refresh()) { + return try { 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)) + val (_, response, result) = request.awaitObjectResponseResult(GenericDeserializer(type)) + + if (response.statusCode == 401) { + return retryGet(url) + } + + result + } catch (e: Exception) { + Result.error(FuelError.wrap(e)) + } + } + + private suspend fun retryGet(url: String): Result { + 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)) } } } \ No newline at end of file diff --git a/app/src/main/java/com/github/apognu/otter/utils/Util.kt b/app/src/main/java/com/github/apognu/otter/utils/Util.kt index bc0597c..fcc5c4a 100644 --- a/app/src/main/java/com/github/apognu/otter/utils/Util.kt +++ b/app/src/main/java/com/github/apognu/otter/utils/Util.kt @@ -22,9 +22,13 @@ fun Any.log() { } 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 {