From 9ad06df95c4b4e0ae721c674d4bc820101dc33cc Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 7 Feb 2025 19:22:14 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../repository/DefaultNetworksRepository.kt | 11 ++++++++ .../model/UpdateWalletManagerResult.kt | 2 +- .../model/CryptoCurrencyAmountStatus.kt | 2 +- .../CurrenciesStatusesLceOperations.kt | 4 +-- .../tokens/repository/NetworksRepository.kt | 27 ++++++++++++++++++- .../repository/MockNetworksRepository.kt | 13 ++++++++- 6 files changed, 52 insertions(+), 7 deletions(-) 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 fce7b9ce1b..664baf087d 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 @@ -48,9 +48,20 @@ internal class DefaultNetworksRepository( private val responseCurrenciesFactory = ResponseCryptoCurrenciesFactory(excludedBlockchains) private val networkStatusFactory = NetworkStatusFactory() + override suspend fun fetchNetworkStatuses(userWalletId: UserWalletId, networks: Set, refresh: Boolean) { + TODO("Will be implemented in [REDACTED_TASK_KEY]") + } + override fun getNetworkStatusesUpdates( userWalletId: UserWalletId, networks: Set, + ): Flow> { + TODO("Will be implemented in [REDACTED_TASK_KEY]") + } + + override fun getNetworkStatusesUpdatesLegacy( + userWalletId: UserWalletId, + networks: Set, ): Flow> = channelFlow { networksStatusesStore.get(userWalletId) .onEach(::send) diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/model/UpdateWalletManagerResult.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/model/UpdateWalletManagerResult.kt index 8ea8b9ab29..e559e34553 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/model/UpdateWalletManagerResult.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/model/UpdateWalletManagerResult.kt @@ -4,7 +4,7 @@ import java.math.BigDecimal sealed class UpdateWalletManagerResult { - object MissedDerivation : UpdateWalletManagerResult() + data object MissedDerivation : UpdateWalletManagerResult() data class Unreachable( val selectedAddress: String? = null, diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/CryptoCurrencyAmountStatus.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/CryptoCurrencyAmountStatus.kt index 811c21d441..bfb7bbc16c 100644 --- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/CryptoCurrencyAmountStatus.kt +++ b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/CryptoCurrencyAmountStatus.kt @@ -9,5 +9,5 @@ sealed class CryptoCurrencyAmountStatus { data class Loaded(val value: BigDecimal) : CryptoCurrencyAmountStatus() - object NotFound : CryptoCurrencyAmountStatus() + data object NotFound : CryptoCurrencyAmountStatus() } \ No newline at end of file diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/operations/CurrenciesStatusesLceOperations.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/operations/CurrenciesStatusesLceOperations.kt index a978af55f4..3e20249440 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/operations/CurrenciesStatusesLceOperations.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/operations/CurrenciesStatusesLceOperations.kt @@ -17,7 +17,6 @@ import com.tangem.domain.tokens.repository.CurrenciesRepository import com.tangem.domain.tokens.repository.NetworksRepository import com.tangem.domain.tokens.repository.QuotesRepository import com.tangem.domain.wallets.models.UserWalletId -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.delay import kotlinx.coroutines.flow.* @@ -35,7 +34,6 @@ internal class CurrenciesStatusesLceOperations( ) } - @OptIn(ExperimentalCoroutinesApi::class) private fun transformToCurrenciesStatuses( userWalletId: UserWalletId, currenciesFlow: EitherFlow>, @@ -181,7 +179,7 @@ internal class CurrenciesStatusesLceOperations( userWalletId: UserWalletId, networks: NonEmptySet, ): EitherFlow> { - return networksRepository.getNetworkStatusesUpdates(userWalletId, networks) + return networksRepository.getNetworkStatusesUpdatesLegacy(userWalletId, networks) .map, Either>> { it.right() } .catch { emit(TokenListError.DataError(it).left()) } .distinctUntilChanged() diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/NetworksRepository.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/NetworksRepository.kt index 2e568b83b4..7b799da0f0 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/NetworksRepository.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/NetworksRepository.kt @@ -10,6 +10,31 @@ import kotlinx.coroutines.flow.Flow * Repository for everything related to the blockchain networks * */ interface NetworksRepository { + + /** + * Retrieves updates of network statuses of specified blockchain networks for a specific user wallet. + * + * To fetch and populate the cache with network statuses, use [fetchNetworkStatuses]. + * + * @param userWalletId The unique identifier of the user wallet. + * @param networks A set of network which statuses are to be retrieved. + * + * @return A [Flow] emitting a set of [NetworkStatus] objects corresponding to the specified networks. + * */ + fun getNetworkStatusesUpdates(userWalletId: UserWalletId, networks: Set): Flow> + + /** + * Fetches network statuses of specified blockchain networks for a specific user wallet. + * + * Fetched network statuses are stored in the local cache and can be retrieved by calling + * [getNetworkStatusesUpdates]. + * + * @param userWalletId The unique identifier of the user wallet. + * @param networks A set of network which statuses are to be retrieved. + * @param refresh A boolean flag indicating whether the data should be refreshed. Default is `false`. + * */ + suspend fun fetchNetworkStatuses(userWalletId: UserWalletId, networks: Set, refresh: Boolean = false) + /** * Retrieves updates of network statuses of specified blockchain networks for a specific user wallet. * @@ -19,7 +44,7 @@ interface NetworksRepository { * @param networks A set of network which statuses are to be retrieved. * @return A [Flow] emitting a set of [NetworkStatus] objects corresponding to the specified networks. */ - fun getNetworkStatusesUpdates(userWalletId: UserWalletId, networks: Set): Flow> + fun getNetworkStatusesUpdatesLegacy(userWalletId: UserWalletId, networks: Set): Flow> /** * Fetches pending transactions for given network diff --git a/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/repository/MockNetworksRepository.kt b/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/repository/MockNetworksRepository.kt index 2e56eb6aa0..956bfa3dac 100644 --- a/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/repository/MockNetworksRepository.kt +++ b/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/repository/MockNetworksRepository.kt @@ -22,6 +22,17 @@ internal class MockNetworksRepository( return statuses.map { it.getOrElse { e -> throw e } } } + override suspend fun fetchNetworkStatuses(userWalletId: UserWalletId, networks: Set, refresh: Boolean) { + /* no-op */ + } + + override fun getNetworkStatusesUpdatesLegacy( + userWalletId: UserWalletId, + networks: Set, + ): Flow> { + return statuses.map { it.getOrElse { e -> throw e } } + } + override suspend fun fetchNetworkPendingTransactions(userWalletId: UserWalletId, networks: Set) { // no-op } @@ -31,7 +42,7 @@ internal class MockNetworksRepository( networks: Set, refresh: Boolean, ): Set { - return getNetworkStatusesUpdates(userWalletId, networks).first() + return getNetworkStatusesUpdatesLegacy(userWalletId, networks).first() } override fun isNeedToCreateAccountWithoutReserve(network: Network) = false