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()
}
}