krz/hutch
an ios client for sourcehut
clone: git clone https://gitbay.org/krz/hutch.git
v3.8.0: Hutch/Views/More/MoreViewModel.swift · raw
1import Foundation
2
3@Observable
4@MainActor
5final class MoreViewModel {
6 private let repository: SystemStatusRepository
7
8 private(set) var systemStatusSnapshot: SystemStatusSnapshot?
9 private(set) var isLoadingSystemStatus = false
10 private(set) var isShowingStaleSystemStatus = false
11 private(set) var systemStatusErrorMessage: String?
12
13 init(repository: SystemStatusRepository) {
14 self.repository = repository
15 }
16
17 func loadIfNeeded() async {
18 guard systemStatusSnapshot == nil, !isLoadingSystemStatus else { return }
19 await loadSystemStatus()
20 }
21
22 func loadSystemStatus(forceRefresh: Bool = false) async {
23 isLoadingSystemStatus = true
24 defer { isLoadingSystemStatus = false }
25 isShowingStaleSystemStatus = false
26 systemStatusErrorMessage = nil
27
28 do {
29 let result = try await repository.snapshotResult(forceRefresh: forceRefresh)
30 systemStatusSnapshot = result.value
31 isShowingStaleSystemStatus = result.isStale
32 systemStatusErrorMessage = result.isStale ? result.refreshErrorMessage : nil
33 } catch {
34 if systemStatusSnapshot == nil {
35 systemStatusErrorMessage = error.userFacingMessage
36 }
37 }
38 }
39}