taler-ios

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

commit 204941cb81b850f54de16357efe12e9bb21fd4cf
parent 5abe4b8a7a285031c3bdcdf8a8dc39ede3eb5f43
Author: Marc Stibane <marc@taler.net>
Date:   Wed, 17 Jul 2024 08:47:25 +0200

CheckPeerPushDebit with cancellation

Diffstat:
MTalerWallet1/Model/Model+P2P.swift | 37++++++++++++++++++++++++-------------
MTalerWallet1/Views/Peer2peer/RequestPayment.swift | 5++++-
2 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/TalerWallet1/Model/Model+P2P.swift b/TalerWallet1/Model/Model+P2P.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 @@ -31,8 +34,8 @@ fileprivate struct GetMaxPeerPushAmount: WalletBackendFormattedRequest { } } extension WalletModel { - @MainActor - func getMaxPeerPushAmountM(_ currency: String, viewHandles: Bool = false) // M for MainActor + @MainActor // M for MainActor + func getMaxPeerPushAmountM(_ currency: String, viewHandles: Bool = false) async throws -> AmountResponse { let request = GetMaxPeerPushAmount(currency: currency) let response = try await sendRequest(request, ASYNCDELAY, viewHandles: viewHandles) @@ -49,18 +52,20 @@ struct CheckPeerPushDebitResponse: Codable { fileprivate struct CheckPeerPushDebit: WalletBackendFormattedRequest { typealias Response = CheckPeerPushDebitResponse func operation() -> String { "checkPeerPushDebit" } - func args() -> Args { Args(amount: amount) } + func args() -> Args { Args(amount: amount, clientCancellationId: cancellationId) } var amount: Amount + var cancellationId: String? struct Args: Encodable { var amount: Amount + var clientCancellationId: String? } } extension WalletModel { - @MainActor - func checkPeerPushDebitM(_ amount: Amount, viewHandles: Bool = false) // M for MainActor + @MainActor // M for MainActor + func checkPeerPushDebitM(_ amount: Amount, cancellationId: String? = nil, viewHandles: Bool = false) async throws -> CheckPeerPushDebitResponse { - let request = CheckPeerPushDebit(amount: amount) + let request = CheckPeerPushDebit(amount: amount, cancellationId: cancellationId) let response = try await sendRequest(request, ASYNCDELAY, viewHandles: viewHandles) return response } @@ -89,8 +94,8 @@ fileprivate struct InitiatePeerPushDebit: WalletBackendFormattedRequest { } } extension WalletModel { - @MainActor - func initiatePeerPushDebitM(_ baseURL: String?, terms: PeerContractTerms, viewHandles: Bool = false) // M for MainActor + @MainActor // M for MainActor + func initiatePeerPushDebitM(_ baseURL: String?, terms: PeerContractTerms, viewHandles: Bool = false) async throws -> InitiatePeerPushDebitResponse { let request = InitiatePeerPushDebit(exchangeBaseUrl: baseURL, partialContractTerms: terms) @@ -110,22 +115,28 @@ struct CheckPeerPullCreditResponse: Codable { fileprivate struct CheckPeerPullCredit: WalletBackendFormattedRequest { typealias Response = CheckPeerPullCreditResponse func operation() -> String { "checkPeerPullCredit" } - func args() -> Args { Args(exchangeBaseUrl: exchangeBaseUrl, scopeInfo: scopeInfo, amount: amount) } + func args() -> Args { Args(exchangeBaseUrl: exchangeBaseUrl, scopeInfo: scopeInfo, + amount: amount, clientCancellationId: cancellationId) } var exchangeBaseUrl: String? var scopeInfo: ScopeInfo? var amount: Amount + var cancellationId: String? struct Args: Encodable { var exchangeBaseUrl: String? var scopeInfo: ScopeInfo? var amount: Amount + var clientCancellationId: String? } } extension WalletModel { - @MainActor - func checkPeerPullCreditM(_ amount: Amount, exchangeBaseUrl: String?, viewHandles: Bool = false) // M for MainActor + @MainActor // M for MainActor + func checkPeerPullCreditM(_ exchangeBaseUrl: String?, amount: Amount, + cancellationId: String? = nil, viewHandles: Bool = false) async throws -> CheckPeerPullCreditResponse { - let request = CheckPeerPullCredit(exchangeBaseUrl: exchangeBaseUrl, amount: amount) + let request = CheckPeerPullCredit(exchangeBaseUrl: exchangeBaseUrl, + amount: amount, + cancellationId: cancellationId) let response = try await sendRequest(request, ASYNCDELAY, viewHandles: viewHandles) return response } diff --git a/TalerWallet1/Views/Peer2peer/RequestPayment.swift b/TalerWallet1/Views/Peer2peer/RequestPayment.swift @@ -113,7 +113,10 @@ struct RequestPayment: View { if amountToTransfer.isZero { // fee = EMPTYSTRING } else { - peerPullCheck = try? await model.checkPeerPullCreditM(amountToTransfer, exchangeBaseUrl: nil) +// peerPullCheck = try? await model.checkPeerPullCreditM(amountToTransfer, exchangeBaseUrl: nil) + let baseURL = exchange?.exchangeBaseUrl + peerPullCheck = try? await model.checkPeerPullCreditM(baseURL, amount: amountToTransfer, + cancellationId: "cancel") } } }