AutorÃa | Ultima modificación | Ver Log |
//
// CardGalleryView.swift
// twogetskills
//
// Created by Efrain Yanez Recanatini on 3/6/22.
//
import Foundation
import SwiftUI
import AVKit
struct CardGalleryView: View {
private var colorButtonLauncherBackGround = Color(UIColor(hex: Config.COLOR_BUTTON_GALLERY_LAUNCHER_BACKGROUND) ?? .gray)
private var buttonShow : Bool = false
private 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 = false
init (slideUuid : String, position : Int) {
let preference = Preference.sharedInstance
self.viewModel.fetch(slideUuid: slideUuid, userUuid: preference.userUuid)
self.position = 0
self.buttonShow = false
if 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) + 1000
self.token = preference.deviceUuid
let password = preference.password
let md5Data = MD5(string: "\(preference.password)" + ":" + "\(created)" + ":" + "\(rand)")
self.secret = md5Data.map {
String(format: "%02hhx", $0)
}.joined()
//print(secret)
}
*/
}
var body: some View {
GeometryReader { geometry in
let checkMarkX = (geometry.size.width - 50) / 2
let checkMarkY = -1 * ((geometry.size.height - 50) / 2)
let buttonX = (geometry.size.width - 180) / 2
let 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 in
10
}).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 = false
self.goToFinishCapsule = false
self.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.sharedInstance
self.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 in
messageData.withUnsafeBytes { messageBytes -> UInt8 in
if 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)
}
}