diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/token/DefaultStakingYieldsStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/token/DefaultStakingYieldsStore.kt index cdac7d46bf..546383ebc6 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/token/DefaultStakingYieldsStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/token/DefaultStakingYieldsStore.kt @@ -23,20 +23,22 @@ internal class DefaultStakingYieldsStore( return withTimeoutOrNull(timeout = YIELDS_WAITING_TIMEOUT, block = { get().firstOrNull() }) } - override suspend fun store(items: List) { - dataStore.updateData { data -> - val updatedItems = data.toMutableList() - items.forEach { newItem -> - val existingItemIndex = data.indexOfFirst { it.id == newItem.id } - if (existingItemIndex != -1) { - // Update existing item - updatedItems[existingItemIndex] = newItem - } else { - // Add new item - updatedItems.add(newItem) + override suspend fun store(items: List, force: Boolean) { + if (force) { + dataStore.updateData { items } + } else { + dataStore.updateData { data -> + val updatedItems = data.toMutableList() + items.forEach { newItem -> + val existingItemIndex = data.indexOfFirst { it.id == newItem.id } + if (existingItemIndex != -1) { + updatedItems[existingItemIndex] = newItem + } else { + updatedItems.add(newItem) + } } + updatedItems } - updatedItems } } diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/token/StakingYieldsStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/token/StakingYieldsStore.kt index 29d2e37b01..b63e1c239c 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/token/StakingYieldsStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/token/StakingYieldsStore.kt @@ -11,5 +11,5 @@ interface StakingYieldsStore { suspend fun getSyncWithTimeout(): List? - suspend fun store(items: List) + suspend fun store(items: List, force: Boolean = false) } \ No newline at end of file diff --git a/data/staking/src/main/java/com/tangem/data/staking/DefaultStakingRepository.kt b/data/staking/src/main/java/com/tangem/data/staking/DefaultStakingRepository.kt index f6341c0957..bb9191de43 100644 --- a/data/staking/src/main/java/com/tangem/data/staking/DefaultStakingRepository.kt +++ b/data/staking/src/main/java/com/tangem/data/staking/DefaultStakingRepository.kt @@ -107,7 +107,9 @@ internal class DefaultStakingRepository( } } } - stakingYieldsStore.store(yields) + + val shouldRewriteCache = yieldsResponses.all { it is ApiResponse.Success } + stakingYieldsStore.store(yields, shouldRewriteCache) } } @@ -488,6 +490,13 @@ internal class DefaultStakingRepository( } private fun findPrefetchedYield(yields: List, currencyId: CryptoCurrency.RawID, symbol: String): Yield? { + if (!stakingFeatureToggles.isCardanoStakingEnabled && symbol.equals( + Blockchain.Cardano.currency, + ignoreCase = true, + ) + ) { + return null + } return yields.find { yield -> yield.tokens.any { it.coinGeckoId == currencyId.value && it.symbol == symbol } } diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt index 97f16addf1..ea55fc185b 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt @@ -1105,14 +1105,15 @@ internal class TokenDetailsModel @Inject constructor( private fun openStaking() { modelScope.launch { - val yield = getYieldUseCase.invoke( + getYieldUseCase.invoke( cryptoCurrencyId = cryptoCurrency.id, symbol = cryptoCurrency.symbol, - ).getOrElse { - error("Staking is unavailable for ${cryptoCurrency.name}") + ).onRight { yield -> + router.openStaking(userWalletId, cryptoCurrency, yield.id) + }.onLeft { + Timber.e("Staking is unavailable for ${cryptoCurrency.name}") + uiMessageSender.send(SnackbarMessage(resourceReference(R.string.staking_error_no_validators_title))) } - - router.openStaking(userWalletId, cryptoCurrency, yield.id) } }