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 /DomainDig/DomainViewModel.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 'DomainDig/DomainViewModel.swift')
| -rw-r--r-- | DomainDig/DomainViewModel.swift | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/DomainDig/DomainViewModel.swift b/DomainDig/DomainViewModel.swift index 3f37cb9..dcae907 100644 --- a/DomainDig/DomainViewModel.swift +++ b/DomainDig/DomainViewModel.swift @@ -2834,6 +2834,11 @@ final class DomainViewModel { customPortScanTask?.cancel() batchTask?.cancel() + SweepActivityController.shared.begin( + title: source == .watchlistRefresh ? "Watchlist Sweep" : "Batch Lookup", + total: domains.count + ) + batchTask = Task { [weak self] in guard let self else { return } self.notificationsAuthorized = await LocalNotificationService.shared.requestAuthorizationIfNeeded() @@ -2928,6 +2933,11 @@ final class DomainViewModel { errorMessage: "Lookup cancelled" ) batchCompletedCount += 1 + SweepActivityController.shared.update( + completed: batchCompletedCount, + total: batchTotalCount, + currentDomain: batchCurrentDomain + ) return } @@ -2956,6 +2966,11 @@ final class DomainViewModel { errorMessage: payload.snapshot.statusMessage ) batchCompletedCount += 1 + SweepActivityController.shared.update( + completed: batchCompletedCount, + total: batchTotalCount, + currentDomain: batchCurrentDomain + ) } private func finishBatchLookup(source: BatchLookupSource) { @@ -2989,6 +3004,7 @@ final class DomainViewModel { generatedAt: Date() ) latestBatchSweepSummary = summary + SweepActivityController.shared.end(changed: changedCount, warnings: warningCount) if source == .workflow, let activeWorkflowRunID, let activeWorkflowRunName { let workflowReports: [DomainReport] = summary.results.compactMap { result in |
