diff options
| author | Christian Cleberg <[email protected]> | 2026-04-12 00:15:13 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-04-12 00:15:13 -0500 |
| commit | cb1ea5ea4f163d87053285d3fb7999b12a3558b9 (patch) | |
| tree | 84b562d12e642ff494194387b1b4e1d15b065eb0 /Hutch/Views/SystemStatus/SystemStatusViewModel.swift | |
| parent | 1c5a417277d986ee6fb7dc9dff0332338bdf6f3e (diff) | |
| download | hutch-cb1ea5ea4f163d87053285d3fb7999b12a3558b9.tar.gz hutch-cb1ea5ea4f163d87053285d3fb7999b12a3558b9.tar.bz2 hutch-cb1ea5ea4f163d87053285d3fb7999b12a3558b9.zip | |
harden system status and app reliabilityv2.13.1
Diffstat (limited to 'Hutch/Views/SystemStatus/SystemStatusViewModel.swift')
| -rw-r--r-- | Hutch/Views/SystemStatus/SystemStatusViewModel.swift | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/Hutch/Views/SystemStatus/SystemStatusViewModel.swift b/Hutch/Views/SystemStatus/SystemStatusViewModel.swift index 646d7ca..7700208 100644 --- a/Hutch/Views/SystemStatus/SystemStatusViewModel.swift +++ b/Hutch/Views/SystemStatus/SystemStatusViewModel.swift @@ -8,6 +8,8 @@ final class SystemStatusViewModel { private(set) var snapshot: SystemStatusSnapshot? private(set) var recentIncidents: [StatusIncident] = [] private(set) var isLoading = false + private(set) var isShowingStaleData = false + private(set) var staleDataMessage: String? var errorMessage: String? init(repository: SystemStatusRepository) { @@ -25,12 +27,24 @@ final class SystemStatusViewModel { defer { isLoading = false } errorMessage = nil + staleDataMessage = nil + isShowingStaleData = false - async let snapshotTask = repository.snapshot(forceRefresh: forceRefresh) - async let incidentsTask = repository.recentIncidents(forceRefresh: forceRefresh) + async let snapshotTask = repository.snapshotResult(forceRefresh: forceRefresh) + async let incidentsTask = repository.recentIncidentsResult(forceRefresh: forceRefresh) + + var refreshWarnings: [String] = [] do { - snapshot = try await snapshotTask + let result = try await snapshotTask + snapshot = result.value + if result.isStale { + isShowingStaleData = true + staleDataMessage = "Showing the last saved system status snapshot." + if let warning = result.refreshErrorMessage { + refreshWarnings.append(warning) + } + } } catch { if snapshot == nil { errorMessage = error.userFacingMessage @@ -38,11 +52,23 @@ final class SystemStatusViewModel { } do { - recentIncidents = try await incidentsTask + let result = try await incidentsTask + recentIncidents = result.value + if result.isStale { + isShowingStaleData = true + staleDataMessage = staleDataMessage ?? "Showing the last saved incident history." + if let warning = result.refreshErrorMessage { + refreshWarnings.append(warning) + } + } } catch { if errorMessage == nil && recentIncidents.isEmpty { errorMessage = error.userFacingMessage } } + + if hasContent, let firstWarning = refreshWarnings.first { + errorMessage = "Showing cached system status. \(firstWarning)" + } } } |
