Updated on 2026-08-14
This commit is contained in:
parent
560b78cb43
commit
b082a86c35
3 changed files with 38 additions and 11 deletions
|
|
@ -552,6 +552,7 @@ class DefaultWalletManagersFacade(
|
||||||
blockchain = blockchain,
|
blockchain = blockchain,
|
||||||
derivationPath = derivationPath,
|
derivationPath = derivationPath,
|
||||||
)
|
)
|
||||||
|
val feePaidCurrency = blockchain.feePaidCurrency()
|
||||||
|
|
||||||
if (walletManager == null) {
|
if (walletManager == null) {
|
||||||
Timber.e("Unable to get a wallet manager for blockchain: $blockchain")
|
Timber.e("Unable to get a wallet manager for blockchain: $blockchain")
|
||||||
|
|
@ -560,6 +561,7 @@ class DefaultWalletManagersFacade(
|
||||||
|
|
||||||
val transactionDataConverter = TransactionDataToTxHistoryItemConverter(
|
val transactionDataConverter = TransactionDataToTxHistoryItemConverter(
|
||||||
walletAddresses = SdkAddressToAddressConverter.convertList(walletManager.wallet.addresses).toSet(),
|
walletAddresses = SdkAddressToAddressConverter.convertList(walletManager.wallet.addresses).toSet(),
|
||||||
|
feePaidCurrency = feePaidCurrency,
|
||||||
)
|
)
|
||||||
|
|
||||||
return walletManager.wallet.recentTransactions.mapNotNull(transactionDataConverter::convert)
|
return walletManager.wallet.recentTransactions.mapNotNull(transactionDataConverter::convert)
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
package com.tangem.domain.walletmanager.utils
|
package com.tangem.domain.walletmanager.utils
|
||||||
|
|
||||||
import com.tangem.blockchain.common.Amount
|
import com.tangem.blockchain.common.*
|
||||||
import com.tangem.blockchain.common.TransactionData
|
|
||||||
import com.tangem.blockchain.common.TransactionStatus
|
|
||||||
import com.tangem.domain.txhistory.models.TxHistoryItem
|
import com.tangem.domain.txhistory.models.TxHistoryItem
|
||||||
import com.tangem.domain.walletmanager.model.Address
|
import com.tangem.domain.walletmanager.model.Address
|
||||||
import com.tangem.utils.converter.Converter
|
import com.tangem.utils.converter.Converter
|
||||||
|
|
@ -18,6 +16,7 @@ import java.math.BigDecimal
|
||||||
*/
|
*/
|
||||||
internal class TransactionDataToTxHistoryItemConverter(
|
internal class TransactionDataToTxHistoryItemConverter(
|
||||||
private val walletAddresses: Set<Address>,
|
private val walletAddresses: Set<Address>,
|
||||||
|
private val feePaidCurrency: FeePaidCurrency,
|
||||||
) : Converter<TransactionData, TxHistoryItem?> {
|
) : Converter<TransactionData, TxHistoryItem?> {
|
||||||
|
|
||||||
override fun convert(value: TransactionData): TxHistoryItem? {
|
override fun convert(value: TransactionData): TxHistoryItem? {
|
||||||
|
|
@ -48,12 +47,30 @@ internal class TransactionDataToTxHistoryItemConverter(
|
||||||
|
|
||||||
private fun getTransactionAmountValue(amount: Amount, feeAmount: Amount?): BigDecimal? {
|
private fun getTransactionAmountValue(amount: Amount, feeAmount: Amount?): BigDecimal? {
|
||||||
val feeValue = feeAmount?.value ?: BigDecimal.ZERO
|
val feeValue = feeAmount?.value ?: BigDecimal.ZERO
|
||||||
val value = amount.value?.plus(feeValue)
|
val value = amount.value
|
||||||
|
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
Timber.w("Transaction amount must not be null: ${amount.currencySymbol}")
|
Timber.w("Transaction amount must not be null: ${amount.currencySymbol}")
|
||||||
}
|
}
|
||||||
|
|
||||||
return value
|
return when (feePaidCurrency) {
|
||||||
|
FeePaidCurrency.SameCurrency -> value?.plus(feeValue)
|
||||||
|
FeePaidCurrency.Coin -> {
|
||||||
|
if (amount.type is AmountType.Coin) value?.plus(feeValue) else value
|
||||||
|
}
|
||||||
|
is FeePaidCurrency.Token -> {
|
||||||
|
val token = (amount.type as? AmountType.Token)?.token ?: return value
|
||||||
|
if (isSameToken(token, feePaidCurrency.token)) {
|
||||||
|
value?.plus(feeValue)
|
||||||
|
} else {
|
||||||
|
value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun isSameToken(amountToken: Token, feeToken: Token): Boolean {
|
||||||
|
return amountToken.contractAddress.equals(feeToken.contractAddress, ignoreCase = true) &&
|
||||||
|
amountToken.symbol.equals(feeToken.symbol, ignoreCase = true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -15,24 +15,28 @@ internal class UpdateWalletManagerResultFactory {
|
||||||
fun getResult(walletManager: WalletManager): UpdateWalletManagerResult.Verified {
|
fun getResult(walletManager: WalletManager): UpdateWalletManagerResult.Verified {
|
||||||
val wallet = walletManager.wallet
|
val wallet = walletManager.wallet
|
||||||
val addresses = getAvailableAddresses(wallet.addresses)
|
val addresses = getAvailableAddresses(wallet.addresses)
|
||||||
|
val feePaidCurrency = wallet.blockchain.feePaidCurrency()
|
||||||
|
val txHistoryItemConverter = TransactionDataToTxHistoryItemConverter(addresses, feePaidCurrency)
|
||||||
|
|
||||||
return UpdateWalletManagerResult.Verified(
|
return UpdateWalletManagerResult.Verified(
|
||||||
selectedAddress = wallet.address,
|
selectedAddress = wallet.address,
|
||||||
addresses = addresses,
|
addresses = addresses,
|
||||||
currenciesAmounts = getTokensAmounts(wallet.amounts.values.toSet()),
|
currenciesAmounts = getTokensAmounts(wallet.amounts.values.toSet()),
|
||||||
currentTransactions = getCurrentTransactions(addresses, wallet.recentTransactions.toSet()),
|
currentTransactions = getCurrentTransactions(txHistoryItemConverter, wallet.recentTransactions.toSet()),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getDemoResult(walletManager: WalletManager, demoAmount: Amount): UpdateWalletManagerResult.Verified {
|
fun getDemoResult(walletManager: WalletManager, demoAmount: Amount): UpdateWalletManagerResult.Verified {
|
||||||
val wallet = walletManager.wallet
|
val wallet = walletManager.wallet
|
||||||
val addresses = getAvailableAddresses(wallet.addresses)
|
val addresses = getAvailableAddresses(wallet.addresses)
|
||||||
|
val feePaidCurrency = wallet.blockchain.feePaidCurrency()
|
||||||
|
val txHistoryItemConverter = TransactionDataToTxHistoryItemConverter(addresses, feePaidCurrency)
|
||||||
|
|
||||||
return UpdateWalletManagerResult.Verified(
|
return UpdateWalletManagerResult.Verified(
|
||||||
selectedAddress = wallet.address,
|
selectedAddress = wallet.address,
|
||||||
addresses = addresses,
|
addresses = addresses,
|
||||||
currenciesAmounts = getDemoTokensAmounts(demoAmount, walletManager.cardTokens),
|
currenciesAmounts = getDemoTokensAmounts(demoAmount, walletManager.cardTokens),
|
||||||
currentTransactions = getCurrentTransactions(addresses, wallet.recentTransactions.toSet()),
|
currentTransactions = getCurrentTransactions(txHistoryItemConverter, wallet.recentTransactions.toSet()),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -81,14 +85,19 @@ internal class UpdateWalletManagerResultFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getCurrentTransactions(
|
private fun getCurrentTransactions(
|
||||||
walletAddresses: Set<Address>,
|
txHistoryItemConverter: TransactionDataToTxHistoryItemConverter,
|
||||||
recentTransactions: Set<TransactionData>,
|
recentTransactions: Set<TransactionData>,
|
||||||
): Set<CryptoCurrencyTransaction> {
|
): Set<CryptoCurrencyTransaction> {
|
||||||
val unconfirmedTransactions = recentTransactions.filter {
|
val unconfirmedTransactions = recentTransactions.filter {
|
||||||
it.status == TransactionStatus.Unconfirmed
|
it.status == TransactionStatus.Unconfirmed
|
||||||
}
|
}
|
||||||
|
|
||||||
return unconfirmedTransactions.mapNotNullTo(hashSetOf()) { createCurrencyTransaction(walletAddresses, it) }
|
return unconfirmedTransactions.mapNotNullTo(hashSetOf()) {
|
||||||
|
createCurrencyTransaction(
|
||||||
|
txHistoryItemConverter = txHistoryItemConverter,
|
||||||
|
data = it,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createCurrencyAmount(amount: Amount): CryptoCurrencyAmount? {
|
private fun createCurrencyAmount(amount: Amount): CryptoCurrencyAmount? {
|
||||||
|
|
@ -106,10 +115,9 @@ internal class UpdateWalletManagerResultFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createCurrencyTransaction(
|
private fun createCurrencyTransaction(
|
||||||
walletAddresses: Set<Address>,
|
txHistoryItemConverter: TransactionDataToTxHistoryItemConverter,
|
||||||
data: TransactionData,
|
data: TransactionData,
|
||||||
): CryptoCurrencyTransaction? {
|
): CryptoCurrencyTransaction? {
|
||||||
val txHistoryItemConverter = TransactionDataToTxHistoryItemConverter(walletAddresses)
|
|
||||||
return when (val type = data.amount.type) {
|
return when (val type = data.amount.type) {
|
||||||
is AmountType.Coin -> {
|
is AmountType.Coin -> {
|
||||||
val txHistoryItem = txHistoryItemConverter.convert(data) ?: return null
|
val txHistoryItem = txHistoryItemConverter.convert(data) ?: return null
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue