Updated on 2026-08-14
This commit is contained in:
commit
841b332d88
1 changed files with 29 additions and 19 deletions
|
|
@ -1,6 +1,7 @@
|
|||
package com.tangem.features.details.utils
|
||||
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import arrow.core.Either
|
||||
import arrow.core.raise.Raise
|
||||
import arrow.core.raise.ensureNotNull
|
||||
import arrow.core.raise.fold
|
||||
|
|
@ -46,21 +47,31 @@ internal class UserWalletSaver @Inject constructor(
|
|||
private val router: Router,
|
||||
) {
|
||||
|
||||
suspend fun scanAndSaveUserWallet(scope: CoroutineScope) = recover(
|
||||
block = {
|
||||
val response = scanCard(scope) ?: return@recover
|
||||
val userWallet = createUserWallet(response)
|
||||
suspend fun scanAndSaveUserWallet(scope: CoroutineScope) {
|
||||
val response = scanCard(scope)
|
||||
response.fold(
|
||||
ifLeft = {
|
||||
val message = it.message
|
||||
|
||||
saveWallet(userWallet)
|
||||
},
|
||||
recover = { error ->
|
||||
val message = error.message
|
||||
if (!message.isNullOrEmpty()) {
|
||||
messageSender.send(SnackbarMessage(message))
|
||||
}
|
||||
},
|
||||
ifRight = { scanResponse ->
|
||||
recover(block = {
|
||||
scanResponse ?: return
|
||||
val userWallet = createUserWallet(scanResponse)
|
||||
saveWallet(userWallet)
|
||||
}, recover = {
|
||||
val message = it.message
|
||||
|
||||
if (!message.isNullOrEmpty()) {
|
||||
messageSender.send(SnackbarMessage(message))
|
||||
}
|
||||
},
|
||||
)
|
||||
if (!message.isNullOrEmpty()) {
|
||||
messageSender.send(SnackbarMessage(message))
|
||||
}
|
||||
},)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
private suspend fun Raise<Error>.saveWallet(userWallet: UserWallet) {
|
||||
fold(
|
||||
|
|
@ -109,7 +120,7 @@ internal class UserWalletSaver @Inject constructor(
|
|||
return ensureNotNull(userWallet) { Error.Unknown }
|
||||
}
|
||||
|
||||
private suspend fun Raise<Error>.scanCard(scope: CoroutineScope) = suspendCancellableCoroutine { continuation ->
|
||||
private suspend fun scanCard(scope: CoroutineScope) = suspendCancellableCoroutine { continuation ->
|
||||
scope.launch {
|
||||
scanCardProcessor.scan(
|
||||
analyticsSource = AnalyticsParam.ScreensSources.Settings,
|
||||
|
|
@ -117,14 +128,14 @@ internal class UserWalletSaver @Inject constructor(
|
|||
/* no-op */
|
||||
},
|
||||
disclaimerWillShow = {
|
||||
continuation.resume(null)
|
||||
continuation.resume(Either.Right(null))
|
||||
router.pop()
|
||||
},
|
||||
onSuccess = {
|
||||
continuation.resume(it)
|
||||
continuation.resume(Either.Right(it))
|
||||
},
|
||||
onCancel = {
|
||||
continuation.resume(null)
|
||||
continuation.resume(Either.Right(null))
|
||||
},
|
||||
onFailure = { tangemError ->
|
||||
val error = if (!tangemError.silent) {
|
||||
|
|
@ -136,8 +147,7 @@ internal class UserWalletSaver @Inject constructor(
|
|||
} else {
|
||||
Error.Silent
|
||||
}
|
||||
continuation.resume(null)
|
||||
raise(error)
|
||||
continuation.resume(Either.Left(error))
|
||||
},
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue