Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

Rev 19 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

//
//  MainView.swift
//  twogetskills
//
//  Created by Efrain Yanez Recanatini on 2/17/22.
//

import SwiftUI
import TTGSnackbar

struct MainView: View {
    
   
    
    @StateObject private var appNavigation = AppNavigation()
    @StateObject private var networkMonitor = NetworkMonitor()
    @State private var showToast : Bool = true
    
    private var appData = Environment(\.appData).wrappedValue
    private 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 1
                    snackbar.actionText = Config.LANG_COMMNON_UPDATE
                    snackbar.actionTextColor = UIColor( Color("color_snackbar_button_yes"))
                    snackbar.actionBlock = { (snackbar) in
                        DispatchQueue.main.async {
                            snackbar.dismiss()
                            refreshContent()
                        }
                    }
                    snackbar.show()
                    
                    
                }
 
        }
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMMAND_REFRESH_CONTENT))
        { data in
            if 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 ?? "") ?? 0
  
                let isForeground = (Int(userInfo["is_foreground"] as? String ?? "") ?? 0) == 1
                
 
                let title = userInfo["title"] as? String ?? ""
                let body = userInfo["body"] as? String ?? ""
                    
                let command = Constants.NOTIFICATION_COMMAND_REFRESH_CONTENT
                let now = Date()
                let dateFormatter = DateFormatter()
                dateFormatter.dateFormat = Constants.FORMAT_DATE_YMD
                        
                let timeFormatter = DateFormatter()
                timeFormatter.dateFormat = Constants.FORMAT_TIME_12
                        
                let dateOn = dateFormatter.string(from: now)
                let timeOn = timeFormatter.string(from: now)
                        
                let userNotificationDao = UserNotificationDao()
                var 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_THERE
 
                
                if isForeground {
                    let snackbar = TTGSnackbar(message:  message, duration: .forever)
                        // Action 1
                    snackbar.actionText = Config.LANG_COMMNON_UPDATE
                    snackbar.actionTextColor = UIColor( Color("color_snackbar_button_yes"))
                    snackbar.actionBlock = { (snackbar) in
                        DispatchQueue.main.async {
                            snackbar.dismiss()
                            refreshContent()
                        }
                    }

                    snackbar.show()
                }  else {
                    appData.refreshContentMessage = message
                    appData.refreshContentMessageShowPending = true
                    appData.save()
                }
            }

        }
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_DEVICE_REGISTER_NAME))
        { data in
            if data.userInfo != nil {
                let userInfo = data.userInfo!
                let new_uuid = userInfo["uuid"] as? String ?? ""
                
                
                
                if !new_uuid.isEmpty {
                    if appData.deviceUuid != new_uuid {
                        print("Register Device Notification : \(new_uuid)")
                        
                        var sync = SyncModel()
                        sync.data = new_uuid
                        sync.type = Constants.SYNC_ADAPTER_TYPE_DEVICE
                        
                        let syncDao = SyncDao()
                        let syncID = syncDao.insert(record: sync)
                        
                        if syncID > 0 {
                            appData.deviceUuid = new_uuid
                            appData.save()
                            
                            sync.id = syncID
                            let syncAdapter = SyncAdapter()
                            syncAdapter.registerDevice(record: sync);
                        }
                    } else {
                        var sync = SyncModel()
                        sync.data = new_uuid
                        sync.type = Constants.SYNC_ADAPTER_TYPE_DEVICE
                        
                        let syncDao = SyncDao()
                        let syncID = syncDao.insert(record: sync)
                        
                        if syncID > 0 {

                            sync.id = syncID
                            let syncAdapter = SyncAdapter()
                            syncAdapter.registerDevice(record: sync);
                        }
                        
                    }
                }
            }
        }
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_FCM_REGISTER_NAME))
        { data in
            if data.userInfo != nil {
                let userInfo = data.userInfo!
                let token = userInfo["token"] as? String ?? ""
                
   
                if !token.isEmpty {
                    if appData.fcmToken != token  {
                        print("Register FCM Notification : \(token)")
                        
                        var sync = SyncModel()
                        sync.data = token
                        sync.type = Constants.SYNC_ADAPTER_TYPE_FCM
                        
                        let syncDao = SyncDao()
                        let syncID = syncDao.insert(record: sync)
                        if syncID > 0 {
                            sync.id = syncID
                            
                            appData.fcmToken = token
                            appData.save()
                            
                            if !appData.deviceUuid.isEmpty {
                                
                                let syncAdapter = SyncAdapter()
                                syncAdapter.registerFcm(record: sync)
                            }
                        }
                    }
                }
            }
        }
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMMAND_EXIT))
       { data in
            
           /*if data.userInfo != nil {
               let userInfo = data.userInfo!
               let isForeground = (Int(userInfo["is_foreground"] as? String ?? "") ?? 0) == 1
               
               if isForeground {
                   appData.signoutActionRequired = true
                   appData.save()
               } else {
                   DispatchQueue.main.async {
                       
                       
                       
                       appData.userUuid = ""
                       appData.userFirstname = ""
                       appData.userLastname = ""
                       appData.userEmail = ""
                       appData.userImage = ""
                       appData.refreshContentActionRequired = false
                       appData.refreshContentMessage = ""
                       appData.refreshContentMessageShowPending = false
                       appData.signoutActionRequired = false
                       appData.save()
                       
                       appNavigation.pageActive = .goodbye
                       
                       
                   }
               }
               
           }*/

           appNavigation.pageActive = .goodbye
            

           
           

       }.onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_PUSH))
        { data in
            
            let 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_URL
            let viewed = url.isEmpty ? 1 : 0
            let now = Date()
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = Constants.FORMAT_DATE_YMD
                
            let timeFormatter = DateFormatter()
            timeFormatter.dateFormat = Constants.FORMAT_TIME_12
                
            let dateOn = dateFormatter.string(from: now)
            let timeOn = timeFormatter.string(from: now)
                
            let userNotificationDao = UserNotificationDao()
            var userNotification : UserNotificationModel  = UserNotificationModel(userUuid: appData.userUuid, title: title, body: body, viewed: viewed, url: url, command: command, dateOn: dateOn, timeOn: timeOn)
                
                

            userNotificationDao.insert(userNotification: userNotification)
        }.onAppear {
            Device.sharedInstance.generateUUID()
        }
        
        
    }

    func refreshContent() -> Void {
        appData.refreshContentMessage = ""
        appData.refreshContentMessageShowPending = false
        appData.refreshContentActionRequired = true
        appData.save()
        
        withAnimation {
            appNavigation.subpageActive = .topics
        }
 
        
    }
}

struct MainView_Previews: PreviewProvider {
    static var previews: some View {
        MainView()
    }
}