gnunet-svn
[Top][All Lists]
Advanced

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

[taler-taler-ios] 03/06: templateParams


From: gnunet
Subject: [taler-taler-ios] 03/06: templateParams
Date: Tue, 20 Feb 2024 19:19:46 +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.

commit b8635ef50af639db230a8323712a2d2022ccda13
Author: Marc Stibane <marc@taler.net>
AuthorDate: Mon Feb 19 12:44:31 2024 +0100

    templateParams
---
 TalerWallet1/Model/Model+Payment.swift             | 14 +++++--
 .../Views/Sheets/Payment/PayTemplateView.swift     | 48 ++++++++++++++--------
 2 files changed, 42 insertions(+), 20 deletions(-)

diff --git a/TalerWallet1/Model/Model+Payment.swift 
b/TalerWallet1/Model/Model+Payment.swift
index b211c51..970ee7b 100644
--- a/TalerWallet1/Model/Model+Payment.swift
+++ b/TalerWallet1/Model/Model+Payment.swift
@@ -147,15 +147,22 @@ fileprivate struct PreparePayForUri: 
WalletBackendFormattedRequest {
         var talerPayUri: String
     }
 }
+
+struct TemplateParams: Codable {
+    let amount: Amount?                     // Total amount payable
+    let summary: String?                    // Human-readable short summary of 
the contract
+}
 /// A request to get an exchange's payment contract terms.
 fileprivate struct PreparePayForTemplate: WalletBackendFormattedRequest {
     typealias Response = PreparePayResult
     func operation() -> String { "preparePayForTemplate" }
-    func args() -> Args { Args(talerPayTemplateUri: talerPayTemplateUri) }
+    func args() -> Args { Args(talerPayTemplateUri: talerPayTemplateUri, 
templateParams: templateParams) }
 
     var talerPayTemplateUri: String
+    var templateParams: TemplateParams
     struct Args: Encodable {
         var talerPayTemplateUri: String
+        var templateParams: TemplateParams
     }
 }
 // MARK: -
@@ -187,9 +194,10 @@ extension WalletModel {
           return response
     }
     @MainActor
-    func preparePayForTemplateM(_ talerPayTemplateUri: String)       // M for 
MainActor
+    func preparePayForTemplateM(_ talerPayTemplateUri: String, amount: 
Amount?, summary: String?)       // M for MainActor
     async throws -> PreparePayResult {
-        let request = PreparePayForTemplate(talerPayTemplateUri: 
talerPayTemplateUri)
+        let templateParams = TemplateParams(amount: amount, summary: summary)
+        let request = PreparePayForTemplate(talerPayTemplateUri: 
talerPayTemplateUri, templateParams: templateParams)
         let response = try await sendRequest(request, ASYNCDELAY)
         return response
     }
diff --git a/TalerWallet1/Views/Sheets/Payment/PayTemplateView.swift 
b/TalerWallet1/Views/Sheets/Payment/PayTemplateView.swift
index 81c81f2..9d4f37f 100644
--- a/TalerWallet1/Views/Sheets/Payment/PayTemplateView.swift
+++ b/TalerWallet1/Views/Sheets/Payment/PayTemplateView.swift
@@ -20,11 +20,15 @@ struct PayTemplateView: View {
     @EnvironmentObject private var model: WalletModel
     @AppStorage("myListStyle") var myListStyle: MyListStyle = .automatic
 
+    @State private var preparePayResult: PreparePayResult? = nil
+    @State private var amount: Amount? = nil        // templateParam
+    @State private var summary: String? = nil       // templateParam
+
     func acceptAction(preparePayResult: PreparePayResult) {
         Task { // runs on MainActor
             do {
                 let confirmPayResult = try await 
model.confirmPayM(preparePayResult.transactionId)
-                //                symLog.log(confirmPayResult as Any)
+//                symLog.log(confirmPayResult as Any)
                 if confirmPayResult.type != "done" {
                     controller.playSound(0)
                     // TODO: show error
@@ -38,16 +42,30 @@ struct PayTemplateView: View {
         }
     }
 
-    @State var preparePayResult: PreparePayResult? = nil
+    func queryURL() -> Bool {
+        if let queryParameters = url.queryParameters {
+            if let amountStr = queryParameters["amount"] {
+                amount = Amount.zero(currency: amountStr)
+            }
+            if let summaryStr = queryParameters["summary"] {
+                summary = summaryStr
+            }
+            return true
+        }
+        return false
+    }
 
-    func query(url: URL) -> String? {
-        if let query = url.query {
-            let array = query.components(separatedBy: "&")
+    func preparePayForTemplate() async {
+        do {
+            let result = try await 
model.preparePayForTemplateM(url.absoluteString, amount: amount, summary: 
summary)
+            preparePayResult = result
+        } catch {    // TODO: error
+            symLog.log(error.localizedDescription)
         }
-        return nil
     }
 
     var body: some View {
+      Group {
         if let preparePayResult {
             let effective = preparePayResult.amountEffective
             List {
@@ -106,21 +124,17 @@ struct PayTemplateView: View {
                 }
             }
             .navigationTitle(navTitle)
-            .onAppear() {
-                symLog.log("onAppear")
-                DebugViewC.shared.setSheetID(SHEET_PAY_TEMPLATE)
-            }
         } else {
             LoadingView(url: url, message: nil)
                 .task {
-                    do {
-                        symLog.log(".task")
-                        let result = try await 
model.preparePayForTemplateM(url.absoluteString)
-                        preparePayResult = result
-                    } catch {    // TODO: error
-                        symLog.log(error.localizedDescription)
-                    }
+                    symLog.log(".task")
+                    let hasParams = queryURL()
+                    await preparePayForTemplate()
                 }
         }
+      }.onAppear() {
+          symLog.log("onAppear")
+          DebugViewC.shared.setSheetID(SHEET_PAY_TEMPLATE)
+      }
     }
 }

-- 
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]