Updated on 2026-08-14

This commit is contained in:
Tangem 2025-04-09 14:59:58 +04:00
parent 13a9dba8ab
commit 95a1e6c766
3 changed files with 34 additions and 8 deletions

View file

@ -2,6 +2,7 @@ package com.tangem.tap.di.domain
import com.tangem.domain.card.repository.CardSdkConfigRepository
import com.tangem.domain.demo.DemoConfig
import com.tangem.domain.networks.single.SingleNetworkStatusFetcher
import com.tangem.domain.networks.single.SingleNetworkStatusSupplier
import com.tangem.domain.tokens.TokensFeatureToggles
import com.tangem.domain.tokens.repository.CurrenciesRepository
@ -35,12 +36,16 @@ internal object TransactionDomainModule {
cardSdkConfigRepository: CardSdkConfigRepository,
transactionRepository: TransactionRepository,
walletManagersFacade: WalletManagersFacade,
singleNetworkStatusFetcher: SingleNetworkStatusFetcher,
tokensFeatureToggles: TokensFeatureToggles,
): SendTransactionUseCase {
return SendTransactionUseCase(
demoConfig = DemoConfig(),
cardSdkConfigRepository = cardSdkConfigRepository,
transactionRepository = transactionRepository,
walletManagersFacade = walletManagersFacade,
singleNetworkStatusFetcher = singleNetworkStatusFetcher,
tokensFeatureToggles = tokensFeatureToggles,
)
}

View file

@ -4,6 +4,8 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.mapNotNull
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
/**
* Runtime shared store
@ -42,6 +44,7 @@ interface RuntimeSharedStore<T> {
operator fun <T> invoke(): RuntimeSharedStore<T> = object : RuntimeSharedStore<T> {
private val flow = MutableSharedFlow<T?>(replay = 1)
private val updateMutex = Mutex()
init {
flow.tryEmit(value = null)
@ -58,10 +61,13 @@ interface RuntimeSharedStore<T> {
}
override suspend fun update(default: T, function: (T) -> T) {
val storedData = flow.firstOrNull() ?: default
val updatedData = function(storedData)
// required to synchronize get (firstOrNull) and update (emit) operations
updateMutex.withLock {
val storedData = flow.firstOrNull() ?: default
val updatedData = function(storedData)
flow.emit(value = updatedData)
flow.emit(value = updatedData)
}
}
}
}

View file

@ -12,12 +12,14 @@ import com.tangem.blockchain.extensions.Result
import com.tangem.blockchain.network.ResultChecker
import com.tangem.core.ui.format.bigdecimal.format
import com.tangem.core.ui.format.bigdecimal.simple
import com.tangem.domain.card.models.TwinKey
import com.tangem.domain.card.repository.CardSdkConfigRepository
import com.tangem.domain.common.TapWorkarounds.isStart2Coin
import com.tangem.domain.common.TapWorkarounds.isTangemTwins
import com.tangem.domain.demo.DemoConfig
import com.tangem.domain.demo.DemoTransactionSender
import com.tangem.domain.card.models.TwinKey
import com.tangem.domain.networks.single.SingleNetworkStatusFetcher
import com.tangem.domain.tokens.TokensFeatureToggles
import com.tangem.domain.tokens.model.Network
import com.tangem.domain.transaction.TransactionRepository
import com.tangem.domain.transaction.error.SendTransactionError
@ -30,6 +32,8 @@ class SendTransactionUseCase(
private val cardSdkConfigRepository: CardSdkConfigRepository,
private val transactionRepository: TransactionRepository,
private val walletManagersFacade: WalletManagersFacade,
private val singleNetworkStatusFetcher: SingleNetworkStatusFetcher,
private val tokensFeatureToggles: TokensFeatureToggles,
) {
suspend operator fun invoke(
txsData: List<TransactionData>,
@ -76,10 +80,21 @@ class SendTransactionUseCase(
}
cardSdkConfigRepository.setLinkedTerminal(linkedTerminal)
return sendResult.fold(
ifRight = { result -> result.hashes.right() },
ifLeft = { it.left() },
)
return sendResult
.onRight {
if (tokensFeatureToggles.isNetworksLoadingRefactoringEnabled) {
singleNetworkStatusFetcher(
params = SingleNetworkStatusFetcher.Params(
userWalletId = userWallet.walletId,
network = network,
),
)
}
}
.fold(
ifRight = { result -> result.hashes.right() },
ifLeft = { it.left() },
)
}
suspend operator fun invoke(