Updated on 2026-08-14
This commit is contained in:
parent
e5478ad943
commit
904d4bb006
3 changed files with 27 additions and 33 deletions
|
|
@ -28,6 +28,7 @@ import com.tangem.domain.feedback.SaveBlockchainErrorUseCase
|
|||
import com.tangem.domain.feedback.SendFeedbackEmailUseCase
|
||||
import com.tangem.domain.feedback.models.BlockchainErrorInfo
|
||||
import com.tangem.domain.feedback.models.FeedbackEmailType
|
||||
import com.tangem.domain.models.StatusSource
|
||||
import com.tangem.domain.models.currency.CryptoCurrency
|
||||
import com.tangem.domain.staking.*
|
||||
import com.tangem.domain.staking.analytics.StakeScreenSource
|
||||
|
|
@ -420,7 +421,7 @@ internal class StakingModel @Inject constructor(
|
|||
override fun onRefreshSwipe(isRefreshing: Boolean) {
|
||||
stateController.update(SetInitialLoadingStateTransformer(isRefreshing))
|
||||
coroutineScope.launch {
|
||||
balanceUpdater.partialUpdate()
|
||||
balanceUpdater.updatePullToRefresh()
|
||||
}.invokeOnCompletion {
|
||||
stateController.update(SetInitialLoadingStateTransformer(false))
|
||||
}
|
||||
|
|
@ -929,7 +930,12 @@ internal class StakingModel @Inject constructor(
|
|||
isSingleWalletWithTokens = false,
|
||||
)
|
||||
.conflate()
|
||||
.distinctUntilChangedBy { it.getOrNull()?.value?.yieldBalance }
|
||||
.filter {
|
||||
val sources = it.getOrNull()?.value?.sources ?: return@filter true
|
||||
|
||||
sources.networkSource == StatusSource.ACTUAL && sources.yieldBalanceSource == StatusSource.ACTUAL
|
||||
}
|
||||
.distinctUntilChanged()
|
||||
.filter { value.currentStep == StakingStep.InitialInfo }
|
||||
.onEach { maybeStatus ->
|
||||
maybeStatus.fold(
|
||||
|
|
@ -1005,7 +1011,7 @@ internal class StakingModel @Inject constructor(
|
|||
when {
|
||||
isInitState() -> {
|
||||
updateInitialData(status)
|
||||
balanceUpdater.partialUpdate()
|
||||
balanceUpdater.updateAfterNavigationToInitial()
|
||||
}
|
||||
isAssentState() -> {
|
||||
getFee()
|
||||
|
|
|
|||
|
|
@ -1,12 +1,10 @@
|
|||
package com.tangem.features.staking.impl.presentation.state.helpers
|
||||
|
||||
import com.tangem.domain.staking.FetchActionsUseCase
|
||||
import com.tangem.domain.staking.FetchStakingYieldBalanceUseCase
|
||||
import com.tangem.domain.staking.model.stakekit.Yield
|
||||
import com.tangem.domain.staking.model.stakekit.action.StakingActionStatus
|
||||
import com.tangem.domain.tokens.FetchCurrencyStatusUseCase
|
||||
import com.tangem.domain.tokens.FetchPendingTransactionsUseCase
|
||||
import com.tangem.domain.tokens.TokensFeatureToggles
|
||||
import com.tangem.domain.tokens.UpdateDelayedNetworkStatusUseCase
|
||||
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
|
||||
import com.tangem.domain.txhistory.usecase.GetTxHistoryItemsCountUseCase
|
||||
import com.tangem.domain.wallets.models.UserWallet
|
||||
|
|
@ -20,18 +18,16 @@ import kotlinx.coroutines.*
|
|||
@Suppress("LongParameterList")
|
||||
internal class StakingBalanceUpdater @AssistedInject constructor(
|
||||
private val fetchPendingTransactionsUseCase: FetchPendingTransactionsUseCase,
|
||||
private val updateDelayedNetworkStatusUseCase: UpdateDelayedNetworkStatusUseCase,
|
||||
private val stakingYieldBalanceUseCase: FetchStakingYieldBalanceUseCase,
|
||||
private val getTxHistoryItemsCountUseCase: GetTxHistoryItemsCountUseCase,
|
||||
private val fetchActionsUseCase: FetchActionsUseCase,
|
||||
private val txHistoryContentUpdateEmitter: TxHistoryContentUpdateEmitter,
|
||||
private val tokensFeatureToggles: TokensFeatureToggles,
|
||||
private val fetchCurrencyStatusUseCase: FetchCurrencyStatusUseCase,
|
||||
@DelayedWork private val coroutineScope: CoroutineScope,
|
||||
@Assisted private val userWallet: UserWallet,
|
||||
@Assisted private val cryptoCurrencyStatus: CryptoCurrencyStatus,
|
||||
@Assisted private val yield: Yield,
|
||||
) {
|
||||
fun fullUpdate() {
|
||||
fun updateAfterTransaction() {
|
||||
coroutineScope.launch {
|
||||
listOf(
|
||||
// we should update network to find pending tx after 1 sec
|
||||
|
|
@ -43,50 +39,42 @@ internal class StakingBalanceUpdater @AssistedInject constructor(
|
|||
},
|
||||
// we should update tx history and network for new balances
|
||||
async {
|
||||
updateStakeBalance()
|
||||
fetchCurrencyStatus(delayMillis = BALANCE_UPDATE_DELAY)
|
||||
},
|
||||
async {
|
||||
updateTxHistory()
|
||||
},
|
||||
async {
|
||||
updateNetworkStatuses()
|
||||
},
|
||||
async {
|
||||
updateProcessingActions()
|
||||
updateStakingActions()
|
||||
},
|
||||
).awaitAll()
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun partialUpdate() {
|
||||
suspend fun updatePullToRefresh() {
|
||||
coroutineScope {
|
||||
listOf(
|
||||
async {
|
||||
updateStakeBalance()
|
||||
fetchCurrencyStatus()
|
||||
},
|
||||
async {
|
||||
updateNetworkStatuses(delay = 0)
|
||||
},
|
||||
async {
|
||||
updateProcessingActions()
|
||||
updateStakingActions()
|
||||
},
|
||||
).awaitAll()
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun updateNetworkStatuses(delay: Long = BALANCE_UPDATE_DELAY) {
|
||||
updateDelayedNetworkStatusUseCase(
|
||||
userWalletId = userWallet.walletId,
|
||||
network = cryptoCurrencyStatus.currency.network,
|
||||
delayMillis = delay,
|
||||
)
|
||||
suspend fun updateAfterNavigationToInitial() {
|
||||
coroutineScope {
|
||||
async { updateStakingActions() }.await()
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun updateStakeBalance() {
|
||||
stakingYieldBalanceUseCase(
|
||||
private suspend fun fetchCurrencyStatus(delayMillis: Long = 0L) {
|
||||
delay(delayMillis)
|
||||
fetchCurrencyStatusUseCase(
|
||||
userWalletId = userWallet.walletId,
|
||||
cryptoCurrency = cryptoCurrencyStatus.currency,
|
||||
isRefactoringEnabled = tokensFeatureToggles.isStakingLoadingRefactoringEnabled,
|
||||
id = cryptoCurrencyStatus.currency.id,
|
||||
refresh = true,
|
||||
)
|
||||
}
|
||||
|
|
@ -103,7 +91,7 @@ internal class StakingBalanceUpdater @AssistedInject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private suspend fun updateProcessingActions() {
|
||||
private suspend fun updateStakingActions() {
|
||||
fetchActionsUseCase(
|
||||
userWalletId = userWallet.walletId,
|
||||
cryptoCurrency = cryptoCurrencyStatus.currency,
|
||||
|
|
|
|||
|
|
@ -255,7 +255,7 @@ internal class StakingTransactionSender @AssistedInject constructor(
|
|||
networkId = cryptoCurrencyStatus.currency.network.id,
|
||||
).getOrNull() ?: ""
|
||||
|
||||
balanceUpdater.fullUpdate()
|
||||
balanceUpdater.updateAfterTransaction()
|
||||
onSendSuccess(txUrl)
|
||||
},
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue