Updated on 2026-08-14
This commit is contained in:
parent
13a9dba8ab
commit
95a1e6c766
3 changed files with 34 additions and 8 deletions
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue