krz/hutch
an ios client for sourcehut
clone: git clone https://gitbay.org/krz/hutch.git
v2.13.0: Hutch/Views/SystemStatus/SystemStatusViewModel.swift · raw
1import Foundation
2
3@Observable
4@MainActor
5final class SystemStatusViewModel {
6 private let repository: SystemStatusRepository
7
8 private(set) var snapshot: SystemStatusSnapshot?
9 private(set) var recentIncidents: [StatusIncident] = []
10 private(set) var isLoading = false
11 var errorMessage: String?
12
13 init(repository: SystemStatusRepository) {
14 self.repository = repository
15 }
16
17 var hasContent: Bool {
18 snapshot != nil || !recentIncidents.isEmpty
19 }
20
21 func load(forceRefresh: Bool = false) async {
22 if !hasContent {
23 isLoading = true
24 }
25 defer { isLoading = false }
26
27 errorMessage = nil
28
29 async let snapshotTask = repository.snapshot(forceRefresh: forceRefresh)
30 async let incidentsTask = repository.recentIncidents(forceRefresh: forceRefresh)
31
32 do {
33 snapshot = try await snapshotTask
34 } catch {
35 if snapshot == nil {
36 errorMessage = error.userFacingMessage
37 }
38 }
39
40 do {
41 recentIncidents = try await incidentsTask
42 } catch {
43 if errorMessage == nil && recentIncidents.isEmpty {
44 errorMessage = error.userFacingMessage
45 }
46 }
47 }
48}