commit 6db1415a65c895b62f907f3dfc958291c7caa683
parent 9eb8a7e7531ca11aa7178d1dc80cdffa546feff4
Author: Marc Stibane <marc@taler.net>
Date: Wed, 12 Aug 2026 18:57:33 +0200
listWithdrawalExchangeCandidates
Diffstat:
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
}