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/More/MoreViewModel.swift | |
| parent | 1c5a417277d986ee6fb7dc9dff0332338bdf6f3e (diff) | |
| download | hutch-2.13.1.tar.gz hutch-2.13.1.tar.bz2 hutch-2.13.1.zip | |
harden system status and app reliabilityv2.13.1
Diffstat (limited to 'Hutch/Views/More/MoreViewModel.swift')
| -rw-r--r-- | Hutch/Views/More/MoreViewModel.swift | 39 |
1 files changed, 39 insertions, 0 deletions
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 + } + } + } +} |
