fix: consolidate wallet setup saves into a single signer call

All three saves (zap settings, lightning address, payment targets) now
run sequentially inside one accountViewModel.launchSigner block,
so the signer is only invoked once per save instead of three times.

- Extract sendPostSuspend() from UpdateZapAmountViewModel.sendPost()
- Extract saveLnAddressSuspend() from WalletViewModel.saveLnAddress()
- Extract savePaymentTargetsSuspend() from PaymentTargetsViewModel.savePaymentTargets()
- NIP47SetupScreen.onPost calls all three suspend fns in one launchSigner

https://claude.ai/code/session_017NPhwCnSzCuMn9sTX3ca37
This commit is contained in:
Claude
2026-04-08 18:43:31 +00:00
parent 144b82dbe3
commit f550a5f426
4 changed files with 27 additions and 9 deletions
@@ -79,9 +79,15 @@ class PaymentTargetsViewModel : ViewModel() {
fun savePaymentTargets() { fun savePaymentTargets() {
if (isModified) { if (isModified) {
accountViewModel.launchSigner { accountViewModel.launchSigner {
account.savePaymentTargets(_paymentTargets.value) savePaymentTargetsSuspend()
refresh()
} }
} }
} }
suspend fun savePaymentTargetsSuspend() {
if (isModified) {
account.savePaymentTargets(_paymentTargets.value)
refresh()
}
}
} }
@@ -84,6 +84,12 @@ class UpdateZapAmountViewModel : ViewModel() {
} }
fun sendPost() { fun sendPost() {
accountViewModel.launchSigner {
sendPostSuspend()
}
}
suspend fun sendPostSuspend() {
val nip47Update = val nip47Update =
if (walletConnectRelay.text.isNotBlank() && walletConnectPubkey.text.isNotBlank()) { if (walletConnectRelay.text.isNotBlank() && walletConnectPubkey.text.isNotBlank()) {
val pubkeyHex = val pubkeyHex =
@@ -110,7 +116,7 @@ class UpdateZapAmountViewModel : ViewModel() {
null null
} }
accountViewModel.updateZapAmounts(amountSet, selectedZapType, nip47Update) accountViewModel.account.updateZapAmounts(amountSet, selectedZapType, nip47Update)
nextAmount = TextFieldValue("") nextAmount = TextFieldValue("")
} }
@@ -105,9 +105,11 @@ fun NIP47SetupScreen(
nav.popBack() nav.popBack()
}, },
onPost = { onPost = {
postViewModel.sendPost() accountViewModel.launchSigner {
walletViewModel.saveLnAddress() postViewModel.sendPostSuspend()
paymentTargetsViewModel.savePaymentTargets() walletViewModel.saveLnAddressSuspend()
paymentTargetsViewModel.savePaymentTargetsSuspend()
}
nav.popBack() nav.popBack()
}, },
) )
@@ -171,13 +171,17 @@ class WalletViewModel : ViewModel() {
fun saveLnAddress() { fun saveLnAddress() {
val accountVm = accountViewModel ?: return val accountVm = accountViewModel ?: return
val acc = account ?: return
accountVm.launchSigner { accountVm.launchSigner {
val event = acc.userMetadata.sendNewUserMetadata(lnAddress = _lnAddress.value) saveLnAddressSuspend()
acc.sendLiterallyEverywhere(event)
} }
} }
suspend fun saveLnAddressSuspend() {
val acc = account ?: return
val event = acc.userMetadata.sendNewUserMetadata(lnAddress = _lnAddress.value)
acc.sendLiterallyEverywhere(event)
}
fun fetchBalance() { fun fetchBalance() {
val acc = account ?: return val acc = account ?: return
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {