From 0e370ae05feb0758ddbebef17df257e281411b63 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 30 May 2024 15:08:00 +0100 Subject: [PATCH] Updated on 2026-08-14 --- .../DefaultWalletManagersFacade.kt | 35 +++++++++++-------- .../DefaultBlockchainSDKFactory.kt | 4 +-- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt index 1b0637dbd7..c15246cb89 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt @@ -37,6 +37,8 @@ import com.tangem.domain.walletmanager.utils.WalletManagerFactory import com.tangem.domain.wallets.models.UserWallet import com.tangem.domain.wallets.models.UserWalletId import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock import timber.log.Timber import java.math.BigDecimal import java.util.EnumSet @@ -61,6 +63,8 @@ class DefaultWalletManagersFacade( private val requirementsConditionConverter by lazy { SdkRequirementsConditionConverter() } private val estimationFeeAddressFactory by lazy { EstimationFeeAddressFactory() } + private val initMutex = Mutex() + override suspend fun update( userWalletId: UserWalletId, network: Network, @@ -329,24 +333,25 @@ class DefaultWalletManagersFacade( blockchain: Blockchain, derivationPath: String?, ): WalletManager? { - val userWallet = getUserWallet(userWalletId) - var walletManager = walletManagersStore.getSyncOrNull( - userWalletId = userWalletId, - blockchain = blockchain, - derivationPath = derivationPath, - ) - - if (walletManager == null) { - walletManager = walletManagerFactory.createWalletManager( - scanResponse = userWallet.scanResponse, + initMutex.withLock { + val userWallet = getUserWallet(userWalletId) + var walletManager = walletManagersStore.getSyncOrNull( + userWalletId = userWalletId, blockchain = blockchain, - derivationPath = derivationPath?.let { DerivationPath(rawPath = it) }, - ) ?: return null + derivationPath = derivationPath, + ) + if (walletManager == null) { + walletManager = walletManagerFactory.createWalletManager( + scanResponse = userWallet.scanResponse, + blockchain = blockchain, + derivationPath = derivationPath?.let { DerivationPath(rawPath = it) }, + ) + walletManager ?: return null - walletManagersStore.store(userWalletId, walletManager) + walletManagersStore.store(userWalletId, walletManager) + } + return walletManager } - - return walletManager } @Deprecated("Will be removed in future") diff --git a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/DefaultBlockchainSDKFactory.kt b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/DefaultBlockchainSDKFactory.kt index 7adfd7b9e1..6207c86026 100644 --- a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/DefaultBlockchainSDKFactory.kt +++ b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/DefaultBlockchainSDKFactory.kt @@ -42,10 +42,10 @@ internal class DefaultBlockchainSDKFactory( dispatchers: CoroutineDispatcherProvider, ) : BlockchainSDKFactory { - private val walletManagerFactory: Flow by lazy(::createWalletManagerFactory) - private val mainScope = CoroutineScope(dispatchers.main) + private val walletManagerFactory: Flow = createWalletManagerFactory() + override suspend fun init() { coroutineScope { updateBlockchainSDKConfig()