Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

Rev 1 | Rev 17 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
//
2
//  MainView.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 2/17/22.
6
//
7
 
8
import SwiftUI
9
import TTGSnackbar
10
 
11
struct MainView: View {
12
 
13
 
14
 
15
    @StateObject private var appNavigation = AppNavigation()
16
    @StateObject private var networkMonitor = NetworkMonitor()
17
    @State private var showToast : Bool = true
18
 
19
    private var appData = AppData.sharedInstance
20
    private var localNotification = LocalNotificationManager()
21
 
22
    var body: some View {
23
        ZStack {
24
            Color("color_window_background").ignoresSafeArea(.all)
25
 
26
           VStack(spacing: 0) {
27
                switch appNavigation.pageActive
28
                {
29
                    case AppMainPage.intro1 :
30
                        IntroStep1View()
31
                        .environmentObject(appNavigation)
32
                        .environmentObject(networkMonitor)
33
                        .transition(.scale)
34
 
35
                case AppMainPage.intro2 :
36
                        IntroStep2View()
37
                        .environmentObject(appNavigation)
38
                        .environmentObject(networkMonitor)
39
                        .transition(.scale)
40
 
41
                case AppMainPage.intro3 :
42
                        IntroStep3View()
43
                        .environmentObject(appNavigation)
44
                        .environmentObject(networkMonitor)
45
                        .transition(.scale)
46
 
47
                case  AppMainPage.signin :
48
                        SigninView()
49
                        .environmentObject(appNavigation)
50
                        .environmentObject(networkMonitor)
51
                        .transition(.scale)
52
 
53
                case AppMainPage.splash :
54
                    SplashScreenView()
55
                    .environmentObject(appNavigation)
56
                    .environmentObject(networkMonitor)
57
 
58
                case AppMainPage.goodbye :
59
                    GoodByeView()
60
                    .environmentObject(appNavigation)
61
                    .environmentObject(networkMonitor)
2 efrain 62
 
63
                case AppMainPage.goodbyedeleteaccount :
64
                    GoodByeDeleteAccountView()
65
                    .environmentObject(appNavigation)
66
                    .environmentObject(networkMonitor)
1 efrain 67
 
68
                case AppMainPage.videoplayer :
69
                    VideoPlayerView()
70
                    .environmentObject(appNavigation)
71
                    .environmentObject(networkMonitor)
72
 
73
                case AppMainPage.pdfviewer :
74
                    PdfViewerView()
75
                    .environmentObject(appNavigation)
76
                    .environmentObject(networkMonitor)
77
 
78
                case AppMainPage.webviewer :
79
                    WebViewerView()
80
                    .environmentObject(appNavigation)
81
                    .environmentObject(networkMonitor)
82
 
83
                case AppMainPage.download :
84
                    DownloadFileView()
85
                    .environmentObject(appNavigation)
86
                    .environmentObject(networkMonitor)
87
 
88
                default :
89
                    HomeView()
90
                    .environmentObject(appNavigation)
91
                    .environmentObject(networkMonitor)
92
                    .transition(.scale)
93
 
94
                }
95
 
96
                    //Spacer()
97
                    /*
98
                    if(self.networkMonitor.status == .disconnected) {
99
                        Text("The popup")
100
                        .frame(width: UIScreen.main.bounds.width, height: 60)
101
                        .background(Color("color_error_background"))
102
                        .foregroundColor(Color("color_error_foreground"))
103
                        .font(.callout)
104
                    }*/
105
            }
106
        }
107
        .onAppear {
108
 
109
                if appData.refreshContentMessageShowPending {
110
                    let snackbar = TTGSnackbar(message: appData.refreshContentMessage, duration: .forever)
111
                    // Action 1
112
                    snackbar.actionText = Config.LANG_COMMNON_UPDATE
113
                    snackbar.actionTextColor = UIColor( Color("color_snackbar_button_yes"))
114
                    snackbar.actionBlock = { (snackbar) in
115
                        DispatchQueue.main.async {
116
                            snackbar.dismiss()
117
                            refreshContent()
118
                        }
119
                    }
120
                    snackbar.show()
121
 
122
 
123
                }
124
 
125
        }
126
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMMAND_REFRESH_CONTENT))
127
        { data in
128
            if data.userInfo != nil {
129
                let userInfo = data.userInfo!
130
                //userInfo["command"] as? String ?? ""
131
 
132
                let newCapsules = userInfo.index(forKey: "new_capsules") == nil ? 0 : Int(userInfo["new_capsules"] as? String ?? "") ?? 0
133
 
134
                let isForeground = (Int(userInfo["is_foreground"] as? String ?? "") ?? 0) == 1
135
 
136
 
137
                let title = userInfo["title"] as? String ?? ""
138
                let body = userInfo["body"] as? String ?? ""
139
 
140
                let command = Constants.NOTIFICATION_COMMAND_REFRESH_CONTENT
141
                let now = Date()
142
                let dateFormatter = DateFormatter()
143
                dateFormatter.dateFormat = Constants.FORMAT_DATE_YMD
144
 
145
                let timeFormatter = DateFormatter()
146
                timeFormatter.dateFormat = Constants.FORMAT_TIME_12
147
 
148
                let dateOn = dateFormatter.string(from: now)
149
                let timeOn = timeFormatter.string(from: now)
150
 
151
                let userNotificationDao = UserNotificationDao.sharedInstance
152
                var userNotification : UserNotificationModel  = UserNotificationModel(userUuid: appData.userUuid, title: title, body: body, viewed: 0, url: "", command: command, dateOn: dateOn, timeOn: timeOn)
153
 
154
                userNotificationDao.insert(userNotification: userNotification)
155
 
156
 
157
                var message : String =  Config.LANG_MESSAGE_NEW_CONTENT_THERE
158
 
159
 
160
                if isForeground {
161
                    let snackbar = TTGSnackbar(message:  message, duration: .forever)
162
                        // Action 1
163
                    snackbar.actionText = Config.LANG_COMMNON_UPDATE
164
                    snackbar.actionTextColor = UIColor( Color("color_snackbar_button_yes"))
165
                    snackbar.actionBlock = { (snackbar) in
166
                        DispatchQueue.main.async {
167
                            snackbar.dismiss()
168
                            refreshContent()
169
                        }
170
                    }
171
 
172
                    snackbar.show()
173
                }  else {
174
                    appData.refreshContentMessage = message
175
                    appData.refreshContentMessageShowPending = true
176
                    appData.save()
177
                }
178
            }
179
 
180
        }
181
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMMAND_EXIT))
182
       { data in
183
 
184
            DispatchQueue.main.async {
185
                appData.userUuid = ""
186
                appData.userFirstname = ""
187
                appData.userLastname = ""
188
                appData.userEmail = ""
189
                appData.userImage = ""
190
                appData.refreshContentActionRequired = false
191
                appData.refreshContentMessage = ""
192
                appData.refreshContentMessageShowPending = false
193
                appData.signoutActionRequired = false
194
                appData.save()
195
 
196
                appNavigation.pageActive = .goodbye
197
            }
198
 
199
 
200
 
201
 
202
       }.onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_PUSH))
203
        { data in
204
 
205
            let title = data.userInfo?["title"]! as? String ?? ""
206
            let body = data.userInfo?["body"]! as? String ?? ""
207
            let url = data.userInfo?["url"]! as? String ?? ""
208
 
209
            let command = url.isEmpty ? "" : Constants.NOTIFICATION_COMMAND_OPEN_URL
210
            let viewed = url.isEmpty ? 1 : 0
211
            let now = Date()
212
            let dateFormatter = DateFormatter()
213
            dateFormatter.dateFormat = Constants.FORMAT_DATE_YMD
214
 
215
            let timeFormatter = DateFormatter()
216
            timeFormatter.dateFormat = Constants.FORMAT_TIME_12
217
 
218
            let dateOn = dateFormatter.string(from: now)
219
            let timeOn = timeFormatter.string(from: now)
220
 
221
            let userNotificationDao = UserNotificationDao.sharedInstance
222
            var userNotification : UserNotificationModel  = UserNotificationModel(userUuid: appData.userUuid, title: title, body: body, viewed: viewed, url: url, command: command, dateOn: dateOn, timeOn: timeOn)
223
 
224
 
225
 
226
            userNotificationDao.insert(userNotification: userNotification)
227
        }
228
 
229
 
230
    }
231
 
232
    func refreshContent() -> Void {
233
        appData.refreshContentMessage = ""
234
        appData.refreshContentMessageShowPending = false
235
        appData.refreshContentActionRequired = true
236
        appData.save()
237
 
238
        withAnimation {
239
            appNavigation.subpageActive = .topics
240
        }
241
 
242
 
243
    }
244
}
245
 
246
struct MainView_Previews: PreviewProvider {
247
    static var previews: some View {
248
        MainView()
249
    }
250
}
251