From fe1ccc69661603d419a642a450e4ac9e1258adb0 Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Mon, 13 Apr 2026 19:44:44 -0500 Subject: fix: centralize URLs, tighten models, and polish SwiftUI bindings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add shared HutchDeepLinkURL constants for app, widgets, and tests. - Bump marketing version to 3.1.2 and build to 70 (app + widget extension). - Point Hutch stats default base URL at HutchStatsAPI; add SRHTWebURL status incident feed and reuse it from SystemStatusService. - Group Project into Metadata and Resources; split ContributionStatsResponse into StatsWindow and StatsTotals with updated decoding and tests. - Replace @Bindable usage with explicit Bindings in Profile, Projects list, and repository ACL flows; simplify Home pinned-item helper; add no-op bodies on cancel alert buttons where the compiler requires a statement. - Move repository row build-status indicator next to the relative-updated caption and reserve a fixed 8×8 slot so the row does not jump when status loads. - Use NSString.lastPathComponent for build artifact filenames; collapse duplicate ACL error branches; minor HutchStats HTTP and XMLParserDelegate cleanups. - Point widgets at HutchDeepLinkURL helpers; align tests with the new response and URL types. --- HutchWidgetExtension/NeedsAttentionWidget.swift | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'HutchWidgetExtension/NeedsAttentionWidget.swift') diff --git a/HutchWidgetExtension/NeedsAttentionWidget.swift b/HutchWidgetExtension/NeedsAttentionWidget.swift index 574e9eb..016f1c9 100644 --- a/HutchWidgetExtension/NeedsAttentionWidget.swift +++ b/HutchWidgetExtension/NeedsAttentionWidget.swift @@ -71,7 +71,7 @@ private struct NeedsAttentionWidgetView: View { fallbackState } } - .widgetURL(family == .systemSmall ? URL(string: "hutch://home") : nil) + .widgetURL(family == .systemSmall ? HutchDeepLinkURL.home : nil) .containerBackground(for: .widget) { Color(.systemBackground) } @@ -101,7 +101,7 @@ private struct NeedsAttentionWidgetView: View { private func mediumView(snapshot: NeedsAttentionSnapshot) -> some View { VStack(alignment: .leading, spacing: 0) { HStack(alignment: .top, spacing: 12) { - Link(destination: URL(string: "hutch://home")!) { + Link(destination: HutchDeepLinkURL.home) { metricColumn( count: snapshot.unreadInboxThreads, label: "Unread", @@ -109,14 +109,14 @@ private struct NeedsAttentionWidgetView: View { tint: unreadTint(for: snapshot.unreadInboxThreads) ) } - Link(destination: URL(string: "hutch://trackers")!) { + Link(destination: HutchDeepLinkURL.trackers) { metricColumn( count: snapshot.assignedOpenTickets, label: "Assigned", systemImage: "ticket" ) } - Link(destination: URL(string: "hutch://builds")!) { + Link(destination: HutchDeepLinkURL.builds) { metricColumn( count: snapshot.failedBuilds, label: "Failed", @@ -134,7 +134,7 @@ private struct NeedsAttentionWidgetView: View { private func largeView(snapshot: NeedsAttentionSnapshot) -> some View { VStack(alignment: .leading, spacing: 18) { - Link(destination: URL(string: "hutch://home")!) { + Link(destination: HutchDeepLinkURL.home) { metricRow( count: snapshot.unreadInboxThreads, label: "Unread threads", @@ -142,14 +142,14 @@ private struct NeedsAttentionWidgetView: View { tint: unreadTint(for: snapshot.unreadInboxThreads) ) } - Link(destination: URL(string: "hutch://trackers")!) { + Link(destination: HutchDeepLinkURL.trackers) { metricRow( count: snapshot.assignedOpenTickets, label: "Assigned tickets", systemImage: "ticket" ) } - Link(destination: URL(string: "hutch://builds")!) { + Link(destination: HutchDeepLinkURL.builds) { metricRow( count: snapshot.failedBuilds, label: "Failed builds", -- cgit v1.2.3