taler-ios

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

commit 6feccc1aac9818be26a30dfa0672947aeb8129d6
parent fcd04523e9438d0ff61812c4313fb40d9911b409
Author: Marc Stibane <marc@taler.net>
Date:   Fri, 17 Jul 2026 16:41:39 +0200

Error with retry & cancel

Diffstat:
MTalerWallet1/Backend/WalletCore.swift | 2++
MTalerWallet1/Controllers/Controller.swift | 1+
MTalerWallet1/Views/HelperViews/LoadingView.swift | 12+++++++++---
MTalerWallet1/Views/HelperViews/TimeView.swift | 4+++-
MTalerWallet1/Views/Main/MainView.swift | 8++++++++
5 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/TalerWallet1/Backend/WalletCore.swift b/TalerWallet1/Backend/WalletCore.swift @@ -185,6 +185,8 @@ extension WalletCore { let decoded = try JSONDecoder().decode(RequestProgressError.self, from: jsonData) DispatchQueue.main.async { Controller.shared.lastProgressError = decoded + self.postNotification(.RequestProgressError, + userInfo: [NOTIFICATIONERROR: decoded]) } } } diff --git a/TalerWallet1/Controllers/Controller.swift b/TalerWallet1/Controllers/Controller.swift @@ -138,6 +138,7 @@ class Controller: ObservableObject { @Published var networkUnavailable: Bool = false @Published var slowConnection: Bool = false @Published var stalledConnection: Bool = false + @Published var errorConnection: Bool = false @Published var lastProgressError: RequestProgressError? = nil @Published var lastProgressPhase: RequestProgressPhase? = nil @Published var oimModeActive: Bool = false diff --git a/TalerWallet1/Views/HelperViews/LoadingView.swift b/TalerWallet1/Views/HelperViews/LoadingView.swift @@ -75,10 +75,10 @@ struct LoadingView: View { .talerFont(.title3) .padding(.vertical) } else if isFinished == true { - Text("Working...") + Text("Retrying…") .talerFont(.title3) } else { - Text("Waiting for response...") + Text("Waiting for response…") .talerFont(.title3) } } @@ -119,13 +119,19 @@ struct LoadingView: View { .onChange(of: controller.stalledConnection) { isStalled in showAlert = isStalled } + .onChange(of: controller.errorConnection) { isError in + if isError { +// print("❗️❗️❗️ error arrived, idle waiting starts") + isFinished = false + controller.errorConnection = false + } + } if #available(iOS 17.0, *) { view.toolbarTitleDisplayMode(.inlineLarge) } else { view } - } } // MARK: - diff --git a/TalerWallet1/Views/HelperViews/TimeView.swift b/TalerWallet1/Views/HelperViews/TimeView.swift @@ -26,8 +26,10 @@ struct TimeView: View { if isFinished != nil { DispatchQueue.main.async { isFinished = true - DispatchQueue.main.asyncAfter(deadline: .now() + 2.6) { +// print("❗️❗️❗️ retrying…") + DispatchQueue.main.asyncAfter(deadline: .now() + 1.2) { isFinished = nil +// print("❗️❗️❗️ waiting for response…") } } } diff --git a/TalerWallet1/Views/Main/MainView.swift b/TalerWallet1/Views/Main/MainView.swift @@ -300,6 +300,14 @@ struct MainView: View { showUrlSheet = true // raise sheet } } } + .onNotification(.RequestProgressError) { notification in + if let progress = notification.userInfo?[NOTIFICATIONERROR] as? RequestProgressError { + withAnimation(.easeIn(duration: BANNERDURATION)) { + controller.errorConnection = true +// print("❗️❗️❗️ progress.error: \(progress.error.code) ") + } + } } + .onNotification(.RequestProgressPhase) { notification in if let progress = notification.userInfo?[NOTIFICATIONPHASE] as? RequestProgressPhase { // print(progress)