From ac87667f88c444857749b7ba83010dcb553db693 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 15 Jul 2024 23:11:52 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../repository/DefaultCurrenciesRepository.kt | 30 ++++++----- .../repository/DefaultNetworksRepository.kt | 51 ++++++++++--------- 2 files changed, 44 insertions(+), 37 deletions(-) diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt index 167c691cec..dcfd66e7a7 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt @@ -442,21 +442,23 @@ internal class DefaultCurrenciesRepository( } private suspend fun fetchTokensIfCacheExpired(userWallet: UserWallet, refresh: Boolean) { - try { - isMultiCurrencyWalletCurrenciesFetching.update { - it + (userWallet.walletId to true) - } + cacheRegistry.invokeOnExpire( + key = getTokensCacheKey(userWallet.walletId), + skipCache = refresh, + block = { + isMultiCurrencyWalletCurrenciesFetching.update { + it + (userWallet.walletId to true) + } - cacheRegistry.invokeOnExpire( - key = getTokensCacheKey(userWallet.walletId), - skipCache = refresh, - block = { fetchTokens(userWallet) }, - ) - } finally { - isMultiCurrencyWalletCurrenciesFetching.update { - it - userWallet.walletId - } - } + try { + fetchTokens(userWallet) + } finally { + isMultiCurrencyWalletCurrenciesFetching.update { + it - userWallet.walletId + } + } + }, + ) } private suspend fun fetchTokens(userWallet: UserWallet) { diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultNetworksRepository.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultNetworksRepository.kt index ce8d705b9f..bcc65da983 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultNetworksRepository.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultNetworksRepository.kt @@ -183,24 +183,22 @@ internal class DefaultNetworksRepository( networks: Set, refresh: Boolean, ) { - try { - isNetworkStatusesFetching.update { - it + (userWalletId to true) - } + val currencies = getCurrencies(userWalletId, networks) + val networksDeferred = networks.mapNotNull { network -> + fetchNetworkStatusIfCacheExpired(userWalletId, network, currencies, refresh) + } - val currencies = getCurrencies(userWalletId, networks) - coroutineScope { - networks - .map { network -> - async { - fetchNetworkStatusIfCacheExpired(userWalletId, network, currencies, refresh) - } - } - .awaitAll() - } - } finally { - isNetworkStatusesFetching.update { - it - userWalletId + if (networksDeferred.isNotEmpty()) { + try { + isNetworkStatusesFetching.update { + it + (userWalletId to true) + } + + networksDeferred.awaitAll() + } finally { + isNetworkStatusesFetching.update { + it - userWalletId + } } } } @@ -226,12 +224,19 @@ internal class DefaultNetworksRepository( network: Network, currencies: Sequence, refresh: Boolean, - ) { - cacheRegistry.invokeOnExpire( - key = getNetworksStatusesCacheKey(userWalletId, network), - skipCache = refresh, - block = { fetchNetworkStatus(userWalletId, network, currencies) }, - ) + ): Deferred? = coroutineScope { + val key = getNetworksStatusesCacheKey(userWalletId, network) + if (refresh || cacheRegistry.isExpired(key)) { + async { + cacheRegistry.invokeOnExpire( + key = key, + skipCache = refresh, + block = { fetchNetworkStatus(userWalletId, network, currencies) }, + ) + } + } else { + null + } } private suspend fun fetchNetworkStatus(