// // FeelsApp.swift // Shared // // Created by Trey Tartt on 1/5/22. // import SwiftUI import SwiftData import BackgroundTasks import WidgetKit @main struct FeelsApp: App { @Environment(\.scenePhase) private var scenePhase @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate let dataController = DataController.shared @StateObject var iapManager = IAPManager() @AppStorage(UserDefaultsStore.Keys.firstLaunchDate.rawValue, store: GroupUserDefaults.groupDefaults) private var firstLaunchDate = Date() @State private var showSubscriptionFromWidget = false init() { BGTaskScheduler.shared.cancelAllTaskRequests() BGTaskScheduler.shared.register(forTaskWithIdentifier: BGTask.updateDBMissingID, using: nil) { (task) in BGTask.runFillInMissingDatesTask(task: task as! BGProcessingTask) } UNUserNotificationCenter.current().setBadgeCount(0) } var body: some Scene { WindowGroup { MainTabView(dayView: DayView(viewModel: DayViewViewModel(addMonthStartWeekdayPadding: false)), monthView: MonthView(viewModel: DayViewViewModel(addMonthStartWeekdayPadding: true)), yearView: YearView(viewModel: YearViewModel()), insightsView: InsightsView(), customizeView: CustomizeView()) .modelContainer(dataController.container) .environmentObject(iapManager) .sheet(isPresented: $showSubscriptionFromWidget) { FeelsSubscriptionStoreView() .environmentObject(iapManager) } .onOpenURL { url in if url.scheme == "feels" && url.host == "subscribe" { showSubscriptionFromWidget = true } } }.onChange(of: scenePhase) { _, newPhase in if newPhase == .background { //BGTask.scheduleBackgroundProcessing() WidgetCenter.shared.reloadAllTimelines() } if newPhase == .active { UNUserNotificationCenter.current().setBadgeCount(0) // Check subscription status on each app launch Task { await iapManager.checkSubscriptionStatus() } } } } }