taler-ios

iOS apps for GNU Taler (wallet)
Log | Files | Refs | README | LICENSE

commit dac14b7dbbc3abe6f975192b05e7661c6f8058eb
parent dff2354f5ae9782e847f34804bf560a4dfbd85ad
Author: Marc Stibane <marc@taler.net>
Date:   Fri,  2 Aug 2024 17:30:01 +0200

Compute fees

Diffstat:
MTalerWallet1/Views/Peer2peer/RequestPayment.swift | 40++++++++++++++++++++++++++++++++++------
1 file changed, 34 insertions(+), 6 deletions(-)

diff --git a/TalerWallet1/Views/Peer2peer/RequestPayment.swift b/TalerWallet1/Views/Peer2peer/RequestPayment.swift @@ -24,6 +24,7 @@ struct RequestPayment: View { @State private var peerPullCheck: CheckPeerPullCreditResponse? = nil @State private var expireDays: UInt = 0 // @State private var feeAmount: Amount? = nil + @State private var feeStr: String = EMPTYSTRING @State private var buttonSelected = false @State private var shortcutSelected = false @State private var amountShortcut = Amount.zero(currency: EMPTYSTRING) // Update currency when used @@ -35,6 +36,19 @@ struct RequestPayment: View { } private func buttonAction() { buttonSelected = true } + private func feeLabel(_ feeString: String) -> String { + feeString.count > 0 ? String(localized: "- \(feeString) fee") + : EMPTYSTRING + } + + private func fee(raw: Amount, effective: Amount) -> Amount? { + do { // Incoming: fee = raw - effective + let fee = try raw - effective + return fee + } catch {} + return nil + } + private func feeIsNotZero() -> Bool? { if let hasNoFees = exchange?.noFees { if hasNoFees { @@ -51,13 +65,28 @@ struct RequestPayment: View { } } if amount.isZero { -// fee = EMPTYSTRING - } else { + return ComputeFeeResult.zero() + } + do { let baseURL = exchange?.exchangeBaseUrl - peerPullCheck = try? await model.checkPeerPullCreditM(baseURL, amount: amount, - cancellationId: "cancel") + let ppCheck = try await model.checkPeerPullCreditM(baseURL, amount: amount) + let raw = ppCheck.amountRaw + let effective = ppCheck.amountEffective + if let fee = fee(raw: raw, effective: effective) { + feeStr = fee.formatted(currencyInfo, isNegative: true) + symLog.log("Fee = \(feeStr)") -// return ComputeFeeResult(insufficient: false, feeStr: feeLabel(feeStr), numCoins: details.numCoins) + peerPullCheck = ppCheck + return ComputeFeeResult(insufficient: false, + feeAmount: fee, + feeStr: feeLabel(feeStr), + numCoins: ppCheck.numCoins) + } else { + peerPullCheck = nil + } + } catch { + // handle cancel, errors + symLog.log("❗️ \(error)") } return nil } @@ -99,7 +128,6 @@ struct RequestPayment: View { summary: $summary, expireDays: $expireDays) } - let disabled = amountToTransfer.isZero || coinData.invalid || coinData.tooMany ScrollView { let amountLabel = minimalistic ? String(localized: "Amount:")