commit 5abe4b8a7a285031c3bdcdf8a8dc39ede3eb5f43
parent ac73a86a366b382e1b54ef300c0a005fdad67f32
Author: Marc Stibane <marc@taler.net>
Date: Wed, 17 Jul 2024 08:38:54 +0200
CheckDeposit with cancellation
Diffstat:
2 files changed, 29 insertions(+), 27 deletions(-)
diff --git a/TalerWallet1/Model/Model+Deposit.swift b/TalerWallet1/Model/Model+Deposit.swift
@@ -1,7 +1,10 @@
/*
- * This file is part of GNU Taler, ©2022-23 Taler Systems S.A.
+ * This file is part of GNU Taler, ©2022-24 Taler Systems S.A.
* See LICENSE.md
*/
+/**
+ * @author Marc Stibane
+ */
import Foundation
import taler_swift
import AnyCodable
@@ -9,7 +12,6 @@ import AnyCodable
fileprivate let ASYNCDELAY: UInt = 0 //set e.g to 6 or 9 seconds for debugging
// MARK: - IBAN
-/// The result from PrepareDeposit
struct ValidateIbanResult: Codable {
let valid: Bool
}
@@ -31,28 +33,27 @@ struct DepositFees: Codable {
let wire: Amount
let refresh: Amount
}
-
-/// The result from PrepareDeposit
-struct PrepareDepositResult: Codable {
+struct CheckDepositResult: Codable {
let totalDepositCost: Amount
let effectiveDepositAmount: Amount
let fees: DepositFees
}
/// A request to get an exchange's deposit contract terms.
-fileprivate struct PrepareDeposit: WalletBackendFormattedRequest {
- typealias Response = PrepareDepositResult
- func operation() -> String { "prepareDeposit" }
- func args() -> Args { Args(depositPaytoUri: depositPaytoUri, amount: amount) }
+fileprivate struct CheckDeposit: WalletBackendFormattedRequest {
+ typealias Response = CheckDepositResult
+ func operation() -> String { "checkDeposit" }
+ func args() -> Args { Args(depositPaytoUri: depositPaytoUri, amount: amount, clientCancellationId: cancellationId) }
var depositPaytoUri: String
var amount: Amount
+ var cancellationId: String?
struct Args: Encodable {
var depositPaytoUri: String
var amount: Amount
+ var clientCancellationId: String?
}
}
// MARK: -
-/// The result from CreateDepositGroup
struct DepositGroupResult: Decodable {
var depositGroupId: String
var transactionId: String
@@ -72,26 +73,27 @@ fileprivate struct CreateDepositGroup: WalletBackendFormattedRequest {
}
// MARK: -
extension WalletModel {
- /// validate IBAN
- @MainActor
- func validateIbanM(_ iban: String, viewHandles: Bool = false) // M for MainActor
+ /// validate IBAN. No Networking
+ @MainActor // M for MainActor
+ func validateIbanM(_ iban: String, viewHandles: Bool = false)
async throws -> Bool {
let request = ValidateIban(iban: iban)
let response = try await sendRequest(request, ASYNCDELAY, viewHandles: viewHandles)
return response.valid
}
- /// deposit coins. Networking involved
- @MainActor
- func prepareDepositM(_ depositPaytoUri: String, amount: Amount, viewHandles: Bool = false) // M for MainActor
- async throws -> PrepareDepositResult {
- let request = PrepareDeposit(depositPaytoUri: depositPaytoUri, amount: amount)
+ /// check fees for deposit. No Networking
+ @MainActor // M for MainActor
+ func checkDepositM(_ depositPaytoUri: String, amount: Amount, cancellationId: String? = nil, viewHandles: Bool = false)
+ async throws -> CheckDepositResult {
+ let request = CheckDeposit(depositPaytoUri: depositPaytoUri, amount: amount, cancellationId: cancellationId)
let response = try await sendRequest(request, ASYNCDELAY, viewHandles: viewHandles)
return response
}
- @MainActor
- func createDepositGroupM(_ depositPaytoUri: String, amount: Amount, viewHandles: Bool = false) // M for MainActor
+ /// deposit coins. Networking involved
+ @MainActor // M for MainActor
+ func createDepositGroupM(_ depositPaytoUri: String, amount: Amount, viewHandles: Bool = false)
async throws -> DepositGroupResult {
let request = CreateDepositGroup(depositPaytoUri: depositPaytoUri, amount: amount)
let response = try await sendRequest(request, ASYNCDELAY, viewHandles: viewHandles)
diff --git a/TalerWallet1/Views/Banking/DepositAmountV.swift b/TalerWallet1/Views/Banking/DepositAmountV.swift
@@ -28,7 +28,7 @@ struct DepositAmountV: View {
@Environment(\.colorSchemeContrast) private var colorSchemeContrast
@AppStorage("minimalistic") var minimalistic: Bool = false
- @State var prepareDepositResult: PrepareDepositResult? = nil
+ @State var checkDepositResult: CheckDepositResult? = nil
@State private var insufficient = false
@State private var feeAmount: Amount? = nil
@State private var feeStr: String = EMPTYSTRING
@@ -36,7 +36,7 @@ struct DepositAmountV: View {
@State private var amountShortcut = Amount.zero(currency: EMPTYSTRING) // Update currency when used
@State private var exchange: Exchange? = nil // wg. noFees
- private func fee(ppCheck: PrepareDepositResult?) -> Amount? {
+ private func fee(ppCheck: CheckDepositResult?) -> Amount? {
do {
if let ppCheck {
// Outgoing: fee = effective - raw
@@ -54,7 +54,7 @@ struct DepositAmountV: View {
return nil // this exchange never has fees
}
}
- return prepareDepositResult != nil ? (!(feeAmount?.isZero ?? false))
+ return checkDepositResult != nil ? (!(feeAmount?.isZero ?? false))
: false
}
@@ -165,9 +165,9 @@ struct DepositAmountV: View {
if !insufficient {
if amountToTransfer.isZero {
feeStr = EMPTYSTRING
- prepareDepositResult = nil
+ checkDepositResult = nil
} else if let paytoUri {
- if let ppCheck = try? await model.prepareDepositM(paytoUri, amount: amountToTransfer) {
+ if let ppCheck = try? await model.checkDepositM(paytoUri, amount: amountToTransfer) {
if let feeAmount = fee(ppCheck: ppCheck) {
feeStr = feeAmount.formatted(currencyInfo, isNegative: false)
let feeLabel = feeLabel(feeStr)
@@ -176,9 +176,9 @@ struct DepositAmountV: View {
feeStr = EMPTYSTRING
announce(amountVoiceOver)
}
- prepareDepositResult = ppCheck
+ checkDepositResult = ppCheck
} else {
- prepareDepositResult = nil
+ checkDepositResult = nil
}
}
}