gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-taler-ios] branch master updated: withdraw-exchange fetches curre


From: gnunet
Subject: [taler-taler-ios] branch master updated: withdraw-exchange fetches currency from the exchange if it wasn't in the URL
Date: Sat, 23 Mar 2024 18:54:24 +0100

This is an automated email from the git hooks/post-receive script.

marc-stibane pushed a commit to branch master
in repository taler-ios.

The following commit(s) were added to refs/heads/master by this push:
     new d6cdaf7  withdraw-exchange fetches currency from the exchange if it 
wasn't in the URL
d6cdaf7 is described below

commit d6cdaf72291144bf73ef00aab2545bdda5a75a53
Author: Marc Stibane <marc@taler.net>
AuthorDate: Sat Mar 23 18:50:57 2024 +0100

    withdraw-exchange fetches currency from the exchange if it wasn't in the URL
---
 TalerWallet1/Views/Banking/ExchangeRowView.swift   |  7 +++-
 .../Views/Banking/ExchangeSectionView.swift        | 23 +++++------
 TalerWallet1/Views/Banking/ManualWithdraw.swift    | 10 ++++-
 TalerWallet1/Views/Sheets/WithdrawExchangeV.swift  | 46 ++++++++++++++--------
 4 files changed, 56 insertions(+), 30 deletions(-)

diff --git a/TalerWallet1/Views/Banking/ExchangeRowView.swift 
b/TalerWallet1/Views/Banking/ExchangeRowView.swift
index 3edc3e8..450313c 100644
--- a/TalerWallet1/Views/Banking/ExchangeRowView.swift
+++ b/TalerWallet1/Views/Banking/ExchangeRowView.swift
@@ -24,6 +24,7 @@ struct ExchangeRowView: View {
     @EnvironmentObject private var model: WalletModel
     @AppStorage("minimalistic") var minimalistic: Bool = false
     @State private var buttonSelected: Int? = nil
+    @State var myExchange: Exchange? = nil
 
     func selectAndUpdate(_ button: Int) {
         amountToTransfer.setCurrency(currency)
@@ -57,7 +58,7 @@ struct ExchangeRowView: View {
         let withdrawTitle1 = String(localized: "Withdraw\t\(currency)",
                                     comment: "Button `Withdraw (currency)ยด, 
must have ONE \\t and ONE %@")
         let baseURL = exchange.exchangeBaseUrl
-        
+
         let deposit = LazyView {
             DepositIbanV(stack: stack.push(),
                       feeLabel: nil,
@@ -70,6 +71,7 @@ struct ExchangeRowView: View {
         let manualWithdraw = LazyView {
             ManualWithdraw(stack: stack.push(), isSheet: false,
                  exchangeBaseUrl: baseURL,
+                        exchange: $myExchange,
                 amountToTransfer: $amountToTransfer)
         }
         let showToS = LazyView {
@@ -117,6 +119,9 @@ struct ExchangeRowView: View {
             }
         }
         .task {
+            if myExchange == nil {
+                myExchange = exchange
+            }
             if controller.hasInfo(for: currency) == nil {
                 symLog.log("fetching info for \(currency)")
                 // FIXME: remove fake ScopeInfo once the REAL one is in 
exchange.scopeInfo
diff --git a/TalerWallet1/Views/Banking/ExchangeSectionView.swift 
b/TalerWallet1/Views/Banking/ExchangeSectionView.swift
index 0922581..9447798 100644
--- a/TalerWallet1/Views/Banking/ExchangeSectionView.swift
+++ b/TalerWallet1/Views/Banking/ExchangeSectionView.swift
@@ -21,15 +21,17 @@ struct ExchangeSectionView: View {
 
     @State private var shouldReloadBalances: Int = 0
 
-    func amountAvailable(_ exchangeBaseUrl: String, currency: String?) -> 
Amount? {
-        for balance in balances {
-            if let baseUrl = balance.scopeInfo.url {
-                if baseUrl == exchangeBaseUrl {
-                    return balance.available
-                }
-            } else if let currency {
-                if currency == balance.scopeInfo.currency {
-                    return balance.available
+    func amountAvailable(_ exchange: Exchange?, currency: String?) -> Amount? {
+        if let exchange {
+            for balance in balances {
+                if let baseUrl = balance.scopeInfo.url {
+                    if baseUrl == exchange.exchangeBaseUrl {
+                        return balance.available
+                    }
+                } else if let currency {
+                    if currency == balance.scopeInfo.currency {
+                        return balance.available
+                    }
                 }
             }
         }
@@ -51,8 +53,7 @@ struct ExchangeSectionView: View {
 //            ForEach(exchanges) { exchange in
                 ExchangeRowView(stack: stack.push(),
                              exchange: exchange,
-                      amountAvailable: 
amountAvailable(exchange.exchangeBaseUrl,
-                                                       currency: currency),
+                      amountAvailable: amountAvailable(exchange, currency: 
currency),
 //                          depositIBAN: $depositIBAN,
 //                        accountHolder: $accountHolder,
                              currency: currencyName,        // TODO: 
(balance.available) amount.isZero to disable Deposit-button
diff --git a/TalerWallet1/Views/Banking/ManualWithdraw.swift 
b/TalerWallet1/Views/Banking/ManualWithdraw.swift
index b4a3efb..e63e899 100644
--- a/TalerWallet1/Views/Banking/ManualWithdraw.swift
+++ b/TalerWallet1/Views/Banking/ManualWithdraw.swift
@@ -16,6 +16,7 @@ struct ManualWithdraw: View {
     let stack: CallStack
     let isSheet: Bool
     let exchangeBaseUrl: String
+    @Binding var exchange: Exchange?
     @Binding var amountToTransfer: Amount
 
     @EnvironmentObject private var controller: Controller
@@ -23,7 +24,6 @@ struct ManualWithdraw: View {
     @AppStorage("minimalistic") var minimalistic: Bool = false
 
     @State private var withdrawalAmountDetails: WithdrawalAmountDetails? = nil
-    @State private var exchange: Exchange? = nil
 //    @State var ageMenuList: [Int] = []
 //    @State var selectedAge = 0
 
@@ -133,10 +133,18 @@ struct ManualWithdraw: View {
 struct ManualWithdraw_Previews: PreviewProvider {
     struct StateContainer : View {
         @State private var amountToPreview = Amount(currency: LONGCURRENCY, 
cent: 510)
+        @State private var exchange: Exchange? = Exchange(exchangeBaseUrl: 
DEMOEXCHANGE,
+                                                                scopeInfo: 
ScopeInfo(type: .exchange, currency: LONGCURRENCY),
+                                                                paytoUris: [],
+                                                                tosStatus: 
.accepted,
+                                                      exchangeEntryStatus: 
.ephemeral,
+                                                     exchangeUpdateStatus: 
.ready,
+                                                    ageRestrictionOptions: [])
 
         var body: some View {
             ManualWithdraw(stack: CallStack("Preview"), isSheet: false,
                  exchangeBaseUrl: DEMOEXCHANGE,
+                        exchange: $exchange,
                 amountToTransfer: $amountToPreview)
         }
     }
diff --git a/TalerWallet1/Views/Sheets/WithdrawExchangeV.swift 
b/TalerWallet1/Views/Sheets/WithdrawExchangeV.swift
index eab5268..484a62e 100644
--- a/TalerWallet1/Views/Sheets/WithdrawExchangeV.swift
+++ b/TalerWallet1/Views/Sheets/WithdrawExchangeV.swift
@@ -17,8 +17,8 @@ struct WithdrawExchangeV: View {
 
     @EnvironmentObject private var controller: Controller
     @EnvironmentObject private var model: WalletModel
-    @State private var exchangeBaseUrl: String?
     @State private var amountToTransfer = Amount.zero(currency: "")
+    @State private var exchange: Exchange? = nil
 
     var body: some View {
 #if PRINT_CHANGES
@@ -26,9 +26,10 @@ struct WithdrawExchangeV: View {
         let _ = symLog.vlog()       // just to get the # to compare it with 
.onAppear & onDisappear
 #endif
         Group {
-            if let exchangeBaseUrl {
+            if exchange != nil {
                 ManualWithdraw(stack: stack.push(), isSheet: true,
-                     exchangeBaseUrl: exchangeBaseUrl,
+                     exchangeBaseUrl: exchange!.exchangeBaseUrl,
+                            exchange: $exchange,
                     amountToTransfer: $amountToTransfer)
             } else {
                 // TODO: Error
@@ -36,21 +37,32 @@ struct WithdrawExchangeV: View {
             }
         }
         .task {
-            do { // TODO: cancelled
-                symLog.log(".task")
-                let withdrawExchange = try await 
model.loadWithdrawalExchangeForUriM(url.absoluteString)
-                let baseUrl = withdrawExchange.exchangeBaseUrl
-                exchangeBaseUrl = baseUrl
-                if let amount = withdrawExchange.amount {
-                    amountToTransfer = amount
-                } else {
-                    // is already Amount.zero(currency: "")
+            if exchange == nil {
+                do { // TODO: cancelled
+                    symLog.log(".task")
+                    let withdrawExchange = try await 
model.loadWithdrawalExchangeForUriM(url.absoluteString)
+                    let baseUrl = withdrawExchange.exchangeBaseUrl
+                    symLog.log("getExchangeByUrl(\(baseUrl))")
+                    if let exc = await model.getExchangeByUrl(url: baseUrl) {
+                        // let the controller collect CurrencyInfo from this 
formerly unknown exchange
+                        let _ = await controller.getInfo(from: baseUrl, model: 
model)
+                        if let amount = withdrawExchange.amount {
+                            amountToTransfer = amount
+                        } else {
+                            let currency = exc.scopeInfo?.currency
+                                        ?? exc.currency
+                                        ?? String(localized: "Unknown", 
comment: "unknown currency")
+                            amountToTransfer.setCurrency(currency)
+                            // is already Amount.zero(currency: "")
+                        }
+                        exchange = exc
+                    } else {
+                        // TODO: Error "Can't get Exchange / Payment Service 
Provider Info"
+                    }
+                } catch {    // TODO: error
+                    symLog.log(error.localizedDescription)
+                    exchange = nil
                 }
-                // let the controller collect CurrencyInfo from this formerly 
unknown exchange
-                let _ = await controller.getInfo(from: baseUrl, model: model)
-            } catch {    // TODO: error
-                symLog.log(error.localizedDescription)
-                exchangeBaseUrl = nil
             }
         }
     }

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]