taler-ios

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

commit ea786e1c22031b4085a76e066291342f6cc241ed
parent 7a39c14861b1b309fe51d3b8c6ea096e7a6fd9e2
Author: Marc Stibane <marc@taler.net>
Date:   Sun,  5 Jul 2026 16:25:11 +0200

UI for 5sec delay

Diffstat:
MTalerWallet1/Backend/WalletCore.swift | 14+-------------
MTalerWallet1/Controllers/Controller.swift | 16+++++++++++-----
MTalerWallet1/Model/WalletModel.swift | 2+-
MTalerWallet1/Views/Settings/DebugSettingsView.swift | 28+++++++++++++++++++++++-----
MTalerWallet1/Views/Sheets/DevExperimentView.swift | 2+-
5 files changed, 37 insertions(+), 25 deletions(-)

diff --git a/TalerWallet1/Backend/WalletCore.swift b/TalerWallet1/Backend/WalletCore.swift @@ -33,7 +33,7 @@ class WalletCore: QuickjsMessageHandler { var delegate: WalletBackendDelegate? var versionInfo: VersionInfo? // shown in SettingsView - var developDelay: Bool? // if set in SettingsView will delay wallet-core after each action + var developDelay: Bool? // delay wallet-core after each network call var isObserving: Int var isLogging: Bool var logTransactions: Bool @@ -413,18 +413,6 @@ extension WalletCore { /// here not only responses, but also notifications from wallet-core will be received @MainActor func handleMessage(message: String) { do { - var asyncDelay = 0 - if let delay: Bool = developDelay { // Settings: 2 seconds delay - if delay { - asyncDelay = 2 - } - } - if asyncDelay > 0 { - symLog.log(message) - symLog.log("...going to sleep for \(asyncDelay) seconds...") - sleep(UInt32(asyncDelay)) - symLog.log("waking up again after \(asyncDelay) seconds, will deliver message") - } guard let messageData = message.data(using: .utf8) else { throw WalletBackendError.deserializationError } diff --git a/TalerWallet1/Controllers/Controller.swift b/TalerWallet1/Controllers/Controller.swift @@ -531,17 +531,23 @@ class Controller: ObservableObject { if backendState == .instantiated { backendState = .initing do { + let walletCore = WalletCore.shared let versionInfo = try await model.initWalletCore(setTesting: setTesting) - WalletCore.shared.versionInfo = versionInfo + walletCore.versionInfo = versionInfo if developerMode { try await model.setConfig(setTesting: true) -// try? await model.devExperimentT(talerUri: "taler://dev-experiment/default-exchange-demo?val=1") - try? await model.devExperimentT(talerUri: "taler://dev-experiment/demo-shortcuts?val=KUDOS:4,KUDOS:8,KUDOS:16,KUDOS:32") -// try? await model.devExperimentT(talerUri: "taler://dev-experiment/start-tc?delay_resp=5000") + if walletCore.developDelay == true { + try? await model.devExperimentT( + "taler://dev-experiment/start-tc?delay_resp=5000") + } +// try? await model.devExperimentT("taler://dev-experiment/default-exchange-demo?val=1") + try? await model.devExperimentT( + "taler://dev-experiment/demo-shortcuts?val=KUDOS:4,KUDOS:8,KUDOS:16,KUDOS:32") } defaultExchanges = await model.getDefaultExchanges(stage: stage) if stage, let talerOps = defaultExchanges.first { - let stageExc = DefaultExchange(talerUri: "taler://withdraw-exchange/exchange.stage.taler-ops.ch", + let stageURI = "taler://withdraw-exchange/exchange.stage.taler-ops.ch" + let stageExc = DefaultExchange(talerUri: stageURI, currency: talerOps.currency, currencySpec: talerOps.currencySpec ) diff --git a/TalerWallet1/Model/WalletModel.swift b/TalerWallet1/Model/WalletModel.swift @@ -537,7 +537,7 @@ fileprivate struct DevExperimentRequest: WalletBackendFormattedRequest { extension WalletModel { /// tell wallet-core to mock new transactions - nonisolated func devExperimentT(talerUri: String, viewHandles: Bool = false) async throws { + nonisolated func devExperimentT(_ talerUri: String, viewHandles: Bool = false) async throws { // T for any Thread let request = DevExperimentRequest(talerUri: talerUri) _ = try await sendRequest(request, viewHandles: viewHandles) diff --git a/TalerWallet1/Views/Settings/DebugSettingsView.swift b/TalerWallet1/Views/Settings/DebugSettingsView.swift @@ -56,6 +56,14 @@ struct DebugSettingsView: View { } @State private var listID = UUID() + func setDelay(_ doDelay: Bool, for walletCore: WalletCore) async { + walletCore.developDelay = doDelay + symLog.log(doDelay ? "wallet-core delaying by 5 seconds" + : "wallet-core stop delaying") + let delayTime = doDelay ? 5000 : 0 + try? await model.devExperimentT("taler://dev-experiment/start-tc?delay_resp=\(delayTime)") + } + var body: some View { #if PRINT_CHANGES let _ = Self._printChanges() @@ -67,6 +75,13 @@ struct DebugSettingsView: View { id1: "devMode", description: String("More information intended for debugging")) { newVal in withAnimation(Animation.linear.delay(0.8)) { showDevelopItems = developerMode } + Task { + symLog.log((newVal ? "enabling" : "disabling") + " applyDevExperiment") + try await model.setConfig(setTesting: newVal) + if newVal && walletCore.developDelay == true { + try await setDelay(true, for: walletCore) + } + } } if showDevelopItems { #if DEBUG @@ -155,11 +170,14 @@ struct DebugSettingsView: View { .buttonStyle(.bordered) .disabled(withDrawDisabled) }.id("head1withdraw") - SettingsToggle(name: String("Set 2 seconds delay"), + SettingsToggle(name: String("Set 5 seconds delay"), value: $developDelay.onChange({ delay in - walletCore.developDelay = delay}), + Task { + try await setDelay(delay, for: walletCore) + } + }), id1: "delay", - description: String("After each wallet-core action")) + description: String("After each network call")) .id("delay") #if DEBUG SettingsItem(name: String("Run Dev Experiment Refresh"), @@ -170,8 +188,8 @@ struct DebugSettingsView: View { Task { // runs on MainActor symLog.log("running applyDevExperiment Refresh") try await model.setConfig(setTesting: true) - try await model.devExperimentT(talerUri: "taler://dev-experiment/start-block-refresh") - try await model.devExperimentT(talerUri: "taler://dev-experiment/insert-pending-refresh") + try await model.devExperimentT("taler://dev-experiment/start-block-refresh") + try await model.devExperimentT("taler://dev-experiment/insert-pending-refresh") } } .buttonStyle(.bordered) diff --git a/TalerWallet1/Views/Sheets/DevExperimentView.swift b/TalerWallet1/Views/Sheets/DevExperimentView.swift @@ -26,7 +26,7 @@ struct DevExperimentView: View { private func viewDidLoad() async { symLog.log(".task \(url.absoluteString)") try? await model.setConfig(setTesting: true) - try? await model.devExperimentT(talerUri: url.absoluteString) + try? await model.devExperimentT(url.absoluteString) finished = true }