diff options
| author | Christian Cleberg <[email protected]> | 2026-04-23 17:39:13 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-04-23 17:39:13 -0500 |
| commit | 66601a8091a73f3e31f4fb534c38b3eca4756e93 (patch) | |
| tree | f85cd883e63177d25dfe5993a4d545efa4812923 /Hutch/Views/Builds/BuildListViewModel.swift | |
| parent | 380fb866d090c5f13b2ad3f88f1fe23c4ade4801 (diff) | |
| download | hutch-66601a8091a73f3e31f4fb534c38b3eca4756e93.tar.gz hutch-66601a8091a73f3e31f4fb534c38b3eca4756e93.tar.bz2 hutch-66601a8091a73f3e31f4fb534c38b3eca4756e93.zip | |
fix: profile loading error and user-timeline prefs updatev3.2.1
Diffstat (limited to 'Hutch/Views/Builds/BuildListViewModel.swift')
| -rw-r--r-- | Hutch/Views/Builds/BuildListViewModel.swift | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/Hutch/Views/Builds/BuildListViewModel.swift b/Hutch/Views/Builds/BuildListViewModel.swift index cf5d786..14f50fd 100644 --- a/Hutch/Views/Builds/BuildListViewModel.swift +++ b/Hutch/Views/Builds/BuildListViewModel.swift @@ -45,6 +45,7 @@ enum AutoRefreshInterval: Int, CaseIterable, Sendable { @MainActor final class BuildListViewModel { private static let searchHistoryScopeID = "builds" + nonisolated static let defaultLookbackDays = HomeViewModel.defaultFailedBuildLookbackDays private(set) var jobs: [JobSummary] = [] { didSet { updateFilteredJobs() } @@ -68,6 +69,9 @@ final class BuildListViewModel { updateFilteredJobs() } } + var lookbackDays = defaultLookbackDays { + didSet { updateFilteredJobs() } + } // Cached filtered result. Updated whenever jobs, filter, searchText, or // repoFilter changes. Only notifies observers when the content actually // differs, which prevents the list from re-rendering on auto-refresh when @@ -99,7 +103,7 @@ final class BuildListViewModel { } private func updateFilteredJobs() { - var result = Self.filterJobs(jobs, filter: filter) + var result = Self.filterJobs(jobs, filter: filter, lookbackDays: lookbackDays) if !repoFilter.isEmpty { result = result.filter { $0.tags.contains(repoFilter) } } @@ -382,8 +386,14 @@ final class BuildListViewModel { let cancel: CancelResult } - nonisolated static func filterJobs(_ jobs: [JobSummary], filter: BuildListFilter) -> [JobSummary] { - jobs.filter { job in + nonisolated static func filterJobs( + _ jobs: [JobSummary], + filter: BuildListFilter, + lookbackDays: Int, + now: Date = .now, + calendar: Calendar = .current + ) -> [JobSummary] { + let filteredByStatus = jobs.filter { job in switch filter { case .attention: switch job.status { @@ -403,6 +413,18 @@ final class BuildListViewModel { return true } } + + let normalizedLookbackDays = HomeViewModel.allowedFailedBuildLookbackDays.contains(lookbackDays) + ? lookbackDays + : defaultLookbackDays + let startOfToday = calendar.startOfDay(for: now) + let windowStart = calendar.date( + byAdding: .day, + value: -(normalizedLookbackDays - 1), + to: startOfToday + ) ?? startOfToday + + return filteredByStatus.filter { $0.updated >= windowStart } } nonisolated static func searchJobs(_ jobs: [JobSummary], matching query: String) -> [JobSummary] { |
