AutorÃa | Ultima modificación | Ver Log |
//// CardGalleryView.swift// twogetskills//// Created by Efrain Yanez Recanatini on 3/6/22.//import Foundationimport SwiftUIimport AVKitstruct CardGalleryView: View {private var colorButtonLauncherBackGround = Color(UIColor(hex: Config.COLOR_BUTTON_GALLERY_LAUNCHER_BACKGROUND) ?? .gray)private var buttonShow : Bool = falseprivate var buttonTitle : String = ""@ObservedObject private var viewModel = SlideCardViewModel()private var position = 0@State private var goToVideoPlayer : Bool = false//@State private var finalizeShow : Bool = false@State private var goToFinishCapsule : Bool = false@State private var goToFinishTopic : Bool = falseinit (slideUuid : String, position : Int) {let preference = Preference.sharedInstanceself.viewModel.fetch(slideUuid: slideUuid, userUuid: preference.userUuid)self.position = 0self.buttonShow = falseif self.viewModel.slide.type == Constants.SLIDE_TYPE_QUIZ {self.buttonTitle = "Realizar test"self.buttonShow = true} else if self.viewModel.slide.type == Constants.SLIDE_TYPE_VIDEO {self.buttonTitle = "Ver video"self.buttonShow = true} else if self.viewModel.slide.type == Constants.SLIDE_TYPE_AUDIO {self.buttonTitle = "Escuchar audio"self.buttonShow = true} else if self.viewModel.slide.type == Constants.SLIDE_TYPE_DOCUMENT {self.buttonTitle = "Ver documento"self.buttonShow = true} else {self.buttonShow = false}/*if !self.viewModel.slide.background.isEmpty {self.created = Int(round(Date().timeIntervalSince1970))self.rand = Int.random(in: 0..<8999) + 1000self.token = preference.deviceUuidlet password = preference.passwordlet md5Data = MD5(string: "\(preference.password)" + ":" + "\(created)" + ":" + "\(rand)")self.secret = md5Data.map {String(format: "%02hhx", $0)}.joined()//print(secret)}*/}var body: some View {GeometryReader { geometry inlet checkMarkX = (geometry.size.width - 50) / 2let checkMarkY = -1 * ((geometry.size.height - 50) / 2)let buttonX = (geometry.size.width - 180) / 2let buttonY = (geometry.size.height - 80) / 2//if self.viewModel.slide.type == Constants.SLIDE_TYPE_VIDEO {NavigationLink("", destination: VideoPlayerView(slideModel: self.viewModel.slide, position: self.position), isActive: self.$goToVideoPlayer).frame( height: 0)//}//if self.finalizeShow {NavigationLink("", destination: FinishCapsuleView(capsuleUuid: self.viewModel.slide.capsuleUuid), isActive: self.$goToFinishCapsule).frame( height: 0)NavigationLink("", destination: FinishTopicView(capsuleUuid: self.viewModel.slide.capsuleUuid), isActive: self.$goToFinishTopic).frame( height: 0)//}ZStack {if self.viewModel.slide.completed == 1 {Image(uiImage: UIImage(named: "ic_slide_completado_checkmark") ?? UIImage()).alignmentGuide(.top, computeValue: { dimension in10}).offset(x: checkMarkX, y: checkMarkY).zIndex(10000)}if self.buttonShow {Button(action: {btnPlay()}, label: {Text(self.buttonTitle).font(.callout).foregroundColor(.black)}).padding(.vertical, 15).padding(.horizontal, 10).background(colorButtonLauncherBackGround).cornerRadius(/*@START_MENU_TOKEN@*/3.0/*@END_MENU_TOKEN@*/).offset(x: buttonX, y: buttonY).zIndex(10000)}if (self.viewModel.progressCapsule.progress >= 100 && self.viewModel.progressCapsule.completed == 0)|| (self.viewModel.progressTopic.progress >= 100 && self.viewModel.progressTopic.completed == 0) {Button(action: {// let preference = Preference.sharedInstance//let progressDao = ProgressDao()//let progressTopic = progressDao.selectByTopicUuidAndUserUuid(topicUuid: self.viewModel.slide.topicUuid, userUuid: preference.userUuid)if self.viewModel.progressTopic.id > 0 && self.viewModel.progressTopic.progress >= 100 && self.viewModel.progressTopic.completed == 0 {self.goToFinishTopic = true} else {//let progressCapsule = progressDao.selectByCapsuleUuidAndUserUuid(capsuleUuid: self.viewModel.slide.capsuleUuid, userUuid: preference.userUuid)if self.viewModel.progressCapsule.id > 0 && self.viewModel.progressCapsule.progress >= 100 && self.viewModel.progressCapsule.completed == 0 {self.goToFinishCapsule = true}}}, label: {Text("Finalizar").font(.callout).foregroundColor(.black)}).padding().background(colorButtonLauncherBackGround).cornerRadius(/*@START_MENU_TOKEN@*/3.0/*@END_MENU_TOKEN@*/).zIndex(10000)}VStack {Spacer()HStack {if viewModel.slide.background.isEmpty && viewModel.slide.file.isEmpty {Image(uiImage: UIImage(named: "logo") ?? UIImage()).resizable().aspectRatio(contentMode: .fit)} else {CustomAsyncImage(url: URL(string: self.viewModel.slide.type == Constants.SLIDE_TYPE_IMAGE ? self.viewModel.slide.file : self.viewModel.slide.background)!,placeholder: {Spacer()Text("Cargando...").font(.footnote).foregroundColor(.black)Spacer()},image: {Image(uiImage: $0).resizable()})}}.padding(.horizontal, 5)Spacer()}.zIndex(500)} .onAppear {//print("CardGalleryView : \(self.viewModel.slide.name) " )self.goToVideoPlayer = falseself.goToFinishCapsule = falseself.goToFinishTopic = false} .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMPLETED_SLIDE)){ data in// print("CardGalleryView Receive " )if data.userInfo != nil {if let slideUuid = data.userInfo?["slideUuid"]! as? String {if !slideUuid.isEmpty && slideUuid == self.viewModel.slide.uuid {let preference = Preference.sharedInstanceself.viewModel.fetch(slideUuid: slideUuid, userUuid: preference.userUuid)}}}} .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_INCOMPLETED_SLIDE)){ data in// print("CardGalleryView Receive " )if data.userInfo != nil {if let slideUuid = data.userInfo?["slideUuid"]! as? String {if !slideUuid.isEmpty && slideUuid == self.viewModel.slide.uuid {}}}}}}private func btnPlay(){if self.viewModel.slide.type == Constants.SLIDE_TYPE_VIDEO {self.goToVideoPlayer = true}}/*func MD5(string: String) -> Data {let length = Int(CC_MD5_DIGEST_LENGTH)let messageData = string.data(using:.utf8)!var digestData = Data(count: length)_ = digestData.withUnsafeMutableBytes { digestBytes -> UInt8 inmessageData.withUnsafeBytes { messageBytes -> UInt8 inif let messageBytesBaseAddress = messageBytes.baseAddress, let digestBytesBlindMemory = digestBytes.bindMemory(to: UInt8.self).baseAddress {let messageLength = CC_LONG(messageData.count)CC_MD5(messageBytesBaseAddress, messageLength, digestBytesBlindMemory)}return 0}}return digestData}*/}struct CardGalleryView_Previews: PreviewProvider {static var previews: some View {CardGalleryView(slideUuid: "S123", position: 0)}}