taler-ios

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

commit e306950a195eaa278a43f03c7f0ca3f890c329d3
parent c4533fd6de6d7edf03163f58f5d55207b0aeb4d8
Author: Marc Stibane <marc@taler.net>
Date:   Thu,  7 Dec 2023 00:11:42 +0100

getExchangeByUrl

Diffstat:
MTalerWallet1/Model/Model+Exchange.swift | 28+++++++++++++++++++++++++++-
MTalerWallet1/Model/Model+P2P.swift | 2++
MTalerWallet1/Model/Model+Withdraw.swift | 2++
3 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/TalerWallet1/Model/Model+Exchange.swift b/TalerWallet1/Model/Model+Exchange.swift @@ -93,6 +93,19 @@ fileprivate struct ListExchanges: WalletBackendFormattedRequest { } } +/// A request to get info for one exchange. +fileprivate struct GetExchangeByUrl: WalletBackendFormattedRequest { + typealias Response = Exchange + func operation() -> String { "getExchangeEntryByUrl" } + func args() -> Args { Args(exchangeBaseUrl: exchangeBaseUrl) } + + var exchangeBaseUrl: String + + struct Args: Encodable { + var exchangeBaseUrl: String + } +} + /// A request to update a single exchange. fileprivate struct UpdateExchange: WalletBackendFormattedRequest { struct Response: Decodable {} // no result - getting no error back means success @@ -158,8 +171,21 @@ extension WalletModel { } /// add a new exchange with URL to the wallet's list of known exchanges + func getExchangeByUrl(url: String) + async -> Exchange? { + do { + let request = GetExchangeByUrl(exchangeBaseUrl: url) + logger.info("query for exchange: \(url, privacy: .public)") + let response = try await sendRequest(request) + return response + } catch { + return nil + } + } + + /// add a new exchange with URL to the wallet's list of known exchanges func addExchange(url: String) - async throws { + async throws { let request = AddExchange(exchangeBaseUrl: url) logger.info("adding exchange: \(url, privacy: .public)") _ = try await sendRequest(request) diff --git a/TalerWallet1/Model/Model+P2P.swift b/TalerWallet1/Model/Model+P2P.swift @@ -165,6 +165,8 @@ struct PreparePeerPushCreditResponse: Codable { let contractTerms: PeerContractTerms let amountRaw: Amount let amountEffective: Amount + let exchangeBaseUrl: String +// let peerPushCreditId: String // the dialog transaction is already created in the local DB - must either accept or delete let transactionId: String } diff --git a/TalerWallet1/Model/Model+Withdraw.swift b/TalerWallet1/Model/Model+Withdraw.swift @@ -18,8 +18,10 @@ struct AccountRestriction: Decodable { var human_hint_i18n: String? } struct WithdrawalExchangeAccountDetails: Decodable { + var bankName: String? var paytoUri: String var transferAmount: Amount + var currencySpecification: CurrencySpecification? var creditRestrictions: [AccountRestriction]? } // MARK: -