commit 339e72113f8c2829125b095e58ca7e33d7265d44
parent 3ff8de2783d2d9eb9240bed3fdd3af2fa3cf2a02
Author: Marc Stibane <marc@taler.net>
Date: Wed, 31 Jul 2024 09:33:58 +0200
Fee
Diffstat:
1 file changed, 25 insertions(+), 32 deletions(-)
diff --git a/TalerWallet1/Views/Peer2peer/SendAmount.swift b/TalerWallet1/Views/Peer2peer/SendAmount.swift
@@ -48,13 +48,10 @@ struct SendAmount: View {
: EMPTYSTRING
}
- private func fee(ppCheck: CheckPeerPushDebitResponse?) -> Amount? {
- do {
- if let ppCheck {
- // Outgoing: fee = effective - raw
- let fee = try ppCheck.amountEffective - ppCheck.amountRaw
- return fee
- }
+ private func fee(raw: Amount, effective: Amount) -> Amount? {
+ do { // Outgoing: fee = effective - raw
+ let fee = try effective - raw
+ return fee
} catch {}
return nil
}
@@ -70,38 +67,34 @@ struct SendAmount: View {
}
private func computeFeeSend(_ amount: Amount) async -> ComputeFeeResult? {
- if exchange == nil {
- if let url = currencyInfo.scope.url {
- exchange = try? await model.getExchangeByUrl(url: url)
- }
+ if amount.isZero {
+ return ComputeFeeResult.zero()
}
- do {
- insufficient = try amount > amountAvailable
- } catch {
- print("Yikes❗️ insufficient failed❗️")
- insufficient = true
+ let insufficient = (try? amount > amountAvailable) ?? true
+ if insufficient {
+ return ComputeFeeResult.insufficient()
}
+ do {
+ let ppCheck = try await model.checkPeerPushDebitM(amount, cancellationId: "cancel", viewHandles: true)
+ let raw = ppCheck.amountRaw
+ let effective = ppCheck.amountEffective
+ if let fee = fee(raw: raw, effective: effective) {
+ feeStr = fee.formatted(currencyInfo, isNegative: false)
+ symLog.log("Fee = \(feeStr)")
+ let insufficient = (try? effective > amountAvailable) ?? true
- if insufficient {
-// announce("\(amountVoiceOver), \(insufficientLabel2)")
- } else if amount.isZero {
- feeStr = EMPTYSTRING
- } else {
- if let ppCheck = try? await model.checkPeerPushDebitM(amountToTransfer) {
- // TODO: set from exchange
-// agePicker.setAges(ages: peerPushCheck?.ageRestrictionOptions)
- if let feeAmount = fee(ppCheck: ppCheck) {
- feeStr = feeAmount.formatted(currencyInfo, isNegative: false)
- let feeLabel = feeLabel(feeStr)
-// announce("\(amountVoiceOver), \(feeLabel)")
- } else {
- feeStr = EMPTYSTRING
-// announce(amountVoiceOver)
- }
peerPushCheck = ppCheck
+ let feeLabel = feeLabel(feeStr)
+// announce("\(amountVoiceOver), \(feeLabel)")
+ return ComputeFeeResult(insufficient: insufficient, feeAmount: fee,
+ feeStr: feeLabel, numCoins: nil)
} else {
peerPushCheck = nil
}
+ } catch {
+ // handle cancel, errors
+ symLog.log("❗️ \(error)")
+
}
return nil
}