// // damusApp.swift // damus // // Created by William Casarin on 2022-04-01. // import SwiftUI @main struct damusApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate var body: some Scene { WindowGroup { MainView() } } } struct MainView: View { @State var needs_setup = false; @State var keypair: Keypair? = nil; var body: some View { Group { if let kp = keypair, !needs_setup { ContentView(keypair: kp) } else { SetupView() .onReceive(handle_notify(.login)) { notif in needs_setup = false keypair = get_saved_keypair() } } } .dynamicTypeSize(.xSmall ... .xxxLarge) .onReceive(handle_notify(.logout)) { _ in try? clear_keypair() keypair = nil } .onAppear { keypair = get_saved_keypair() } } } class AppDelegate: NSObject, UIApplicationDelegate, UNUserNotificationCenterDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { UNUserNotificationCenter.current().delegate = self return true } // Handle the notification in the foreground state func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { // Display the notification in the foreground completionHandler([.banner, .list, .sound, .badge]) } } func needs_setup() -> Keypair? { return get_saved_keypair() }