commit fe6a350da2ad63e2e5a02959cb50b24a463e590f
parent 5a2f164cf689489b9e23a3c179bdeed1c673c189
Author: Marc Stibane <marc@taler.net>
Date: Sun, 1 Mar 2026 22:17:06 +0100
fix crash if no exchange (empty array)
Diffstat:
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/TalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawURIView.swift b/TalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawURIView.swift
@@ -39,6 +39,7 @@ struct WithdrawURIView: View {
@State private var selectedExchange = EMPTYSTRING
@State private var exchange: Exchange? = nil
+ @State private var exchangeError: Bool = false
@State private var possibleExchanges: [Exchange] = []
@State private var defaultExchangeBaseUrl: String? // if nil then use possibleExchanges
@State private var currencyInfo: CurrencyInfo = CurrencyInfo.zero(UNKNOWN)
@@ -112,17 +113,20 @@ struct WithdrawURIView: View {
amountZero = available
}
wireFee = uriInfoResponse.wireFee // may be nil
- let baseUrl = uriInfoResponse.defaultExchangeBaseUrl
- ?? uriInfoResponse.possibleExchanges[0].exchangeBaseUrl
defaultExchangeBaseUrl = uriInfoResponse.defaultExchangeBaseUrl
possibleExchanges = uriInfoResponse.possibleExchanges
+ let baseUrl = defaultExchangeBaseUrl
+ ?? possibleExchanges.first?.exchangeBaseUrl
+ ?? nil
// await loadExchange(baseUrl) <- checkCurrencyInfo now returns the exchange
// symLog.log("\(baseUrl.trimURL) loaded")
- if let someExchange = try? await controller.checkCurrencyInfo(for: baseUrl, model: model) {
+ if let baseUrl, let someExchange = try? await controller.checkCurrencyInfo(for: baseUrl, model: model) {
symLog.log("Info(for: \(baseUrl.trimURL) loaded")
exchange = someExchange
+ } else {
+ exchangeError = true
}
} catch {
// TODO: error, dismiss
@@ -203,8 +207,17 @@ struct WithdrawURIView: View {
}
// agePicker.setAges(ages: details?.ageRestrictionOptions)
}
-
-
+ } else if exchangeError {
+ let message = defaultExchangeBaseUrl != nil ? "defaultExchangeBaseUrl: \(defaultExchangeBaseUrl)"
+ : possibleExchanges.first != nil ? "No default - first possible exchange: \(possibleExchanges.first?.exchangeBaseUrl)"
+ : "No default, no possible exchanges"
+ ErrorView(stack.push(),
+ title: "Error loading exchange details:",
+ message: message,
+ copyable: true
+ ) {
+ dismissTop(stack.push())
+ }
} else { // no details or no exchange
#if DEBUG
let message = url.host