Updated on 2026-08-14
This commit is contained in:
parent
4f47d876ed
commit
e125eff471
40 changed files with 251 additions and 119 deletions
|
|
@ -10,7 +10,6 @@ import com.tangem.domain.models.scan.ScanResponse
|
|||
*
|
||||
* @property name User wallet name
|
||||
* @property walletId User wallet [UserWalletId]
|
||||
* @property artworkUrl User wallet card artwork URL
|
||||
* @property cardsInWallet List of cards IDs assigned with this user's wallet. The list will be empty if the wallet
|
||||
* has been backed up on another device.
|
||||
* @property isMultiCurrency Indicates whether this user wallet can work with more than one currency
|
||||
|
|
@ -22,8 +21,6 @@ data class UserWallet(
|
|||
val name: String,
|
||||
@Json(name = "walletId")
|
||||
val walletId: UserWalletId,
|
||||
@Json(name = "artworkUrl")
|
||||
val artworkUrl: String,
|
||||
@Json(name = "cardsInWallet")
|
||||
val cardsInWallet: Set<String>,
|
||||
@Json(name = "isMultiCurrency")
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import com.tangem.domain.models.scan.CardDTO
|
|||
import com.tangem.domain.models.scan.ScanResponse
|
||||
import com.tangem.domain.wallets.models.UserWallet
|
||||
import com.tangem.domain.wallets.usecase.GenerateWalletNameUseCase
|
||||
import com.tangem.domain.wallets.usecase.GetCardImageUseCase
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
|
|
@ -13,7 +12,6 @@ import dagger.assisted.AssistedInject
|
|||
class UserWalletBuilder @AssistedInject constructor(
|
||||
@Assisted private val scanResponse: ScanResponse,
|
||||
private val generateWalletNameUseCase: GenerateWalletNameUseCase,
|
||||
private val getCardImageUseCase: GetCardImageUseCase,
|
||||
) {
|
||||
private var backupCardsIds: Set<String> = emptySet()
|
||||
private var hasBackupError: Boolean = false
|
||||
|
|
@ -38,7 +36,7 @@ class UserWalletBuilder @AssistedInject constructor(
|
|||
this.hasBackupError = hasBackupError
|
||||
}
|
||||
|
||||
suspend fun build(): UserWallet? {
|
||||
fun build(): UserWallet? {
|
||||
return with(scanResponse) {
|
||||
UserWalletIdBuilder.scanResponse(scanResponse)
|
||||
.build()
|
||||
|
|
@ -50,7 +48,6 @@ class UserWalletBuilder @AssistedInject constructor(
|
|||
isBackupNotAllowed = card.isBackupNotAllowed,
|
||||
isStartToCoin = cardTypesResolver.isStart2Coin(),
|
||||
),
|
||||
artworkUrl = getCardImageUseCase.invoke(card.cardId, card.cardPublicKey),
|
||||
cardsInWallet = backupCardsIds.plus(card.cardId),
|
||||
scanResponse = this,
|
||||
isMultiCurrency = cardTypesResolver.isMultiwalletAllowed(),
|
||||
|
|
|
|||
|
|
@ -4,8 +4,12 @@ import com.tangem.common.extensions.toHexString
|
|||
import com.tangem.common.services.Result
|
||||
import com.tangem.domain.common.TwinCardNumber
|
||||
import com.tangem.domain.common.TwinsHelper
|
||||
import com.tangem.domain.models.ArtworkModel
|
||||
import com.tangem.domain.wallets.models.Artwork
|
||||
import com.tangem.operations.attestation.ArtworkSize
|
||||
import com.tangem.operations.attestation.CardArtworksProvider
|
||||
import com.tangem.operations.attestation.OnlineCardVerifier
|
||||
import com.tangem.sdk.api.featuretoggles.CardSdkFeatureToggles
|
||||
|
||||
/**
|
||||
* Use case for getting card image url
|
||||
|
|
@ -14,7 +18,11 @@ import com.tangem.operations.attestation.OnlineCardVerifier
|
|||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
class GetCardImageUseCase(private val verifier: OnlineCardVerifier) {
|
||||
class GetCardImageUseCase(
|
||||
private val verifier: OnlineCardVerifier,
|
||||
private val cardArtworksProvider: CardArtworksProvider,
|
||||
private val cardSdkFeatureToggles: CardSdkFeatureToggles,
|
||||
) {
|
||||
|
||||
/**
|
||||
* Get card image url
|
||||
|
|
@ -22,14 +30,30 @@ class GetCardImageUseCase(private val verifier: OnlineCardVerifier) {
|
|||
* @param cardId card id
|
||||
* @param cardPublicKey card public key
|
||||
*/
|
||||
suspend operator fun invoke(cardId: String, cardPublicKey: ByteArray): String {
|
||||
suspend operator fun invoke(cardId: String, cardPublicKey: ByteArray, size: ArtworkSize): ArtworkModel {
|
||||
return if (cardSdkFeatureToggles.isNewArtworkLoadingEnabled) {
|
||||
val result = cardArtworksProvider.getArtwork(
|
||||
cardId = cardId,
|
||||
cardPublicKey = cardPublicKey,
|
||||
size = size,
|
||||
)
|
||||
when (result) {
|
||||
is Result.Failure -> ArtworkModel(null, getFallbackArtworkUrl(cardId))
|
||||
is Result.Success -> ArtworkModel(result.data, getFallbackArtworkUrl(cardId))
|
||||
}
|
||||
} else {
|
||||
ArtworkModel(null, getLegacyArtwork(cardId, cardPublicKey))
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun getLegacyArtwork(cardId: String, cardPublicKey: ByteArray): String {
|
||||
return when (val result = verifier.getCardInfo(cardId, cardPublicKey)) {
|
||||
is Result.Success -> {
|
||||
val artworkId = result.data.artwork?.id
|
||||
if (artworkId.isNullOrEmpty()) {
|
||||
getFallbackArtworkUrl(cardId)
|
||||
} else {
|
||||
OnlineCardVerifier.getUrlForArtwork(
|
||||
CardArtworksProvider.getUrlForArtwork(
|
||||
cardId = cardId,
|
||||
cardPublicKey = cardPublicKey.toHexString(),
|
||||
artworkId = artworkId,
|
||||
|
|
@ -41,8 +65,6 @@ class GetCardImageUseCase(private val verifier: OnlineCardVerifier) {
|
|||
}
|
||||
}
|
||||
|
||||
fun getDefaultFallbackUrl(): String = Artwork.DEFAULT_IMG_URL
|
||||
|
||||
private fun getFallbackArtworkUrl(cardId: String): String {
|
||||
return when {
|
||||
cardId.startsWith(Artwork.SERGIO_CARD_ID) -> Artwork.SERGIO_CARD_URL
|
||||
|
|
@ -50,7 +72,7 @@ class GetCardImageUseCase(private val verifier: OnlineCardVerifier) {
|
|||
else -> when (TwinsHelper.getTwinCardNumber(cardId)) {
|
||||
TwinCardNumber.First -> Artwork.TWIN_CARD_1_URL
|
||||
TwinCardNumber.Second -> Artwork.TWIN_CARD_2_URL
|
||||
else -> getDefaultFallbackUrl()
|
||||
else -> Artwork.DEFAULT_IMG_URL
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue