diff options
| author | Christian Cleberg <[email protected]> | 2026-07-17 08:36:05 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-07-17 10:12:36 -0500 |
| commit | b4b94d54cbed9334a28cdcd70d3a8a0fd06e04ef (patch) | |
| tree | 8fa4b408729da32ec2c547081ec2bba13b893fa2 /Shared/SweepActivityAttributes.swift | |
| parent | 065e1e77ff00e8f9c8785393b5eba6c3e0bb2bb1 (diff) | |
| download | domain-dig-b4b94d54cbed9334a28cdcd70d3a8a0fd06e04ef.tar.gz domain-dig-b4b94d54cbed9334a28cdcd70d3a8a0fd06e04ef.tar.bz2 domain-dig-b4b94d54cbed9334a28cdcd70d3a8a0fd06e04ef.zip | |
Implement v4.6.0: sweep Live Activity, share extension, iPad split view, actionable notifications
- Sweep Live Activity: SweepActivityAttributes (Shared/), lock-screen + Dynamic
Island UI in the widget extension, driven by SweepActivityController wired into
the batch pipeline (begin/update/end); NSSupportsLiveActivities in Info.plist.
- Share extension (DomainDigShareExtension): accepts a web URL from the share
sheet, extracts the host, and hands it to the app via the App Group inbox
(DomainDigShareInbox); the app consumes it on activation and inspects it.
- iPad layout: RootTabView uses NavigationSplitView in the regular size class
and the tab bar in compact.
- Actionable notifications: per-domain threadIdentifier grouping, a Re-inspect
action, and tap routing into the domain detail via the intent router.
- Bump version to 4.6.0 (build 38) across app, widget, and share targets.
Diffstat (limited to 'Shared/SweepActivityAttributes.swift')
| -rw-r--r-- | Shared/SweepActivityAttributes.swift | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/Shared/SweepActivityAttributes.swift b/Shared/SweepActivityAttributes.swift new file mode 100644 index 0000000..ee03c2d --- /dev/null +++ b/Shared/SweepActivityAttributes.swift @@ -0,0 +1,25 @@ +import ActivityKit +import Foundation + +/// Live Activity contract for an in-flight watchlist sweep or batch lookup. +/// +/// Lives in `Shared/` because the app starts/updates the activity and the +/// widget extension renders it. +struct SweepActivityAttributes: ActivityAttributes { + struct ContentState: Codable, Hashable { + var completed: Int + var total: Int + var currentDomain: String? + var changed: Int + var warnings: Int + + var fractionComplete: Double { + guard total > 0 else { return 0 } + return Double(completed) / Double(total) + } + } + + /// User-facing title for the run, e.g. "Watchlist Sweep" or "Batch Lookup". + var title: String + var startedAt: Date +} |
