summaryrefslogtreecommitdiff
path: root/DomainDig/LocalNotificationService.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-07-17 11:18:25 -0500
committerChristian Cleberg <[email protected]>2026-07-20 13:56:41 -0500
commitfd8ca178a379da71f5bb19c461524888cad9447e (patch)
treeadb481e4c7c22e41e919b97ccded0e506083f9b3 /DomainDig/LocalNotificationService.swift
parent2b52ee5520cad3c47d30d513946645366f268762 (diff)
downloaddomain-dig-fd8ca178a379da71f5bb19c461524888cad9447e.tar.gz
domain-dig-fd8ca178a379da71f5bb19c461524888cad9447e.tar.bz2
domain-dig-fd8ca178a379da71f5bb19c461524888cad9447e.zip
v4.8.0: Add scheduled report generation
- ScheduledReportService (@MainActor, headless/storage-backed like DomainMonitoringService): builds the latest report for every tracked domain from persisted history, exports it via DomainReportExporter in the configured format (markdown/PDF/JSON), writes it to a local Documents subdirectory, logs the run, and fires a "Scheduled Report Ready" local notification. - ScheduledReportScheduler mirrors DomainMonitoringScheduler's BGTaskScheduler approach with its own task identifier (net.cleberg.DomainDig.report.schedule, added to Info.plist) and a daily/weekly cadence. - ScheduledReportsView (Settings → Scheduled Reports): enable toggle, cadence and format pickers, "Generate Now", and a log of past reports each shareable via the existing ExportPresenter share sheet. - Gated behind the existing .automatedMonitoring capability (Pro), consistent with monitoring being the other background-automation feature. - Settings/logs persist via UserDefaults (DomainExportFormat is now Codable), not DomainDataPortabilityService backup/restore — this is local automation configuration, not user-authored content, same reasoning as v4.7.0's watchlist saved views.
Diffstat (limited to 'DomainDig/LocalNotificationService.swift')
-rw-r--r--DomainDig/LocalNotificationService.swift9
1 files changed, 9 insertions, 0 deletions
diff --git a/DomainDig/LocalNotificationService.swift b/DomainDig/LocalNotificationService.swift
index f417619..d3474e3 100644
--- a/DomainDig/LocalNotificationService.swift
+++ b/DomainDig/LocalNotificationService.swift
@@ -140,6 +140,15 @@ final class LocalNotificationService {
)
}
+ func notifyScheduledReportReady(domainCount: Int) async {
+ await schedule(
+ identifier: "scheduled-report-\(UUID().uuidString)",
+ title: "Scheduled Report Ready",
+ body: "Report generated for \(domainCount) domain\(domainCount == 1 ? "" : "s").",
+ interruptionLevel: .active
+ )
+ }
+
func clearAllNotifications() async {
let center = UNUserNotificationCenter.current()
center.removeAllPendingNotificationRequests()