Updated on 2026-08-14
This commit is contained in:
parent
2d61d3d521
commit
068cb45cb4
1 changed files with 80 additions and 48 deletions
|
|
@ -124,7 +124,7 @@ class GetCryptoCurrencyActionsUseCase(
|
|||
}
|
||||
|
||||
if (cryptoCurrencyStatus.value.sources.total != StatusSource.ACTUAL) {
|
||||
return getActionsForOutdatedData(userWallet, cryptoCurrencyStatus, requirements)
|
||||
return getActionsForOutdatedData(userWallet, cryptoCurrencyStatus, requirements, isStakingAvailable)
|
||||
}
|
||||
|
||||
val activeList = mutableListOf<TokenActionsState.ActionState>()
|
||||
|
|
@ -148,27 +148,7 @@ class GetCryptoCurrencyActionsUseCase(
|
|||
}
|
||||
|
||||
// staking
|
||||
if (isStakingAvailable) {
|
||||
val yield = kotlin.runCatching {
|
||||
stakingRepository.getYield(
|
||||
cryptoCurrencyId = cryptoCurrency.id,
|
||||
symbol = cryptoCurrency.symbol,
|
||||
)
|
||||
}.getOrNull()
|
||||
activeList.add(
|
||||
TokenActionsState.ActionState.Stake(
|
||||
unavailabilityReason = ScenarioUnavailabilityReason.None,
|
||||
yield = yield,
|
||||
),
|
||||
)
|
||||
} else {
|
||||
disabledList.add(
|
||||
TokenActionsState.ActionState.Stake(
|
||||
unavailabilityReason = ScenarioUnavailabilityReason.StakingUnavailable(cryptoCurrency.name),
|
||||
yield = null,
|
||||
),
|
||||
)
|
||||
}
|
||||
addStakingActions(cryptoCurrency, isStakingAvailable, activeList, disabledList)
|
||||
|
||||
// send
|
||||
val sendUnavailabilityReason = getSendUnavailabilityReason(
|
||||
|
|
@ -217,6 +197,35 @@ class GetCryptoCurrencyActionsUseCase(
|
|||
return activeList + disabledList
|
||||
}
|
||||
|
||||
private suspend fun addStakingActions(
|
||||
cryptoCurrency: CryptoCurrency,
|
||||
isStakingAvailable: Boolean,
|
||||
activeList: MutableList<TokenActionsState.ActionState>,
|
||||
disabledList: MutableList<TokenActionsState.ActionState>,
|
||||
) {
|
||||
if (isStakingAvailable) {
|
||||
val yield = kotlin.runCatching {
|
||||
stakingRepository.getYield(
|
||||
cryptoCurrencyId = cryptoCurrency.id,
|
||||
symbol = cryptoCurrency.symbol,
|
||||
)
|
||||
}.getOrNull()
|
||||
activeList.add(
|
||||
TokenActionsState.ActionState.Stake(
|
||||
unavailabilityReason = ScenarioUnavailabilityReason.None,
|
||||
yield = yield,
|
||||
),
|
||||
)
|
||||
} else {
|
||||
disabledList.add(
|
||||
TokenActionsState.ActionState.Stake(
|
||||
unavailabilityReason = ScenarioUnavailabilityReason.StakingUnavailable(cryptoCurrency.name),
|
||||
yield = null,
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun getActionsForUnreachableCurrency(
|
||||
userWallet: UserWallet,
|
||||
cryptoCurrencyStatus: CryptoCurrencyStatus,
|
||||
|
|
@ -256,12 +265,16 @@ class GetCryptoCurrencyActionsUseCase(
|
|||
return actionsList
|
||||
}
|
||||
|
||||
@Suppress("LongMethod")
|
||||
private suspend fun getActionsForOutdatedData(
|
||||
userWallet: UserWallet,
|
||||
cryptoCurrencyStatus: CryptoCurrencyStatus,
|
||||
requirements: AssetRequirementsCondition?,
|
||||
isStakingAvailable: Boolean,
|
||||
): List<TokenActionsState.ActionState> {
|
||||
val activeList = mutableListOf<TokenActionsState.ActionState>()
|
||||
val disabledList = mutableListOf<TokenActionsState.ActionState>()
|
||||
val cryptoCurrency = cryptoCurrencyStatus.currency
|
||||
|
||||
// copy address
|
||||
if (isAddressAvailable(cryptoCurrencyStatus.value.networkAddress)) {
|
||||
|
|
@ -271,7 +284,12 @@ class GetCryptoCurrencyActionsUseCase(
|
|||
// receive
|
||||
if (isAddressAvailable(cryptoCurrencyStatus.value.networkAddress)) {
|
||||
val scenario = getReceiveScenario(requirements)
|
||||
activeList.add(TokenActionsState.ActionState.Receive(scenario))
|
||||
val action = TokenActionsState.ActionState.Receive(scenario)
|
||||
if (scenario == ScenarioUnavailabilityReason.None) {
|
||||
activeList.add(action)
|
||||
} else {
|
||||
disabledList.add(action)
|
||||
}
|
||||
}
|
||||
|
||||
// swap
|
||||
|
|
@ -280,25 +298,28 @@ class GetCryptoCurrencyActionsUseCase(
|
|||
quoteSource.isActual() && networkSource.isActual()
|
||||
}
|
||||
|
||||
activeList.add(
|
||||
TokenActionsState.ActionState.Swap(
|
||||
unavailabilityReason = if (isSwapAvailable) {
|
||||
ScenarioUnavailabilityReason.None
|
||||
} else if (sources.networkSource == StatusSource.ONLY_CACHE) {
|
||||
ScenarioUnavailabilityReason.UsedOutdatedData
|
||||
} else {
|
||||
// CACHE source always when loading
|
||||
ScenarioUnavailabilityReason.DataLoading
|
||||
},
|
||||
showBadge = false,
|
||||
),
|
||||
val swapAction = TokenActionsState.ActionState.Swap(
|
||||
unavailabilityReason = if (isSwapAvailable) {
|
||||
ScenarioUnavailabilityReason.None
|
||||
} else if (sources.networkSource == StatusSource.ONLY_CACHE) {
|
||||
ScenarioUnavailabilityReason.UsedOutdatedData
|
||||
} else {
|
||||
// CACHE source always when loading
|
||||
ScenarioUnavailabilityReason.DataLoading
|
||||
},
|
||||
showBadge = false,
|
||||
)
|
||||
if (swapAction.unavailabilityReason == ScenarioUnavailabilityReason.None) {
|
||||
activeList.add(swapAction)
|
||||
} else {
|
||||
disabledList.add(swapAction)
|
||||
}
|
||||
|
||||
// buy
|
||||
if (rampManager.availableForBuy(userWallet.scanResponse, userWallet.walletId, cryptoCurrencyStatus.currency)) {
|
||||
if (rampManager.availableForBuy(userWallet.scanResponse, userWallet.walletId, cryptoCurrency)) {
|
||||
activeList.add(TokenActionsState.ActionState.Buy(ScenarioUnavailabilityReason.None))
|
||||
} else {
|
||||
activeList.add(
|
||||
disabledList.add(
|
||||
TokenActionsState.ActionState.Buy(
|
||||
ScenarioUnavailabilityReason.BuyUnavailable(
|
||||
cryptoCurrencyName = cryptoCurrencyStatus.currency.name,
|
||||
|
|
@ -308,29 +329,40 @@ class GetCryptoCurrencyActionsUseCase(
|
|||
}
|
||||
|
||||
// staking
|
||||
activeList.add(TokenActionsState.ActionState.Stake(ScenarioUnavailabilityReason.UsedOutdatedData, null))
|
||||
if (cryptoCurrencyStatus.value.sources.networkSource.isActual()) {
|
||||
addStakingActions(cryptoCurrency, isStakingAvailable, activeList, disabledList)
|
||||
} else {
|
||||
disabledList.add(TokenActionsState.ActionState.Stake(ScenarioUnavailabilityReason.UsedOutdatedData, null))
|
||||
}
|
||||
|
||||
// send
|
||||
val isSendAvailable = cryptoCurrencyStatus.value.sources.networkSource.isActual()
|
||||
|
||||
activeList.add(
|
||||
TokenActionsState.ActionState.Send(
|
||||
unavailabilityReason = if (isSendAvailable) {
|
||||
ScenarioUnavailabilityReason.None
|
||||
} else {
|
||||
ScenarioUnavailabilityReason.UsedOutdatedData
|
||||
},
|
||||
),
|
||||
val sendAction = TokenActionsState.ActionState.Send(
|
||||
unavailabilityReason = if (isSendAvailable) {
|
||||
ScenarioUnavailabilityReason.None
|
||||
} else {
|
||||
ScenarioUnavailabilityReason.UsedOutdatedData
|
||||
},
|
||||
)
|
||||
if (sendAction.unavailabilityReason == ScenarioUnavailabilityReason.None) {
|
||||
activeList.add(sendAction)
|
||||
} else {
|
||||
disabledList.add(sendAction)
|
||||
}
|
||||
|
||||
// region sell
|
||||
activeList.add(TokenActionsState.ActionState.Sell(ScenarioUnavailabilityReason.UsedOutdatedData))
|
||||
if (isSendAvailable) {
|
||||
activeList.add(TokenActionsState.ActionState.Sell(ScenarioUnavailabilityReason.None))
|
||||
} else {
|
||||
disabledList.add(TokenActionsState.ActionState.Sell(ScenarioUnavailabilityReason.UsedOutdatedData))
|
||||
}
|
||||
// endregion
|
||||
|
||||
// hide
|
||||
activeList.add(TokenActionsState.ActionState.HideToken(ScenarioUnavailabilityReason.None))
|
||||
|
||||
return activeList
|
||||
return activeList + disabledList
|
||||
}
|
||||
|
||||
private fun getReceiveScenario(requirements: AssetRequirementsCondition?): ScenarioUnavailabilityReason {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue