diff options
Diffstat (limited to 'Hutch/Views/Home')
| -rw-r--r-- | Hutch/Views/Home/HomeView.swift | 2 | ||||
| -rw-r--r-- | Hutch/Views/Home/HomeViewModel.swift | 8 |
2 files changed, 9 insertions, 1 deletions
diff --git a/Hutch/Views/Home/HomeView.swift b/Hutch/Views/Home/HomeView.swift index 1a68498..105b62b 100644 --- a/Hutch/Views/Home/HomeView.swift +++ b/Hutch/Views/Home/HomeView.swift @@ -48,7 +48,7 @@ struct HomeView: View { loadRecentActivity() } .onChange(of: scenePhase) { _, newPhase in - guard newPhase == .active, let viewModel else { return } + guard newPhase == .active, let viewModel, viewModel.needsRefresh() else { return } Task { await viewModel.loadDashboard() loadRecentActivity() diff --git a/Hutch/Views/Home/HomeViewModel.swift b/Hutch/Views/Home/HomeViewModel.swift index f0c14dd..ec54759 100644 --- a/Hutch/Views/Home/HomeViewModel.swift +++ b/Hutch/Views/Home/HomeViewModel.swift @@ -188,6 +188,7 @@ final class HomeViewModel { private(set) var projectsError: String? private(set) var assignedTicketsError: String? private(set) var recentBuildsError: String? + private(set) var lastRefreshed: Date? private let currentUser: User private let client: SRHTClient @@ -405,10 +406,17 @@ final class HomeViewModel { systemStatusErrorMessage = error.userFacingMessage } isLoadingSystemStatus = false + lastRefreshed = Date() persistNeedsAttentionSnapshot() persistSystemStatusWidgetSnapshot() } + /// Returns true if sufficient time has elapsed since the last dashboard refresh. + func needsRefresh(after interval: TimeInterval = 60) -> Bool { + guard let lastRefreshed else { return true } + return Date().timeIntervalSince(lastRefreshed) > interval + } + var hasDashboardContent: Bool { !pinnedProjects.isEmpty || !assignedTickets.isEmpty || !recentBuilds.isEmpty || !unreadInboxThreads.isEmpty || systemStatusSnapshot != nil } |
