Files
Reflect/Shared/BGTask.swift
Trey t f7da61d6ca Consolidate extension data providers and add side effects catch-up
- Create unified ExtensionDataProvider for Widget and Watch targets
- Remove duplicate WatchDataProvider and WatchConnectivityManager from Watch App
- Add side effects catch-up mechanism in MoodLogger for widget votes
- Process pending side effects on app launch and midnight background task
- Reduce ~450 lines of duplicated code across targets

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 22:50:23 -06:00

46 lines
1.3 KiB
Swift

//
// BGTask.swift
// Feels (iOS)
//
// Created by Trey Tartt on 1/12/22.
//
import Foundation
import BackgroundTasks
class BGTask {
static let updateDBMissingID = "com.tt.ifeel.dbUpdateMissing"
@MainActor
class func runFillInMissingDatesTask(task: BGProcessingTask) {
BGTask.scheduleBackgroundProcessing()
task.expirationHandler = {
task.setTaskCompleted(success: false)
}
DataController.shared.fillInMissingDates()
// Catch up on any side effects from widget/watch votes
MoodLogger.shared.processPendingSideEffects()
task.setTaskCompleted(success: true)
}
class func scheduleBackgroundProcessing() {
let request = BGProcessingTaskRequest(identifier: BGTask.updateDBMissingID)
request.requiresNetworkConnectivity = false
request.requiresExternalPower = false
var runDate = Calendar.current.date(byAdding: .day, value: 1, to: Date())
runDate = Calendar.current.date(bySettingHour: 0, minute: 1, second: 0, of: runDate!)
request.earliestBeginDate = runDate
do {
try BGTaskScheduler.shared.submit(request)
} catch {
print("Could not schedule image fetch: (error)")
}
}
}