From cb1ea5ea4f163d87053285d3fb7999b12a3558b9 Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Sun, 12 Apr 2026 00:15:13 -0500 Subject: harden system status and app reliability --- Hutch/Views/More/MoreViewModel.swift | 39 ++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Hutch/Views/More/MoreViewModel.swift (limited to 'Hutch/Views/More/MoreViewModel.swift') diff --git a/Hutch/Views/More/MoreViewModel.swift b/Hutch/Views/More/MoreViewModel.swift new file mode 100644 index 0000000..8f23975 --- /dev/null +++ b/Hutch/Views/More/MoreViewModel.swift @@ -0,0 +1,39 @@ +import Foundation + +@Observable +@MainActor +final class MoreViewModel { + private let repository: SystemStatusRepository + + private(set) var systemStatusSnapshot: SystemStatusSnapshot? + private(set) var isLoadingSystemStatus = false + private(set) var isShowingStaleSystemStatus = false + private(set) var systemStatusErrorMessage: String? + + init(repository: SystemStatusRepository) { + self.repository = repository + } + + func loadIfNeeded() async { + guard systemStatusSnapshot == nil, !isLoadingSystemStatus else { return } + await loadSystemStatus() + } + + func loadSystemStatus(forceRefresh: Bool = false) async { + isLoadingSystemStatus = true + defer { isLoadingSystemStatus = false } + isShowingStaleSystemStatus = false + systemStatusErrorMessage = nil + + do { + let result = try await repository.snapshotResult(forceRefresh: forceRefresh) + systemStatusSnapshot = result.value + isShowingStaleSystemStatus = result.isStale + systemStatusErrorMessage = result.isStale ? result.refreshErrorMessage : nil + } catch { + if systemStatusSnapshot == nil { + systemStatusErrorMessage = error.userFacingMessage + } + } + } +} -- cgit v1.2.3