diff --git a/app/src/main/java/com/tangem/tap/di/domain/TokensDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/TokensDomainModule.kt index 185840f10a..936104ecf9 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/TokensDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/TokensDomainModule.kt @@ -373,6 +373,7 @@ internal object TokensDomainModule { singleNetworkStatusSupplier: SingleNetworkStatusSupplier, multiNetworkStatusSupplier: MultiNetworkStatusSupplier, multiNetworkStatusFetcher: MultiNetworkStatusFetcher, + singleNetworkStatusFetcher: SingleNetworkStatusFetcher, multiQuoteFetcher: MultiQuoteFetcher, singleQuoteSupplier: SingleQuoteSupplier, singleYieldBalanceSupplier: SingleYieldBalanceSupplier, @@ -385,6 +386,7 @@ internal object TokensDomainModule { singleNetworkStatusSupplier = singleNetworkStatusSupplier, multiNetworkStatusSupplier = multiNetworkStatusSupplier, multiNetworkStatusFetcher = multiNetworkStatusFetcher, + singleNetworkStatusFetcher = singleNetworkStatusFetcher, multiQuoteFetcher = multiQuoteFetcher, singleQuoteSupplier = singleQuoteSupplier, singleYieldBalanceSupplier = singleYieldBalanceSupplier, @@ -403,6 +405,7 @@ internal object TokensDomainModule { singleNetworkStatusSupplier: SingleNetworkStatusSupplier, multiNetworkStatusSupplier: MultiNetworkStatusSupplier, multiNetworkStatusFetcher: MultiNetworkStatusFetcher, + singleNetworkStatusFetcher: SingleNetworkStatusFetcher, multiQuoteFetcher: MultiQuoteFetcher, singleQuoteSupplier: SingleQuoteSupplier, singleYieldBalanceSupplier: SingleYieldBalanceSupplier, @@ -415,6 +418,7 @@ internal object TokensDomainModule { singleNetworkStatusSupplier = singleNetworkStatusSupplier, multiNetworkStatusSupplier = multiNetworkStatusSupplier, multiNetworkStatusFetcher = multiNetworkStatusFetcher, + singleNetworkStatusFetcher = singleNetworkStatusFetcher, multiQuoteFetcher = multiQuoteFetcher, singleQuoteSupplier = singleQuoteSupplier, singleYieldBalanceSupplier = singleYieldBalanceSupplier, diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/FetchCurrencyStatusUseCase.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/FetchCurrencyStatusUseCase.kt index b5783e3a2d..5a6a9fa889 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/FetchCurrencyStatusUseCase.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/FetchCurrencyStatusUseCase.kt @@ -51,7 +51,18 @@ class FetchCurrencyStatusUseCase( return either { val currency = getCurrency(userWalletId, id) - fetchCurrencyStatus(userWalletId, currency, refresh) + coroutineScope { + val fetchStatus = async { + fetchNetworkStatus(userWalletId, currency.network) + } + val fetchQuote = async { + fetchQuote(currency.id) + } + val fetchStakingBalance = async { + fetchStakingBalance(userWalletId, currency, refresh) + } + awaitAll(fetchStatus, fetchQuote, fetchStakingBalance) + } } } @@ -69,28 +80,18 @@ class FetchCurrencyStatusUseCase( return either { val currency = getPrimaryCurrency(userWalletId, refresh) - fetchCurrencyStatus(userWalletId, currency, refresh) + coroutineScope { + val fetchStatus = async { + fetchNetworkStatus(userWalletId, currency.network) + } + val fetchQuote = async { + fetchQuote(currency.id) + } + awaitAll(fetchStatus, fetchQuote) + } } } - private suspend fun Raise.fetchCurrencyStatus( - userWalletId: UserWalletId, - currency: CryptoCurrency, - refresh: Boolean, - ) = coroutineScope { - val fetchStatus = async { - fetchNetworkStatus(userWalletId, currency.network) - } - val fetchQuote = async { - fetchQuote(currency.id) - } - val fetchStakingBalance = async { - fetchStakingBalance(userWalletId, currency, refresh) - } - - awaitAll(fetchStatus, fetchQuote, fetchStakingBalance) - } - private suspend fun Raise.getCurrency( userWalletId: UserWalletId, id: CryptoCurrency.ID, diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/operations/CachedCurrenciesStatusesOperations.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/operations/CachedCurrenciesStatusesOperations.kt index c58bc38c90..d29b49e8be 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/operations/CachedCurrenciesStatusesOperations.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/operations/CachedCurrenciesStatusesOperations.kt @@ -15,6 +15,7 @@ import com.tangem.domain.models.network.Network import com.tangem.domain.models.network.NetworkStatus import com.tangem.domain.networks.multi.MultiNetworkStatusFetcher import com.tangem.domain.networks.multi.MultiNetworkStatusSupplier +import com.tangem.domain.networks.single.SingleNetworkStatusFetcher import com.tangem.domain.networks.single.SingleNetworkStatusProducer import com.tangem.domain.networks.single.SingleNetworkStatusSupplier import com.tangem.domain.quotes.QuotesRepositoryV2 @@ -36,6 +37,7 @@ import com.tangem.domain.tokens.repository.CurrenciesRepository import com.tangem.domain.tokens.utils.extractAddress import com.tangem.domain.wallets.models.UserWalletId import com.tangem.utils.extensions.addOrReplace +import com.tangem.utils.extensions.isSingleItem import kotlinx.coroutines.* import kotlinx.coroutines.flow.* @@ -47,6 +49,7 @@ class CachedCurrenciesStatusesOperations( private val singleNetworkStatusSupplier: SingleNetworkStatusSupplier, multiNetworkStatusSupplier: MultiNetworkStatusSupplier, private val multiNetworkStatusFetcher: MultiNetworkStatusFetcher, + private val singleNetworkStatusFetcher: SingleNetworkStatusFetcher, private val multiQuoteFetcher: MultiQuoteFetcher, private val singleQuoteSupplier: SingleQuoteSupplier, private val singleYieldBalanceSupplier: SingleYieldBalanceSupplier, @@ -181,9 +184,21 @@ class CachedCurrenciesStatusesOperations( coroutineScope { awaitAll( async { - multiNetworkStatusFetcher( - params = MultiNetworkStatusFetcher.Params(userWalletId = userWalletId, networks = networks), - ) + if (networks.isSingleItem()) { + singleNetworkStatusFetcher( + params = SingleNetworkStatusFetcher.Params( + userWalletId = userWalletId, + network = networks.first(), + ), + ) + } else { + multiNetworkStatusFetcher( + params = MultiNetworkStatusFetcher.Params( + userWalletId = userWalletId, + networks = networks, + ), + ) + } }, async { val rawCurrenciesIds = currenciesIds.mapNotNullTo(mutableSetOf()) { it.rawCurrencyId }