summaryrefslogtreecommitdiff
path: root/Hutch/Views/SystemStatus/SystemStatusViewModel.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-12 00:15:13 -0500
committerChristian Cleberg <[email protected]>2026-04-12 00:15:13 -0500
commitcb1ea5ea4f163d87053285d3fb7999b12a3558b9 (patch)
tree84b562d12e642ff494194387b1b4e1d15b065eb0 /Hutch/Views/SystemStatus/SystemStatusViewModel.swift
parent1c5a417277d986ee6fb7dc9dff0332338bdf6f3e (diff)
downloadhutch-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.swift34
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)"
+ }
}
}