taler-ios

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

commit b8635ef50af639db230a8323712a2d2022ccda13
parent 7f433950fe7e47ec23c7e58dccd9a4ff0993f733
Author: Marc Stibane <marc@taler.net>
Date:   Mon, 19 Feb 2024 12:44:31 +0100

templateParams

Diffstat:
MTalerWallet1/Model/Model+Payment.swift | 14+++++++++++---
MTalerWallet1/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 @@ -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 @@ -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) + } } }