diff options
| author | Christian Cleberg <[email protected]> | 2026-04-23 22:15:20 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-04-23 22:15:20 -0500 |
| commit | f045a5d339a796f40a9e958436ebc6f5314bdab8 (patch) | |
| tree | c1d122f3ed7a9110dfcd001c86a56ed67980dfcc /DomainDig/DomainDigApp.swift | |
| parent | 6c23daaaba2a954220ece2afa7193dbdcad55c22 (diff) | |
| download | domain-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.swift | 13 |
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() + } } } |
