Skip to content

Commit d8f052d

Browse files
committed
fix: gift code flow amount display and confirmation
1 parent 1f2f730 commit d8f052d

4 files changed

Lines changed: 52 additions & 47 deletions

File tree

app/src/main/java/to/bitkit/repositories/BlocktankRepo.kt

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ class BlocktankRepo @Inject constructor(
445445

446446
if (maxInboundCapacity >= amount) {
447447
Logger.debug("Sufficient liquidity available, claiming with existing channel", context = TAG)
448-
Result.success(claimGiftCodeWithLiquidity(code))
448+
Result.success(claimGiftCodeWithLiquidity(code, amount))
449449
} else {
450450
Logger.debug("Insufficient liquidity, opening new channel", context = TAG)
451451
Result.success(claimGiftCodeWithoutLiquidity(code, amount))
@@ -456,7 +456,7 @@ class BlocktankRepo @Inject constructor(
456456
}
457457
}
458458

459-
private suspend fun claimGiftCodeWithLiquidity(code: String): GiftClaimResult {
459+
private suspend fun claimGiftCodeWithLiquidity(code: String, amount: ULong): GiftClaimResult {
460460
val invoice = lightningRepo.createInvoice(
461461
amountSats = null,
462462
description = "blocktank-gift-code:$code",
@@ -465,13 +465,18 @@ class BlocktankRepo @Inject constructor(
465465

466466
Logger.debug("Created invoice for gift code, requesting payment from LSP", context = TAG)
467467

468-
val result = ServiceQueue.CORE.background {
468+
val giftResponse = ServiceQueue.CORE.background {
469469
giftPay(invoice = invoice)
470470
}
471471

472-
Logger.debug("Gift payment request completed: $result", context = TAG)
472+
Logger.debug("Gift payment request completed: id=${giftResponse.id}", context = TAG)
473473

474-
return GiftClaimResult.SuccessWithLiquidity
474+
return GiftClaimResult.SuccessWithLiquidity(
475+
paymentHashOrTxId = giftResponse.bolt11PaymentId ?: giftResponse.id,
476+
sats = amount.toLong(),
477+
invoice = invoice,
478+
code = code,
479+
)
475480
}
476481

477482
private suspend fun claimGiftCodeWithoutLiquidity(code: String, amount: ULong): GiftClaimResult {
@@ -520,11 +525,22 @@ data class BlocktankState(
520525
)
521526

522527
sealed class GiftClaimResult {
523-
object SuccessWithLiquidity : GiftClaimResult()
528+
abstract val paymentHashOrTxId: String
529+
abstract val sats: Long
530+
abstract val invoice: String
531+
abstract val code: String
532+
533+
data class SuccessWithLiquidity(
534+
override val paymentHashOrTxId: String,
535+
override val sats: Long,
536+
override val invoice: String,
537+
override val code: String,
538+
) : GiftClaimResult()
539+
524540
data class SuccessWithoutLiquidity(
525-
val paymentHashOrTxId: String,
526-
val sats: Long,
527-
val invoice: String,
528-
val code: String,
541+
override val paymentHashOrTxId: String,
542+
override val sats: Long,
543+
override val invoice: String,
544+
override val code: String,
529545
) : GiftClaimResult()
530546
}

app/src/main/java/to/bitkit/ui/sheets/GiftLoading.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,8 @@ import to.bitkit.ui.shared.util.gradientBackground
3434
import to.bitkit.ui.theme.Colors
3535

3636
@Composable
37-
fun GiftLoading(
38-
viewModel: GiftViewModel,
39-
) {
40-
Content(
41-
amount = viewModel.amount,
42-
)
37+
fun GiftLoading(amount: ULong) {
38+
Content(amount = amount)
4339
}
4440

4541
@Composable

app/src/main/java/to/bitkit/ui/sheets/GiftSheet.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,7 @@ fun GiftSheet(
6565
startDestination = GiftRoute.Loading,
6666
) {
6767
composableWithDefaultTransitions<GiftRoute.Loading> {
68-
GiftLoading(
69-
viewModel = viewModel,
70-
)
68+
GiftLoading(amount = sheet.amount)
7169
}
7270
composableWithDefaultTransitions<GiftRoute.Used> {
7371
GiftErrorSheet(

app/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import to.bitkit.models.NewTransactionSheetDirection
2020
import to.bitkit.models.NewTransactionSheetType
2121
import to.bitkit.repositories.ActivityRepo
2222
import to.bitkit.repositories.BlocktankRepo
23-
import to.bitkit.repositories.GiftClaimResult
2423
import to.bitkit.utils.Logger
2524
import javax.inject.Inject
2625
import kotlin.time.Duration.Companion.milliseconds
@@ -72,46 +71,42 @@ class GiftViewModel @Inject constructor(
7271
amount = amount,
7372
waitTimeout = NODE_STARTUP_TIMEOUT_MS.milliseconds,
7473
).fold(
75-
onSuccess = { result ->
76-
Logger.debug("Gift claim successful: $result", context = TAG)
77-
when (result) {
78-
is GiftClaimResult.SuccessWithLiquidity -> {
79-
_navigationEvent.emit(GiftRoute.Success)
80-
}
81-
is GiftClaimResult.SuccessWithoutLiquidity -> {
82-
insertGiftActivity(result)
83-
_successEvent.emit(
84-
NewTransactionSheetDetails(
85-
type = NewTransactionSheetType.LIGHTNING,
86-
direction = NewTransactionSheetDirection.RECEIVED,
87-
paymentHashOrTxId = result.paymentHashOrTxId,
88-
sats = result.sats,
89-
)
90-
)
91-
_navigationEvent.emit(GiftRoute.Success)
92-
}
93-
}
74+
onSuccess = {
75+
Logger.debug("Gift claim successful: $it", context = TAG)
76+
insertGiftActivity(it.paymentHashOrTxId, it.sats, it.invoice, it.code)
77+
_successEvent.emit(
78+
NewTransactionSheetDetails(
79+
type = NewTransactionSheetType.LIGHTNING,
80+
direction = NewTransactionSheetDirection.RECEIVED,
81+
paymentHashOrTxId = it.paymentHashOrTxId,
82+
sats = it.sats,
83+
)
84+
)
85+
_navigationEvent.emit(GiftRoute.Success)
9486
},
95-
onFailure = { error ->
96-
handleGiftClaimError(error)
97-
}
87+
onFailure = { handleGiftClaimError(it) },
9888
)
9989
} finally {
10090
isClaiming = false
10191
}
10292
}
10393

104-
private suspend fun insertGiftActivity(result: GiftClaimResult.SuccessWithoutLiquidity) {
94+
private suspend fun insertGiftActivity(
95+
paymentHashOrTxId: String,
96+
sats: Long,
97+
invoice: String,
98+
code: String,
99+
) {
105100
val nowTimestamp = nowTimestamp().epochSecond.toULong()
106101

107102
val lightningActivity = LightningActivity.create(
108-
id = result.paymentHashOrTxId,
103+
id = paymentHashOrTxId,
109104
txType = PaymentType.RECEIVED,
110105
status = PaymentState.SUCCEEDED,
111-
value = result.sats.toULong(),
112-
invoice = result.invoice,
106+
value = sats.toULong(),
107+
invoice = invoice,
113108
timestamp = nowTimestamp,
114-
message = result.code,
109+
message = code,
115110
)
116111

117112
activityRepo.insertActivity(Activity.Lightning(lightningActivity)).getOrThrow()

0 commit comments

Comments
 (0)