Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 32 | Rev 39 | 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
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
 
17 efrain 19
    private var appData = AppData.sharedInstance
20
    private var localNotification = LocalNotificationManager()
1 efrain 21
 
22
    var body: some View {
23
        ZStack {
24
            Color("color_window_background").ignoresSafeArea(.all)
25
 
26
           VStack(spacing: 0) {
8 efrain 27
                switch appNavigation.pageActive
28
                {
29
                    case AppMainPage.intro1 :
1 efrain 30
                        IntroStep1View()
31
                        .environmentObject(appNavigation)
32
                        .environmentObject(networkMonitor)
33
                        .transition(.scale)
34
 
8 efrain 35
                case AppMainPage.intro2 :
1 efrain 36
                        IntroStep2View()
37
                        .environmentObject(appNavigation)
38
                        .environmentObject(networkMonitor)
39
                        .transition(.scale)
40
 
8 efrain 41
                case AppMainPage.intro3 :
1 efrain 42
                        IntroStep3View()
43
                        .environmentObject(appNavigation)
44
                        .environmentObject(networkMonitor)
45
                        .transition(.scale)
46
 
8 efrain 47
                case  AppMainPage.signin :
1 efrain 48
                        SigninView()
49
                        .environmentObject(appNavigation)
50
                        .environmentObject(networkMonitor)
51
                        .transition(.scale)
52
 
8 efrain 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)
17 efrain 62
 
63
                case AppMainPage.videoplayer :
64
                    VideoPlayerView()
65
                    .environmentObject(appNavigation)
66
                    .environmentObject(networkMonitor)
8 efrain 67
 
17 efrain 68
                case AppMainPage.pdfviewer :
69
                    PdfViewerView()
70
                    .environmentObject(appNavigation)
71
                    .environmentObject(networkMonitor)
72
 
73
                case AppMainPage.webviewer :
74
                    WebViewerView()
75
                    .environmentObject(appNavigation)
76
                    .environmentObject(networkMonitor)
77
 
19 efrain 78
                case AppMainPage.download :
79
                    DownloadFileView()
80
                    .environmentObject(appNavigation)
81
                    .environmentObject(networkMonitor)
82
 
8 efrain 83
                default :
84
                    HomeView()
85
                    .environmentObject(appNavigation)
86
                    .environmentObject(networkMonitor)
87
                    .transition(.scale)
1 efrain 88
 
8 efrain 89
                }
1 efrain 90
 
91
                    //Spacer()
92
                    /*
93
                    if(self.networkMonitor.status == .disconnected) {
94
                        Text("The popup")
95
                        .frame(width: UIScreen.main.bounds.width, height: 60)
96
                        .background(Color("color_error_background"))
97
                        .foregroundColor(Color("color_error_foreground"))
98
                        .font(.callout)
99
                    }*/
100
            }
24 efrain 101
        }
102
        .onAppear {
31 efrain 103
 
32 efrain 104
            if appData.signoutActionRequired {
38 efrain 105
                DispatchQueue.main.asyncAfter(deadline: .now() + 1)
106
                    signout()
107
                }
32 efrain 108
            } else {
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"))
38 efrain 114
                    snackbar.actionBlock = { (snackbar) in
115
                        DispatchQueue.main.asyncAfter(deadline: .now() + 1)
116
                            snackbar.dismiss()
117
                            refreshContent()
118
                        }
119
                   }
32 efrain 120
 
31 efrain 121
 
32 efrain 122
                    snackbar.show()
123
 
124
 
125
                }
24 efrain 126
            }
127
        }
128
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMMAND_REFRESH_CONTENT))
17 efrain 129
        { data in
130
            if data.userInfo != nil {
131
                let newCapsules = Int(data.userInfo?["new_capsules"]! as? String ?? "0") ?? 0
132
                let isForeground = (Int(data.userInfo?["is_foreground"]! as? String ?? "0") ?? 0) == 1
133
 
134
                if newCapsules > 0 {
27 efrain 135
                    let title = data.userInfo?["title"]! as? String ?? ""
136
                    let body = data.userInfo?["body"]! as? String ?? ""
137
 
138
                    let command = Constants.NOTIFICATION_COMMAND_REFRESH_CONTENT
139
                    let now = Date()
140
                    let dateFormatter = DateFormatter()
141
                    dateFormatter.dateFormat = Constants.FORMAT_DATE_YMD
142
 
143
                    let timeFormatter = DateFormatter()
144
                    timeFormatter.dateFormat = Constants.FORMAT_TIME_12
145
 
146
                    let dateOn = dateFormatter.string(from: now)
147
                    let timeOn = timeFormatter.string(from: now)
148
 
149
                    let userNotificationDao = UserNotificationDao.sharedInstance
150
                    var userNotification : UserNotificationModel  = UserNotificationModel(userUuid: appData.userUuid, title: title, body: body, viewed: 0, url: "", command: command, dateOn: dateOn, timeOn: timeOn)
151
 
152
 
153
 
154
                    userNotificationDao.insert(userNotification: userNotification)
155
 
156
 
157
 
17 efrain 158
                    let message = newCapsules == 1 ? Config.LANG_MESSAGE_NEW_CONTENT_THERE_IS_ONE_CAPSULE : Config.LANG_MESSAGE_NEW_CONTENT_THERE_ARE_MULTIPLE_CAPSULES.replacingOccurrences(of: "%s", with: String(newCapsules))
159
 
160
                    if isForeground {
31 efrain 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"))
38 efrain 165
                        snackbar.actionBlock = { (snackbar) in
166
                            DispatchQueue.main.asyncAfter(deadline: .now() + 1)
167
                                snackbar.dismiss()
168
                                refreshContent()
169
                            }
170
                        }
31 efrain 171
 
17 efrain 172
                        snackbar.show()
24 efrain 173
                    }  else {
174
                        appData.refreshContentMessage = message
25 efrain 175
                        appData.refreshContentMessageShowPending = true
24 efrain 176
                        appData.save()
17 efrain 177
                    }
178
                }
179
            }
1 efrain 180
 
181
        }
17 efrain 182
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMMAND_EXIT))
183
       { data in
32 efrain 184
            if data.userInfo != nil {
185
                let isForeground = (Int(data.userInfo?["is_foreground"]! as? String ?? "0") ?? 0) == 1
1 efrain 186
 
32 efrain 187
 
188
                if isForeground {
189
                    signout()
190
                } else {
191
                    appData.signoutActionRequired = true
192
                    appData.save()
193
                }
194
 
195
 
196
            }
17 efrain 197
 
32 efrain 198
 
1 efrain 199
 
24 efrain 200
       }.onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_PUSH))
201
        { data in
202
 
203
            let title = data.userInfo?["title"]! as? String ?? ""
204
            let body = data.userInfo?["body"]! as? String ?? ""
205
            let url = data.userInfo?["url"]! as? String ?? ""
25 efrain 206
 
27 efrain 207
            let command = url.isEmpty ? "" : Constants.NOTIFICATION_COMMAND_OPEN_URL
208
            let viewed = url.isEmpty ? 1 : 0
209
            let now = Date()
210
            let dateFormatter = DateFormatter()
211
            dateFormatter.dateFormat = Constants.FORMAT_DATE_YMD
25 efrain 212
 
27 efrain 213
            let timeFormatter = DateFormatter()
214
            timeFormatter.dateFormat = Constants.FORMAT_TIME_12
25 efrain 215
 
27 efrain 216
            let dateOn = dateFormatter.string(from: now)
217
            let timeOn = timeFormatter.string(from: now)
25 efrain 218
 
27 efrain 219
            let userNotificationDao = UserNotificationDao.sharedInstance
220
            var userNotification : UserNotificationModel  = UserNotificationModel(userUuid: appData.userUuid, title: title, body: body, viewed: viewed, url: url, command: command, dateOn: dateOn, timeOn: timeOn)
24 efrain 221
 
222
 
223
 
27 efrain 224
            userNotificationDao.insert(userNotification: userNotification)
24 efrain 225
        }
1 efrain 226
 
227
 
228
    }
31 efrain 229
 
32 efrain 230
    func signout() -> Void {
231
        appData.userUuid = ""
232
        appData.userFirstname = ""
233
        appData.userLastname = ""
234
        appData.userEmail = ""
235
        appData.userImage = ""
236
        appData.refreshContentActionRequired = false
31 efrain 237
        appData.refreshContentMessage = ""
238
        appData.refreshContentMessageShowPending = false
32 efrain 239
        appData.signoutActionRequired = false
31 efrain 240
        appData.save()
241
 
32 efrain 242
        appNavigation.pageActive = .goodbye
243
    }
244
 
245
    func refreshContent() -> Void {
246
        appData.refreshContentMessage = ""
247
        appData.refreshContentMessageShowPending = false
31 efrain 248
        appData.refreshContentActionRequired = true
249
        appData.save()
250
 
38 efrain 251
        appNavigation.subpageActive = .topics
32 efrain 252
 
31 efrain 253
    }
1 efrain 254
}
255
 
256
struct MainView_Previews: PreviewProvider {
257
    static var previews: some View {
258
        MainView()
259
    }
260
}
261