From 8b36ed7a9ba721a67b4a631f7e30fe8c77d48f99 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 7 Dec 2021 15:57:44 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../features/tokens/redux/TokensMiddleware.kt | 38 +++++++++++++++---- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt index 42311b8b1a..4e1d90b2e4 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt @@ -1,5 +1,7 @@ package com.tangem.tap.features.tokens.redux +import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchain.common.Token import com.tangem.common.CompletionResult import com.tangem.common.card.EllipticCurve import com.tangem.tap.common.extensions.dispatchErrorNotification @@ -11,6 +13,7 @@ import com.tangem.tap.currenciesRepository import com.tangem.tap.domain.DELAY_SDK_DIALOG_CLOSE import com.tangem.tap.domain.TapError import com.tangem.tap.domain.TapWorkarounds.isTestCard +import com.tangem.tap.domain.tasks.product.ScanResponse import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.scope import com.tangem.tap.store @@ -68,7 +71,6 @@ class TokensMiddleware { private fun handleSaveChanges(action: TokensAction.TokensList.SaveChanges) { val scanResponse = store.state.globalState.scanResponse ?: return - val wallet = scanResponse.card.wallets.firstOrNull { it.curve == EllipticCurve.Secp256k1 } ?: return val candidatesToAdd = store.state.tokensState.candidateToAdd if (candidatesToAdd.isEmpty()) return @@ -79,8 +81,24 @@ class TokensMiddleware { .map { it.token } if (blockchains.isEmpty() && tokens.isEmpty()) return - val derivationPathsCandidates = (blockchains + tokens.map { it.blockchain }) - .distinct().mapNotNull { it.derivationPath() } + if (scanResponse.isTangemWallet()) { + deriveMissingBlockchains(scanResponse, blockchains, tokens) + } else { + submitAdd(blockchains, tokens) + store.dispatch(NavigationAction.PopBackTo()) + } + } + + private fun deriveMissingBlockchains( + scanResponse: ScanResponse, + blockchains: List, + tokens: List + ) { + val wallet = scanResponse.card.wallets.firstOrNull { it.curve == EllipticCurve.Secp256k1 } ?: return + + val tokenBlockchains = tokens.map { it.blockchain } + val derivationPathsCandidates = (blockchains + tokenBlockchains).distinct() + .mapNotNull { it.derivationPath() } val mapKeyOfWalletPublicKey = wallet.publicKey.toMapKey() val alreadyDerivedKeys = scanResponse.derivedKeys[mapKeyOfWalletPublicKey]?.toMutableList() ?: mutableListOf() @@ -97,13 +115,9 @@ class TokensMiddleware { val updatedScanResponse = scanResponse.copy( derivedKeys = mapOf(mapKeyOfWalletPublicKey to alreadyDerivedKeys.toList()) ) - store.dispatch(GlobalAction.SaveScanNoteResponse(updatedScanResponse)) + submitAdd(blockchains, tokens) - val actions = blockchains.map { WalletAction.MultiWallet.AddBlockchain(it) } + tokens.map { - WalletAction.MultiWallet.AddToken(it) - } - actions.forEach { store.dispatch(it) } delay(DELAY_SDK_DIALOG_CLOSE) store.dispatch(NavigationAction.PopBackTo()) } @@ -113,4 +127,12 @@ class TokensMiddleware { } } } + + private fun submitAdd(blockchains: List, tokens: List) { + (blockchains.map { + WalletAction.MultiWallet.AddBlockchain(it) + } + tokens.map { + WalletAction.MultiWallet.AddToken(it) + }).forEach { store.dispatch(it) } + } } \ No newline at end of file