Rev 1 | Rev 19 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
//// MainView.swift// twogetskills//// Created by Efrain Yanez Recanatini on 2/17/22.//import SwiftUIimport TTGSnackbarstruct MainView: View {@StateObject private var appNavigation = AppNavigation()@StateObject private var networkMonitor = NetworkMonitor()@State private var showToast : Bool = trueprivate var appData = AppData.sharedInstanceprivate var localNotification = LocalNotificationManager()var body: some View {ZStack {Color("color_window_background").ignoresSafeArea(.all)VStack(spacing: 0) {switch appNavigation.pageActive{case AppMainPage.intro1 :IntroStep1View().environmentObject(appNavigation).environmentObject(networkMonitor).transition(.scale)case AppMainPage.intro2 :IntroStep2View().environmentObject(appNavigation).environmentObject(networkMonitor).transition(.scale)case AppMainPage.intro3 :IntroStep3View().environmentObject(appNavigation).environmentObject(networkMonitor).transition(.scale)case AppMainPage.signin :SigninView().environmentObject(appNavigation).environmentObject(networkMonitor).transition(.scale)case AppMainPage.splash :SplashScreenView().environmentObject(appNavigation).environmentObject(networkMonitor)case AppMainPage.goodbye :GoodByeView().environmentObject(appNavigation).environmentObject(networkMonitor)case AppMainPage.goodbyedeleteaccount :GoodByeDeleteAccountView().environmentObject(appNavigation).environmentObject(networkMonitor)case AppMainPage.videoplayer :VideoPlayerView().environmentObject(appNavigation).environmentObject(networkMonitor)case AppMainPage.pdfviewer :PdfViewerView().environmentObject(appNavigation).environmentObject(networkMonitor)case AppMainPage.webviewer :WebViewerView().environmentObject(appNavigation).environmentObject(networkMonitor)case AppMainPage.download :DownloadFileView().environmentObject(appNavigation).environmentObject(networkMonitor)default :HomeView().environmentObject(appNavigation).environmentObject(networkMonitor).transition(.scale)}//Spacer()/*if(self.networkMonitor.status == .disconnected) {Text("The popup").frame(width: UIScreen.main.bounds.width, height: 60).background(Color("color_error_background")).foregroundColor(Color("color_error_foreground")).font(.callout)}*/}}.onAppear {if appData.refreshContentMessageShowPending {let snackbar = TTGSnackbar(message: appData.refreshContentMessage, duration: .forever)// Action 1snackbar.actionText = Config.LANG_COMMNON_UPDATEsnackbar.actionTextColor = UIColor( Color("color_snackbar_button_yes"))snackbar.actionBlock = { (snackbar) inDispatchQueue.main.async {snackbar.dismiss()refreshContent()}}snackbar.show()}}.onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMMAND_REFRESH_CONTENT)){ data inif data.userInfo != nil {let userInfo = data.userInfo!//userInfo["command"] as? String ?? ""let newCapsules = userInfo.index(forKey: "new_capsules") == nil ? 0 : Int(userInfo["new_capsules"] as? String ?? "") ?? 0let isForeground = (Int(userInfo["is_foreground"] as? String ?? "") ?? 0) == 1let title = userInfo["title"] as? String ?? ""let body = userInfo["body"] as? String ?? ""let command = Constants.NOTIFICATION_COMMAND_REFRESH_CONTENTlet now = Date()let dateFormatter = DateFormatter()dateFormatter.dateFormat = Constants.FORMAT_DATE_YMDlet timeFormatter = DateFormatter()timeFormatter.dateFormat = Constants.FORMAT_TIME_12let dateOn = dateFormatter.string(from: now)let timeOn = timeFormatter.string(from: now)let userNotificationDao = UserNotificationDao.sharedInstancevar userNotification : UserNotificationModel = UserNotificationModel(userUuid: appData.userUuid, title: title, body: body, viewed: 0, url: "", command: command, dateOn: dateOn, timeOn: timeOn)userNotificationDao.insert(userNotification: userNotification)var message : String = Config.LANG_MESSAGE_NEW_CONTENT_THEREif isForeground {let snackbar = TTGSnackbar(message: message, duration: .forever)// Action 1snackbar.actionText = Config.LANG_COMMNON_UPDATEsnackbar.actionTextColor = UIColor( Color("color_snackbar_button_yes"))snackbar.actionBlock = { (snackbar) inDispatchQueue.main.async {snackbar.dismiss()refreshContent()}}snackbar.show()} else {appData.refreshContentMessage = messageappData.refreshContentMessageShowPending = trueappData.save()}}}.onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMMAND_EXIT)){ data inDispatchQueue.main.async {appData.userUuid = ""appData.userFirstname = ""appData.userLastname = ""appData.userEmail = ""appData.userImage = ""appData.refreshContentActionRequired = falseappData.refreshContentMessage = ""appData.refreshContentMessageShowPending = falseappData.signoutActionRequired = falseappData.save()appNavigation.pageActive = .goodbye}}.onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_PUSH)){ data inlet title = data.userInfo?["title"]! as? String ?? ""let body = data.userInfo?["body"]! as? String ?? ""let url = data.userInfo?["url"]! as? String ?? ""let command = url.isEmpty ? "" : Constants.NOTIFICATION_COMMAND_OPEN_URLlet viewed = url.isEmpty ? 1 : 0let now = Date()let dateFormatter = DateFormatter()dateFormatter.dateFormat = Constants.FORMAT_DATE_YMDlet timeFormatter = DateFormatter()timeFormatter.dateFormat = Constants.FORMAT_TIME_12let dateOn = dateFormatter.string(from: now)let timeOn = timeFormatter.string(from: now)let userNotificationDao = UserNotificationDao.sharedInstancevar userNotification : UserNotificationModel = UserNotificationModel(userUuid: appData.userUuid, title: title, body: body, viewed: viewed, url: url, command: command, dateOn: dateOn, timeOn: timeOn)userNotificationDao.insert(userNotification: userNotification)}}func refreshContent() -> Void {appData.refreshContentMessage = ""appData.refreshContentMessageShowPending = falseappData.refreshContentActionRequired = trueappData.save()withAnimation {appNavigation.subpageActive = .topics}}}struct MainView_Previews: PreviewProvider {static var previews: some View {MainView()}}