Skip to content

Commit bda2ebf

Browse files
committed
issue-183
1 parent c255bcb commit bda2ebf

1 file changed

Lines changed: 36 additions & 3 deletions

File tree

LDKNodeMonday/View Model/Home/Send/SendViewModel.swift

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ class SendViewModel: ObservableObject {
2020
@Published var sendError: MondayError?
2121
var price: Double
2222
@Published var balances: BalanceDetails
23+
@Published var paymentSendState: PaymentSendState = .pending
24+
private var sentPaymentId: String?
2325

2426
init(
2527
lightningClient: LightningNodeClient,
@@ -31,14 +33,39 @@ class SendViewModel: ObservableObject {
3133
self.sendViewState = sendViewState
3234
self.price = price
3335
self.balances = balances
36+
NotificationCenter.default.addObserver(
37+
self,
38+
selector: #selector(handleLdkEvent(_:)),
39+
name: .ldkEventReceived,
40+
object: nil
41+
)
42+
}
43+
44+
@objc private func handleLdkEvent(_ notification: Notification) {
45+
guard let event = notification.object as? Event else { return }
46+
guard let paymentId = sentPaymentId else { return }
47+
switch event {
48+
case .paymentSuccessful(_, let paymentHash, _, _):
49+
if paymentHash == paymentId {
50+
paymentSendState = .succeeded
51+
}
52+
case .paymentFailed(_, let paymentHash, _):
53+
if let hash = paymentHash, hash == paymentId {
54+
paymentSendState = .failed
55+
}
56+
default:
57+
break
58+
}
3459
}
3560

3661
func send() async throws {
3762
do {
63+
var paymentId: String? = nil
3864
switch paymentAddress?.type {
3965
case .bip21:
4066
let uriString = paymentAddress?.address ?? ""
41-
_ = try await lightningClient.send(uriString)
67+
let result = try await lightningClient.send(uriString)
68+
if let id = (result as? QrPaymentResult)?.id { paymentId = id }
4269
case .onchain:
4370
let uriString = unifiedQRString(
4471
onchainAddress: paymentAddress?.address ?? "",
@@ -47,12 +74,14 @@ class SendViewModel: ObservableObject {
4774
bolt11: nil,
4875
bolt12: nil
4976
)
50-
_ = try await lightningClient.send(uriString)
77+
let result = try await lightningClient.send(uriString)
78+
if let id = (result as? QrPaymentResult)?.id { paymentId = id }
5179
case .bolt11:
52-
_ = try await lightningClient.sendBolt11Payment(
80+
let result = try await lightningClient.sendBolt11Payment(
5381
Bolt11Invoice(paymentAddress?.address ?? ""),
5482
nil
5583
)
84+
paymentId = result.value
5685
default:
5786
debugPrint("Unhandled paymentAddress type")
5887
DispatchQueue.main.async {
@@ -62,6 +91,10 @@ class SendViewModel: ObservableObject {
6291
)
6392
}
6493
}
94+
if let paymentId = paymentId {
95+
self.sentPaymentId = paymentId
96+
self.paymentSendState = .pending
97+
}
6598
} catch let error as NodeError {
6699
NotificationCenter.default.post(name: .ldkErrorReceived, object: error)
67100
let errorString = handleNodeError(error)

0 commit comments

Comments
 (0)