Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

Rev 19 | | 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
 
21 efrain 19
    private var appData = Environment(\.appData).wrappedValue
1 efrain 20
    private var localNotification = LocalNotificationManager()
21 efrain 21
 
17 efrain 22
 
1 efrain 23
 
24
    var body: some View {
25
        ZStack {
26
            Color("color_window_background").ignoresSafeArea(.all)
27
 
28
           VStack(spacing: 0) {
29
                switch appNavigation.pageActive
30
                {
31
                    case AppMainPage.intro1 :
32
                        IntroStep1View()
33
                        .environmentObject(appNavigation)
34
                        .environmentObject(networkMonitor)
35
                        .transition(.scale)
36
 
37
                case AppMainPage.intro2 :
38
                        IntroStep2View()
39
                        .environmentObject(appNavigation)
40
                        .environmentObject(networkMonitor)
41
                        .transition(.scale)
42
 
43
                case AppMainPage.intro3 :
44
                        IntroStep3View()
45
                        .environmentObject(appNavigation)
46
                        .environmentObject(networkMonitor)
47
                        .transition(.scale)
48
 
49
                case  AppMainPage.signin :
50
                        SigninView()
51
                        .environmentObject(appNavigation)
52
                        .environmentObject(networkMonitor)
53
                        .transition(.scale)
54
 
55
                case AppMainPage.splash :
56
                    SplashScreenView()
57
                    .environmentObject(appNavigation)
58
                    .environmentObject(networkMonitor)
59
 
60
                case AppMainPage.goodbye :
61
                    GoodByeView()
62
                    .environmentObject(appNavigation)
63
                    .environmentObject(networkMonitor)
2 efrain 64
 
65
                case AppMainPage.goodbyedeleteaccount :
66
                    GoodByeDeleteAccountView()
67
                    .environmentObject(appNavigation)
68
                    .environmentObject(networkMonitor)
1 efrain 69
 
70
                case AppMainPage.videoplayer :
71
                    VideoPlayerView()
72
                    .environmentObject(appNavigation)
73
                    .environmentObject(networkMonitor)
74
 
75
                case AppMainPage.pdfviewer :
76
                    PdfViewerView()
77
                    .environmentObject(appNavigation)
78
                    .environmentObject(networkMonitor)
79
 
80
                case AppMainPage.webviewer :
81
                    WebViewerView()
82
                    .environmentObject(appNavigation)
83
                    .environmentObject(networkMonitor)
84
 
85
                case AppMainPage.download :
86
                    DownloadFileView()
87
                    .environmentObject(appNavigation)
88
                    .environmentObject(networkMonitor)
89
 
90
                default :
91
                    HomeView()
92
                    .environmentObject(appNavigation)
93
                    .environmentObject(networkMonitor)
94
                    .transition(.scale)
95
 
96
                }
97
 
98
                    //Spacer()
99
                    /*
100
                    if(self.networkMonitor.status == .disconnected) {
101
                        Text("The popup")
102
                        .frame(width: UIScreen.main.bounds.width, height: 60)
103
                        .background(Color("color_error_background"))
104
                        .foregroundColor(Color("color_error_foreground"))
105
                        .font(.callout)
106
                    }*/
107
            }
108
        }
109
        .onAppear {
110
 
111
                if appData.refreshContentMessageShowPending {
112
                    let snackbar = TTGSnackbar(message: appData.refreshContentMessage, duration: .forever)
113
                    // Action 1
114
                    snackbar.actionText = Config.LANG_COMMNON_UPDATE
115
                    snackbar.actionTextColor = UIColor( Color("color_snackbar_button_yes"))
116
                    snackbar.actionBlock = { (snackbar) in
117
                        DispatchQueue.main.async {
118
                            snackbar.dismiss()
119
                            refreshContent()
120
                        }
121
                    }
122
                    snackbar.show()
123
 
124
 
125
                }
126
 
127
        }
128
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMMAND_REFRESH_CONTENT))
129
        { data in
130
            if data.userInfo != nil {
131
                let userInfo = data.userInfo!
132
                //userInfo["command"] as? String ?? ""
133
 
134
                let newCapsules = userInfo.index(forKey: "new_capsules") == nil ? 0 : Int(userInfo["new_capsules"] as? String ?? "") ?? 0
135
 
136
                let isForeground = (Int(userInfo["is_foreground"] as? String ?? "") ?? 0) == 1
137
 
138
 
139
                let title = userInfo["title"] as? String ?? ""
140
                let body = userInfo["body"] as? String ?? ""
141
 
142
                let command = Constants.NOTIFICATION_COMMAND_REFRESH_CONTENT
143
                let now = Date()
144
                let dateFormatter = DateFormatter()
145
                dateFormatter.dateFormat = Constants.FORMAT_DATE_YMD
146
 
147
                let timeFormatter = DateFormatter()
148
                timeFormatter.dateFormat = Constants.FORMAT_TIME_12
149
 
150
                let dateOn = dateFormatter.string(from: now)
151
                let timeOn = timeFormatter.string(from: now)
152
 
17 efrain 153
                let userNotificationDao = UserNotificationDao()
1 efrain 154
                var userNotification : UserNotificationModel  = UserNotificationModel(userUuid: appData.userUuid, title: title, body: body, viewed: 0, url: "", command: command, dateOn: dateOn, timeOn: timeOn)
155
 
156
                userNotificationDao.insert(userNotification: userNotification)
157
 
158
 
159
                var message : String =  Config.LANG_MESSAGE_NEW_CONTENT_THERE
160
 
161
 
162
                if isForeground {
163
                    let snackbar = TTGSnackbar(message:  message, duration: .forever)
164
                        // Action 1
165
                    snackbar.actionText = Config.LANG_COMMNON_UPDATE
166
                    snackbar.actionTextColor = UIColor( Color("color_snackbar_button_yes"))
167
                    snackbar.actionBlock = { (snackbar) in
168
                        DispatchQueue.main.async {
169
                            snackbar.dismiss()
170
                            refreshContent()
171
                        }
172
                    }
173
 
174
                    snackbar.show()
175
                }  else {
176
                    appData.refreshContentMessage = message
177
                    appData.refreshContentMessageShowPending = true
178
                    appData.save()
179
                }
180
            }
181
 
182
        }
21 efrain 183
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_DEVICE_REGISTER_NAME))
17 efrain 184
        { data in
185
            if data.userInfo != nil {
186
                let userInfo = data.userInfo!
187
                let new_uuid = userInfo["uuid"] as? String ?? ""
188
 
189
 
21 efrain 190
 
17 efrain 191
                if !new_uuid.isEmpty {
192
                    if appData.deviceUuid != new_uuid {
21 efrain 193
                        print("Register Device Notification : \(new_uuid)")
17 efrain 194
 
195
                        var sync = SyncModel()
196
                        sync.data = new_uuid
197
                        sync.type = Constants.SYNC_ADAPTER_TYPE_DEVICE
198
 
199
                        let syncDao = SyncDao()
21 efrain 200
                        let syncID = syncDao.insert(record: sync)
201
 
202
                        if syncID > 0 {
17 efrain 203
                            appData.deviceUuid = new_uuid
204
                            appData.save()
205
 
21 efrain 206
                            sync.id = syncID
17 efrain 207
                            let syncAdapter = SyncAdapter()
21 efrain 208
                            syncAdapter.registerDevice(record: sync);
17 efrain 209
                        }
21 efrain 210
                    } else {
211
                        var sync = SyncModel()
212
                        sync.data = new_uuid
213
                        sync.type = Constants.SYNC_ADAPTER_TYPE_DEVICE
214
 
215
                        let syncDao = SyncDao()
216
                        let syncID = syncDao.insert(record: sync)
217
 
218
                        if syncID > 0 {
219
 
220
                            sync.id = syncID
221
                            let syncAdapter = SyncAdapter()
222
                            syncAdapter.registerDevice(record: sync);
223
                        }
224
 
17 efrain 225
                    }
226
                }
227
            }
21 efrain 228
        }
17 efrain 229
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_FCM_REGISTER_NAME))
230
        { data in
231
            if data.userInfo != nil {
232
                let userInfo = data.userInfo!
233
                let token = userInfo["token"] as? String ?? ""
234
 
235
 
236
                if !token.isEmpty {
237
                    if appData.fcmToken != token  {
21 efrain 238
                        print("Register FCM Notification : \(token)")
239
 
17 efrain 240
                        var sync = SyncModel()
241
                        sync.data = token
242
                        sync.type = Constants.SYNC_ADAPTER_TYPE_FCM
21 efrain 243
 
244
                        let syncDao = SyncDao()
245
                        let syncID = syncDao.insert(record: sync)
246
                        if syncID > 0 {
247
                            sync.id = syncID
17 efrain 248
 
249
                            appData.fcmToken = token
250
                            appData.save()
19 efrain 251
 
21 efrain 252
                            if !appData.deviceUuid.isEmpty {
17 efrain 253
 
21 efrain 254
                                let syncAdapter = SyncAdapter()
255
                                syncAdapter.registerFcm(record: sync)
256
                            }
17 efrain 257
                        }
258
                    }
259
                }
260
            }
261
        }
1 efrain 262
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMMAND_EXIT))
263
       { data in
264
 
17 efrain 265
           /*if data.userInfo != nil {
266
               let userInfo = data.userInfo!
267
               let isForeground = (Int(userInfo["is_foreground"] as? String ?? "") ?? 0) == 1
268
 
269
               if isForeground {
270
                   appData.signoutActionRequired = true
271
                   appData.save()
272
               } else {
273
                   DispatchQueue.main.async {
274
 
275
 
276
 
277
                       appData.userUuid = ""
278
                       appData.userFirstname = ""
279
                       appData.userLastname = ""
280
                       appData.userEmail = ""
281
                       appData.userImage = ""
282
                       appData.refreshContentActionRequired = false
283
                       appData.refreshContentMessage = ""
284
                       appData.refreshContentMessageShowPending = false
285
                       appData.signoutActionRequired = false
286
                       appData.save()
287
 
288
                       appNavigation.pageActive = .goodbye
289
 
290
 
291
                   }
292
               }
293
 
294
           }*/
1 efrain 295
 
17 efrain 296
           appNavigation.pageActive = .goodbye
297
 
298
 
1 efrain 299
 
300
 
301
 
302
       }.onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_PUSH))
303
        { data in
304
 
305
            let title = data.userInfo?["title"]! as? String ?? ""
306
            let body = data.userInfo?["body"]! as? String ?? ""
307
            let url = data.userInfo?["url"]! as? String ?? ""
308
 
309
            let command = url.isEmpty ? "" : Constants.NOTIFICATION_COMMAND_OPEN_URL
310
            let viewed = url.isEmpty ? 1 : 0
311
            let now = Date()
312
            let dateFormatter = DateFormatter()
313
            dateFormatter.dateFormat = Constants.FORMAT_DATE_YMD
314
 
315
            let timeFormatter = DateFormatter()
316
            timeFormatter.dateFormat = Constants.FORMAT_TIME_12
317
 
318
            let dateOn = dateFormatter.string(from: now)
319
            let timeOn = timeFormatter.string(from: now)
320
 
17 efrain 321
            let userNotificationDao = UserNotificationDao()
1 efrain 322
            var userNotification : UserNotificationModel  = UserNotificationModel(userUuid: appData.userUuid, title: title, body: body, viewed: viewed, url: url, command: command, dateOn: dateOn, timeOn: timeOn)
323
 
324
 
325
 
326
            userNotificationDao.insert(userNotification: userNotification)
21 efrain 327
        }.onAppear {
328
            Device.sharedInstance.generateUUID()
1 efrain 329
        }
330
 
331
 
332
    }
333
 
334
    func refreshContent() -> Void {
335
        appData.refreshContentMessage = ""
336
        appData.refreshContentMessageShowPending = false
337
        appData.refreshContentActionRequired = true
338
        appData.save()
339
 
340
        withAnimation {
341
            appNavigation.subpageActive = .topics
342
        }
343
 
344
 
345
    }
346
}
347
 
348
struct MainView_Previews: PreviewProvider {
349
    static var previews: some View {
350
        MainView()
351
    }
352
}
353