summaryrefslogtreecommitdiff
path: root/DomainDig/DomainDigApp.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-23 22:15:20 -0500
committerChristian Cleberg <[email protected]>2026-04-23 22:15:20 -0500
commitf045a5d339a796f40a9e958436ebc6f5314bdab8 (patch)
treec1d122f3ed7a9110dfcd001c86a56ed67980dfcc /DomainDig/DomainDigApp.swift
parent6c23daaaba2a954220ece2afa7193dbdcad55c22 (diff)
downloaddomain-dig-f045a5d339a796f40a9e958436ebc6f5314bdab8.tar.gz
domain-dig-f045a5d339a796f40a9e958436ebc6f5314bdab8.tar.bz2
domain-dig-f045a5d339a796f40a9e958436ebc6f5314bdab8.zip
feat(v3.4.0): add backup, restore, and data portability
• introduce versioned DomainDig backup format • add full backup export/import with merge and replace modes • implement data validation and conflict handling • add partial exports for tracked domains, workflows, and history • add Data Portability settings section • support Files/iCloud Drive import and export • harden migrations for evolving local models • extend CLI with backup export and validation
Diffstat (limited to 'DomainDig/DomainDigApp.swift')
-rw-r--r--DomainDig/DomainDigApp.swift13
1 files changed, 13 insertions, 0 deletions
diff --git a/DomainDig/DomainDigApp.swift b/DomainDig/DomainDigApp.swift
index ae81654..f7cd15e 100644
--- a/DomainDig/DomainDigApp.swift
+++ b/DomainDig/DomainDigApp.swift
@@ -9,12 +9,14 @@ import SwiftUI
@main
struct DomainDigApp: App {
+ @Environment(\.scenePhase) private var scenePhase
@AppStorage(AppDensity.userDefaultsKey) private var density = AppDensity.compact.rawValue
@State private var viewModel = DomainViewModel()
@State private var purchaseService = PurchaseService.shared
init() {
LocalNotificationService.shared.configureForegroundPresentation()
+ DomainMonitoringScheduler.shared.registerBackgroundTask()
}
var body: some Scene {
@@ -24,7 +26,18 @@ struct DomainDigApp: App {
.task {
let _ = purchaseService.currentTier
await purchaseService.refreshEntitlements()
+ viewModel.refreshMonitoringState()
+ await viewModel.refreshMonitoringAuthorizationStatus()
+ viewModel.monitoringStatusMessage = DomainMonitoringScheduler.shared.syncSchedule()
}
}
+ .onChange(of: scenePhase) { _, newValue in
+ guard newValue == .active else { return }
+ viewModel.refreshMonitoringState()
+ Task {
+ await viewModel.refreshMonitoringAuthorizationStatus()
+ }
+ viewModel.monitoringStatusMessage = DomainMonitoringScheduler.shared.syncSchedule()
+ }
}
}