Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>

This commit is contained in:
Matt Bruce 2026-02-16 15:10:04 -06:00
parent 79ec9a57f3
commit 881ac5ad4c
2 changed files with 0 additions and 32 deletions

View File

@ -173,13 +173,6 @@ final class RitualStore: RitualStoreProviding {
refresh()
}
/// Forces a refresh path intended for external sync probes (for example,
/// runtimes where remote change callbacks may be delayed while foregrounded).
func refreshFromExternalSyncProbe() {
modelContext = ModelContext(modelContainer)
refresh()
}
func ritualProgress(for ritual: Ritual) -> Double {
let habits = ritual.habits
guard !habits.isEmpty else { return 0 }

View File

@ -11,7 +11,6 @@ struct RootView: View {
@State private var analyticsPrewarmTask: Task<Void, Never>?
@State private var cloudKitFallbackRefreshTask: Task<Void, Never>?
@State private var aggressiveCloudKitRefreshTasks: [Task<Void, Never>] = []
@State private var macSyncSafetyNetTask: Task<Void, Never>?
@State private var isForegroundRefreshing = false
@State private var isResumingFromBackground = false
private let foregroundRefreshMinimumSeconds: TimeInterval = 0.15
@ -137,14 +136,12 @@ struct RootView: View {
)
scheduleAggressiveCloudKitRefreshes()
scheduleCloudKitFallbackRefresh()
startMacSyncSafetyNetIfNeeded()
} else if newPhase == .background {
// Prepare for next resume
isResumingFromBackground = true
cloudKitFallbackRefreshTask?.cancel()
aggressiveCloudKitRefreshTasks.forEach { $0.cancel() }
aggressiveCloudKitRefreshTasks.removeAll()
macSyncSafetyNetTask?.cancel()
}
}
.onChange(of: selectedTab) { _, _ in
@ -159,12 +156,7 @@ struct RootView: View {
.onOpenURL { url in
handleURL(url)
}
.onAppear {
startMacSyncSafetyNetIfNeeded()
}
.onDisappear {
macSyncSafetyNetTask?.cancel()
macSyncSafetyNetTask = nil
aggressiveCloudKitRefreshTasks.forEach { $0.cancel() }
aggressiveCloudKitRefreshTasks.removeAll()
}
@ -250,23 +242,6 @@ struct RootView: View {
}
}
/// iOS-on-Mac can miss immediate remote push delivery while foregrounded.
/// Keep a lightweight active-phase polling safety net for CloudKit merges.
private func startMacSyncSafetyNetIfNeeded() {
let isMacRuntime = ProcessInfo.processInfo.isiOSAppOnMac || UIDevice.current.userInterfaceIdiom == .mac
guard isMacRuntime else { return }
guard scenePhase == .active else { return }
guard macSyncSafetyNetTask == nil else { return }
macSyncSafetyNetTask = Task { @MainActor in
while !Task.isCancelled {
try? await Task.sleep(for: .seconds(3))
guard !Task.isCancelled else { return }
guard scenePhase == .active else { continue }
store.refreshFromExternalSyncProbe()
}
}
}
}
#Preview {