commit ea786e1c22031b4085a76e066291342f6cc241ed
parent 7a39c14861b1b309fe51d3b8c6ea096e7a6fd9e2
Author: Marc Stibane <marc@taler.net>
Date: Sun, 5 Jul 2026 16:25:11 +0200
UI for 5sec delay
Diffstat:
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
}