Updated on 2026-08-14

This commit is contained in:
Tangem 2023-10-21 13:46:43 +03:00
parent d92b32d25d
commit 1a5401519e
4 changed files with 59 additions and 14 deletions

View file

@ -9,7 +9,7 @@
},
{
"name": "REDESIGNED_WALLET_SCREEN_ENABLED",
"version": "1.0.0"
"version": "undefined"
},
{
"name": "1INCH_LEARN_2_EARN_ENABLED",
@ -21,10 +21,10 @@
},
{
"name": "REDESIGNED_APP_CURRENCY_SELECTOR_ENABLED",
"version": "1.0.0"
"version": "undefined"
},
{
"name": "DARK_THEME_ENABLED",
"version": "1.0.0"
"version": "undefined"
}
]

View file

@ -41,6 +41,7 @@ internal class DefaultCurrenciesRepository(
private val responseCurrenciesFactory = ResponseCryptoCurrenciesFactory(demoConfig)
private val cardCurrenciesFactory = CardCryptoCurrenciesFactory(demoConfig)
private val userTokensResponseFactory = UserTokensResponseFactory()
private val userTokensBackwardCompatibility = UserTokensBackwardCompatibility()
override suspend fun saveTokens(
userWalletId: UserWalletId,
@ -323,12 +324,14 @@ internal class DefaultCurrenciesRepository(
onError = { handleFetchTokensError(userWallet, it) },
)
userTokensStore.store(userWallet.walletId, response)
fetchExchangeableUserMarketCoinsByIds(userWalletId, response)
val compatibleUserTokensResponse = userTokensBackwardCompatibility.applyCompatibilityAndGetUpdated(response)
userTokensStore.store(userWallet.walletId, compatibleUserTokensResponse)
fetchExchangeableUserMarketCoinsByIds(userWalletId, compatibleUserTokensResponse)
}
private suspend fun storeAndPushTokens(userWalletId: UserWalletId, response: UserTokensResponse) {
userTokensStore.store(userWalletId, response)
val compatibleUserTokensResponse = userTokensBackwardCompatibility.applyCompatibilityAndGetUpdated(response)
userTokensStore.store(userWalletId, compatibleUserTokensResponse)
try {
tangemTechApi.saveUserTokens(userWalletId.stringValue, response)
} catch (e: Throwable) {

View file

@ -5,7 +5,7 @@ import com.tangem.datasource.api.tangemTech.models.QuotesResponse
/**
* Adapter to replace unsupported currencies for quotes request if it necessary
*/
class QuotesUnsupportedCurrenciesIdAdapter {
internal class QuotesUnsupportedCurrenciesIdAdapter {
/**
* Replaces unsupported currencies id to it replacements for request
@ -14,10 +14,13 @@ class QuotesUnsupportedCurrenciesIdAdapter {
val idsForRequest = mutableSetOf<String>()
val idsFiltered = mutableSetOf<String>()
currenciesIds.forEach { currencyId ->
unsupportedMapWithReplacement[currencyId]?.let {
val replacementId = UNSUPPORTED_IDS_WITH_REPLACEMENTS[currencyId]
if (replacementId != null) {
idsFiltered.add(currencyId)
idsForRequest.add(it)
} ?: idsForRequest.add(currencyId)
idsForRequest.add(replacementId)
} else {
idsForRequest.add(currencyId)
}
}
return ReplacementResult(idsForRequest = idsForRequest, idsFiltered = idsFiltered)
}
@ -28,9 +31,11 @@ class QuotesUnsupportedCurrenciesIdAdapter {
fun getResponseWithUnsupportedCurrencies(response: QuotesResponse, filteredIds: Set<String>): QuotesResponse {
val updatedQuotes = mutableMapOf<String, QuotesResponse.Quote>()
filteredIds.forEach { filteredId ->
unsupportedMapWithReplacement[filteredId]?.let { baseId ->
response.quotes[baseId]?.let { quote ->
updatedQuotes[filteredId] = quote
val replacementId = UNSUPPORTED_IDS_WITH_REPLACEMENTS[filteredId]
if (replacementId != null) {
val quoteReplacement = response.quotes[replacementId]
if (quoteReplacement != null) {
updatedQuotes[filteredId] = quoteReplacement
}
}
}
@ -43,7 +48,7 @@ class QuotesUnsupportedCurrenciesIdAdapter {
/**
* Map that contains unsupported currencies and their replacement for request
*/
private val unsupportedMapWithReplacement = mapOf(
private val UNSUPPORTED_IDS_WITH_REPLACEMENTS = mapOf(
"optimistic-ethereum" to "ethereum",
"arbitrum-one" to "ethereum",
)

View file

@ -0,0 +1,37 @@
package com.tangem.data.tokens.utils
import com.tangem.blockchain.common.Blockchain
import com.tangem.datasource.api.tangemTech.models.UserTokensResponse
import com.tangem.domain.common.extensions.fromNetworkId
import com.tangem.domain.common.extensions.toCoinId
/**
* Helper to apply compatibility changes for [UserTokensResponse] to support old saved tokens
* in new application with new IDs
*/
internal class UserTokensBackwardCompatibility {
fun applyCompatibilityAndGetUpdated(userTokensResponse: UserTokensResponse): UserTokensResponse {
return userTokensResponse.copy(
tokens = userTokensResponse.tokens.map { token ->
val oldSavedId = NETWORKS_TO_OLD_SAVED_IDS[token.networkId]
if (oldSavedId != null && token.id == oldSavedId) {
Blockchain.fromNetworkId(token.networkId)?.let { blockchain ->
token.copy(
id = blockchain.toCoinId(),
)
} ?: token
} else {
token
}
},
)
}
companion object {
private val NETWORKS_TO_OLD_SAVED_IDS = mapOf(
"optimistic-ethereum" to "ethereum",
"arbitrum-one" to "ethereum",
)
}
}