From 5c5bfdedd31acb4d3e2c6a58aeb129a7c354fbe9 Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Sat, 29 Oct 2022 19:22:54 +0200 Subject: [PATCH] Fix sending duplicate requests --- .../data/network/MealieDataSourceWrapper.kt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapper.kt b/app/src/main/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapper.kt index 5d214c7..d851cd7 100644 --- a/app/src/main/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapper.kt +++ b/app/src/main/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapper.kt @@ -11,6 +11,7 @@ import gq.kirmanak.mealient.datasource.NetworkError import gq.kirmanak.mealient.datasource.v0.MealieDataSourceV0 import gq.kirmanak.mealient.datasource.v0.models.AddRecipeRequestV0 import gq.kirmanak.mealient.datasource.v1.MealieDataSourceV1 +import gq.kirmanak.mealient.extensions.runCatchingExceptCancel import gq.kirmanak.mealient.extensions.toFullRecipeInfo import gq.kirmanak.mealient.extensions.toRecipeSummaryInfo import javax.inject.Inject @@ -29,8 +30,7 @@ class MealieDataSourceWrapper @Inject constructor( } override suspend fun requestRecipes( - start: Int, - limit: Int + start: Int, limit: Int ): List = withAuthHeader { token -> val url = getUrl() when (getVersion()) { @@ -57,14 +57,17 @@ class MealieDataSourceWrapper @Inject constructor( private suspend fun getVersion() = serverInfoRepo.getVersion() - private suspend inline fun withAuthHeader(block: (String?) -> T): T = - runCatching { block(authRepo.getAuthHeader()) }.getOrElse { + private suspend inline fun withAuthHeader(block: (String?) -> T): T { + val authHeader = authRepo.getAuthHeader() + return runCatchingExceptCancel { block(authHeader) }.getOrElse { if (it is NetworkError.Unauthorized) { authRepo.invalidateAuthHeader() // Trying again with new authentication header - block(authRepo.getAuthHeader()) + val newHeader = authRepo.getAuthHeader() + if (newHeader == authHeader) throw it else block(newHeader) } else { throw it } } + } } \ No newline at end of file