taler-ios

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

commit 6db1415a65c895b62f907f3dfc958291c7caa683
parent 9eb8a7e7531ca11aa7178d1dc80cdffa546feff4
Author: Marc Stibane <marc@taler.net>
Date:   Wed, 12 Aug 2026 18:57:33 +0200

listWithdrawalExchangeCandidates

Diffstat:
MTalerWallet1/Controllers/Controller.swift | 8++++++--
MTalerWallet1/Model/Model+Exchange.swift | 26++++++++++++++++----------
2 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/TalerWallet1/Controllers/Controller.swift b/TalerWallet1/Controllers/Controller.swift @@ -563,11 +563,15 @@ class Controller: ObservableObject { #if GNU_TALER if defaultExchanges.count == 1 { if let talerOps = defaultExchanges.first { - let stageURI = "taler://withdraw-exchange/exchange.stage.taler-ops.ch" + let stageURI = "taler://withdraw-exchange/exchange.stage.taler-ops.ch/" + let baseUrl = "https://exchange.stage.taler-ops.ch/" if talerOps.talerUri != stageURI { let stageExc = DefaultExchange(talerUri: stageURI, + exchangeBaseUrl: baseUrl, currency: talerOps.currency, - currencySpec: talerOps.currencySpec + currencySpec: talerOps.currencySpec, + exchangeEntryStatus: .preset, + exchangeUpdateStatus: .initial ) defaultExchanges.append(stageExc) } diff --git a/TalerWallet1/Model/Model+Exchange.swift b/TalerWallet1/Model/Model+Exchange.swift @@ -130,14 +130,18 @@ struct Exchange: Codable, Hashable, Identifiable { } // MARK: - struct DefaultExchange: Codable, Hashable { - var talerUri: String // taler://withdraw-exchange/exchange.taler-ops.ch/ - var currency: String // CHF - var currencySpec: CurrencySpecification // .name = "Swiss Francs"... alt_unit_names":{"0":"Fr.","-2":"Rp."} -// var restrictions: [String] // ["Swiss bank accounts only"] + var talerUri: String // taler://withdraw-exchange/exchange.taler-ops.ch/ + var exchangeBaseUrl: String // https://exchange.taler-ops.ch/ + var currency: String // CHF + var currencySpec: CurrencySpecification // .name = "Swiss Francs"... alt_unit_names":{"0":"Fr.","-2":"Rp."} + // var restrictions: [AccountRestriction]? // ["Swiss bank accounts only"] too bad, need to contact server to get this data + var exchangeEntryStatus: ExchangeEntryStatus + var exchangeUpdateStatus: ExchangeUpdateStatus + var recommendationReasons: [String]? } extension DefaultExchange: Identifiable { - var id: String { talerUri } + var id: String { exchangeBaseUrl } } // MARK: - /// A request to list exchanges names for a currency @@ -159,13 +163,15 @@ fileprivate struct ListExchanges: WalletBackendFormattedRequest { } fileprivate struct DefaultExchanges: WalletBackendFormattedRequest { - var operation: String { "getDefaultExchanges" } - func args() -> Args { Args() } + var operation: String { "listWithdrawalExchangeCandidates" } + func args() -> Args { Args(presetOnly: true) } - struct Args: Encodable {} + struct Args: Encodable { + var presetOnly: Bool + } struct Response: Decodable { // list of known exchanges - var defaultExchanges: [DefaultExchange] + var candidates: [DefaultExchange] } } @@ -293,7 +299,7 @@ extension WalletModel { do { let request = DefaultExchanges() let response = try await sendRequest(request, viewHandles: viewHandles) - return response.defaultExchanges + return response.candidates } catch { return [] // empty, but not nil }