summaryrefslogtreecommitdiff
path: root/DomainDig/DomainViewModel.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-07-17 08:36:05 -0500
committerChristian Cleberg <[email protected]>2026-07-17 10:12:36 -0500
commitb4b94d54cbed9334a28cdcd70d3a8a0fd06e04ef (patch)
tree8fa4b408729da32ec2c547081ec2bba13b893fa2 /DomainDig/DomainViewModel.swift
parent065e1e77ff00e8f9c8785393b5eba6c3e0bb2bb1 (diff)
downloaddomain-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.swift16
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