Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 63 | | 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
17 efrain 9
import TTGSnackbar
1 efrain 10
 
11
struct MainView: View {
17 efrain 12
 
13
 
14
 
1 efrain 15
    @StateObject private var appNavigation = AppNavigation()
16
    @StateObject private var networkMonitor = NetworkMonitor()
17
    @State private var showToast : Bool = true
18
 
64 efrain 19
    private var appData = Environment(\.appData).wrappedValue
17 efrain 20
    private var localNotification = LocalNotificationManager()
64 efrain 21
 
61 efrain 22
 
1 efrain 23
 
24
    var body: some View {
25
        ZStack {
26
            Color("color_window_background").ignoresSafeArea(.all)
27
 
28
           VStack(spacing: 0) {
8 efrain 29
                switch appNavigation.pageActive
30
                {
31
                    case AppMainPage.intro1 :
1 efrain 32
                        IntroStep1View()
33
                        .environmentObject(appNavigation)
34
                        .environmentObject(networkMonitor)
35
                        .transition(.scale)
36
 
8 efrain 37
                case AppMainPage.intro2 :
1 efrain 38
                        IntroStep2View()
39
                        .environmentObject(appNavigation)
40
                        .environmentObject(networkMonitor)
41
                        .transition(.scale)
42
 
8 efrain 43
                case AppMainPage.intro3 :
1 efrain 44
                        IntroStep3View()
45
                        .environmentObject(appNavigation)
46
                        .environmentObject(networkMonitor)
47
                        .transition(.scale)
48
 
8 efrain 49
                case  AppMainPage.signin :
1 efrain 50
                        SigninView()
51
                        .environmentObject(appNavigation)
52
                        .environmentObject(networkMonitor)
53
                        .transition(.scale)
54
 
8 efrain 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)
45 efrain 64
 
65
                case AppMainPage.goodbyedeleteaccount :
66
                    GoodByeDeleteAccountView()
67
                    .environmentObject(appNavigation)
68
                    .environmentObject(networkMonitor)
17 efrain 69
 
70
                case AppMainPage.videoplayer :
71
                    VideoPlayerView()
72
                    .environmentObject(appNavigation)
73
                    .environmentObject(networkMonitor)
8 efrain 74
 
17 efrain 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
 
19 efrain 85
                case AppMainPage.download :
86
                    DownloadFileView()
87
                    .environmentObject(appNavigation)
88
                    .environmentObject(networkMonitor)
89
 
8 efrain 90
                default :
91
                    HomeView()
92
                    .environmentObject(appNavigation)
93
                    .environmentObject(networkMonitor)
94
                    .transition(.scale)
1 efrain 95
 
8 efrain 96
                }
1 efrain 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
            }
24 efrain 108
        }
109
        .onAppear {
39 efrain 110
 
32 efrain 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"))
38 efrain 116
                    snackbar.actionBlock = { (snackbar) in
39 efrain 117
                        DispatchQueue.main.async {
38 efrain 118
                            snackbar.dismiss()
119
                            refreshContent()
120
                        }
39 efrain 121
                    }
32 efrain 122
                    snackbar.show()
123
 
124
 
125
                }
39 efrain 126
 
24 efrain 127
        }
128
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMMAND_REFRESH_CONTENT))
17 efrain 129
        { data in
130
            if data.userInfo != nil {
40 efrain 131
                let userInfo = data.userInfo!
132
                //userInfo["command"] as? String ?? ""
17 efrain 133
 
43 efrain 134
                let newCapsules = userInfo.index(forKey: "new_capsules") == nil ? 0 : Int(userInfo["new_capsules"] as? String ?? "") ?? 0
135
 
40 efrain 136
                let isForeground = (Int(userInfo["is_foreground"] as? String ?? "") ?? 0) == 1
137
 
42 efrain 138
 
139
                let title = userInfo["title"] as? String ?? ""
140
                let body = userInfo["body"] as? String ?? ""
27 efrain 141
 
42 efrain 142
                let command = Constants.NOTIFICATION_COMMAND_REFRESH_CONTENT
143
                let now = Date()
144
                let dateFormatter = DateFormatter()
145
                dateFormatter.dateFormat = Constants.FORMAT_DATE_YMD
27 efrain 146
 
42 efrain 147
                let timeFormatter = DateFormatter()
148
                timeFormatter.dateFormat = Constants.FORMAT_TIME_12
27 efrain 149
 
42 efrain 150
                let dateOn = dateFormatter.string(from: now)
151
                let timeOn = timeFormatter.string(from: now)
27 efrain 152
 
61 efrain 153
                let userNotificationDao = UserNotificationDao()
42 efrain 154
                var userNotification : UserNotificationModel  = UserNotificationModel(userUuid: appData.userUuid, title: title, body: body, viewed: 0, url: "", command: command, dateOn: dateOn, timeOn: timeOn)
27 efrain 155
 
42 efrain 156
                userNotificationDao.insert(userNotification: userNotification)
27 efrain 157
 
158
 
44 efrain 159
                var message : String =  Config.LANG_MESSAGE_NEW_CONTENT_THERE
160
 
42 efrain 161
 
162
                if isForeground {
163
                    let snackbar = TTGSnackbar(message:  message, duration: .forever)
31 efrain 164
                        // Action 1
42 efrain 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()
38 efrain 171
                        }
42 efrain 172
                    }
39 efrain 173
 
42 efrain 174
                    snackbar.show()
175
                }  else {
176
                    appData.refreshContentMessage = message
177
                    appData.refreshContentMessageShowPending = true
178
                    appData.save()
17 efrain 179
                }
180
            }
1 efrain 181
 
182
        }
64 efrain 183
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_DEVICE_REGISTER_NAME))
61 efrain 184
        { data in
185
            if data.userInfo != nil {
186
                let userInfo = data.userInfo!
187
                let new_uuid = userInfo["uuid"] as? String ?? ""
188
 
189
 
64 efrain 190
 
61 efrain 191
                if !new_uuid.isEmpty {
192
                    if appData.deviceUuid != new_uuid {
64 efrain 193
                        print("Register Device Notification : \(new_uuid)")
61 efrain 194
 
195
                        var sync = SyncModel()
196
                        sync.data = new_uuid
197
                        sync.type = Constants.SYNC_ADAPTER_TYPE_DEVICE
198
 
199
                        let syncDao = SyncDao()
64 efrain 200
                        let syncID = syncDao.insert(record: sync)
201
 
202
                        if syncID > 0 {
61 efrain 203
                            appData.deviceUuid = new_uuid
204
                            appData.save()
205
 
64 efrain 206
                            sync.id = syncID
61 efrain 207
                            let syncAdapter = SyncAdapter()
64 efrain 208
                            syncAdapter.registerDevice(record: sync);
61 efrain 209
                        }
64 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
 
61 efrain 225
                    }
226
                }
227
            }
64 efrain 228
        }
61 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  {
64 efrain 238
                        print("Register FCM Notification : \(token)")
239
 
61 efrain 240
                        var sync = SyncModel()
241
                        sync.data = token
242
                        sync.type = Constants.SYNC_ADAPTER_TYPE_FCM
64 efrain 243
 
244
                        let syncDao = SyncDao()
245
                        let syncID = syncDao.insert(record: sync)
246
                        if syncID > 0 {
247
                            sync.id = syncID
61 efrain 248
 
249
                            appData.fcmToken = token
250
                            appData.save()
63 efrain 251
 
64 efrain 252
                            if !appData.deviceUuid.isEmpty {
61 efrain 253
 
64 efrain 254
                                let syncAdapter = SyncAdapter()
255
                                syncAdapter.registerFcm(record: sync)
256
                            }
61 efrain 257
                        }
258
                    }
259
                }
260
            }
261
        }
17 efrain 262
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMMAND_EXIT))
263
       { data in
1 efrain 264
 
61 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
           }*/
32 efrain 295
 
61 efrain 296
           appNavigation.pageActive = .goodbye
297
 
298
 
17 efrain 299
 
32 efrain 300
 
1 efrain 301
 
24 efrain 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 ?? ""
25 efrain 308
 
27 efrain 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
25 efrain 314
 
27 efrain 315
            let timeFormatter = DateFormatter()
316
            timeFormatter.dateFormat = Constants.FORMAT_TIME_12
25 efrain 317
 
27 efrain 318
            let dateOn = dateFormatter.string(from: now)
319
            let timeOn = timeFormatter.string(from: now)
25 efrain 320
 
61 efrain 321
            let userNotificationDao = UserNotificationDao()
27 efrain 322
            var userNotification : UserNotificationModel  = UserNotificationModel(userUuid: appData.userUuid, title: title, body: body, viewed: viewed, url: url, command: command, dateOn: dateOn, timeOn: timeOn)
24 efrain 323
 
324
 
325
 
27 efrain 326
            userNotificationDao.insert(userNotification: userNotification)
64 efrain 327
        }.onAppear {
328
            Device.sharedInstance.generateUUID()
24 efrain 329
        }
1 efrain 330
 
331
 
332
    }
39 efrain 333
 
32 efrain 334
    func refreshContent() -> Void {
335
        appData.refreshContentMessage = ""
336
        appData.refreshContentMessageShowPending = false
31 efrain 337
        appData.refreshContentActionRequired = true
338
        appData.save()
339
 
39 efrain 340
        withAnimation {
341
            appNavigation.subpageActive = .topics
342
        }
32 efrain 343
 
39 efrain 344
 
31 efrain 345
    }
1 efrain 346
}
347
 
348
struct MainView_Previews: PreviewProvider {
349
    static var previews: some View {
350
        MainView()
351
    }
352
}
353