Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 9 | Rev 17 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 9 Rev 11
Línea 7... Línea 7...
7
import Foundation
7
import Foundation
8
import SwiftUI
8
import SwiftUI
9
import AVKit
9
import AVKit
10
import NavigationStack
10
import NavigationStack
Línea 11... Línea -...
11
 
-
 
12
 
11
 
13
struct VideoPlayerView: View {
-
 
14
    
12
struct VideoPlayerView: View {
15
    @State private var timerActive : Bool = false
-
 
16
    
13
    @State private var timerActive : Bool = false
17
    @State private var isCompleted : Bool = false
-
 
18
    
-
 
19
    private let appDao = AppDao.sharedInstance
-
 
20
    
14
    @State private var isCompleted : Bool = false
Línea 21... Línea 15...
21
    @State private var backToGallery : Bool = false
15
    @State private var backToGallery : Bool = false
-
 
16
  
22
  
17
    private let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
23
    private let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
18
    private let appDao = AppDao.sharedInstance
24
 
19
   
25
    private var playerItem : AVPlayerItem
20
    private var playerItem : AVPlayerItem
26
    private var player : AVPlayer
21
    private var player : AVPlayer
Línea 27... Línea -...
27
    private var slideModel : SlideModel
-
 
28
    private var slideTitle : String
-
 
29
 
-
 
30
 
22
    private var slideModel : SlideModel
31
    
23
    private var slideTitle : String
-
 
24
 
32
    
25
    init(slideUuid : String)
33
    init(slideUuid : String)
26
    {
Línea 34... Línea 27...
34
    {
27
        let appData = appDao.selectOne()
35
        let slideDao = SlideDao.sharedInstance
28
        let slideDao = SlideDao.sharedInstance
36
        self.slideModel = slideDao.selectByUuid(uuid: slideUuid)
29
        self.slideModel = slideDao.selectByUuid(uuid: slideUuid)
37
 
30
 
38
        if self.slideModel.name.count > Constants.APP_BAR_TITLE_MAX_LENGTH {
31
        if self.slideModel.name.count > Constants.APP_BAR_TITLE_MAX_LENGTH {
Línea 39... Línea -...
39
            slideTitle = String(Array(self.slideModel.name)[0...Constants.APP_BAR_TITLE_MAX_LENGTH]) + "..."
-
 
40
        } else {
-
 
41
            slideTitle = self.slideModel.name
-
 
42
        }
-
 
43
        
-
 
44
        
-
 
45
        /*
-
 
46
        let sURL = "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"
32
            slideTitle = String(Array(self.slideModel.name)[0...Constants.APP_BAR_TITLE_MAX_LENGTH]) + "..."
47
        
-
 
48
        let videoUrl = URL(string: sURL)
-
 
49
*/
33
        } else {
Línea 50... Línea 34...
50
    
34
            slideTitle = self.slideModel.name
51
        let videoUrl = URL(string: slideModel.file)
35
        }
52
                
36
        
Línea 60... Línea 44...
60
            Constants.HTTP_HEADER_SECURITY_CREATED: String(headerSecurity.created) ,
44
            Constants.HTTP_HEADER_SECURITY_CREATED: String(headerSecurity.created) ,
61
            Constants.HTTP_HEADER_SECURITY_SECRET: headerSecurity.secret,
45
            Constants.HTTP_HEADER_SECURITY_SECRET: headerSecurity.secret,
62
        ]
46
        ]
Línea 63... Línea 47...
63
        
47
        
64
        let assets = AVURLAsset(url: videoUrl!, options: ["AVURLAssetHTTPHeaderFieldsKey": headers])
-
 
65
        playerItem = AVPlayerItem(asset: assets)
-
 
66
 
-
 
67
        /*
-
 
68
        let assets = AVURLAsset(url: videoUrl!)
-
 
69
        playerItem = AVPlayerItem(asset: assets)
-
 
Línea -... Línea 48...
-
 
48
        let assets = AVURLAsset(url: videoUrl!, options: ["AVURLAssetHTTPHeaderFieldsKey": headers])
70
        */
49
 
Línea 71... Línea 50...
71
 
50
        playerItem = AVPlayerItem(asset: assets)
72
        let newTime : CMTime = CMTimeMakeWithSeconds(0, preferredTimescale:1)
51
        let newTime : CMTime = CMTimeMakeWithSeconds(0, preferredTimescale:1)
Línea 94... Línea 73...
94
            
73
            
95
            HStack {
74
            HStack {
96
                Button(action: {
75
                Button(action: {
97
                    let dataService = DataService()
76
                    let dataService = DataService()
98
                    if self.isCompleted {
-
 
99
                    
-
 
100
                       
77
                    if self.isCompleted {
101
                        dataService.completeSlide(slide: slideModel)
78
                        dataService.completeSlide(slide: slideModel)
102
                    } else {
79
                    } else {
103
                        dataService.incompleteSlide(slide: slideModel)
80
                        dataService.incompleteSlide(slide: slideModel)
Línea 137... Línea 114...
137
            .edgesIgnoringSafeArea(.top)
114
            .edgesIgnoringSafeArea(.top)
138
            .frame(height: 50)
115
            .frame(height: 50)
139
            Divider()
116
            Divider()
Línea 140... Línea 117...
140
 
117
 
141
            VideoPlayer(player: player)
118
            VideoPlayer(player: player)
142
                .onAppear() {
119
            .onAppear() {
143
                    player.play()
120
                player.play()
144
                }
121
            }
145
                .onDisappear() {
122
            .onDisappear() {
146
                    player.pause()
123
                player.pause()
147
                }
-
 
148
                .onChange(of: player.currentTime(), perform: { value in
-
 
149
                    if let currentItem = player.currentItem {
-
 
150
                        let duration = currentItem.asset.duration
-
 
151
                    
-
 
152
                            print("duration : \(duration)")
-
 
153
                            print("value : \(value)")
-
 
154
                        }
-
 
155
                        
-
 
156
                    })
124
            }
157
                    .onReceive(timer, perform: { _ in
-
 
158
                        print("onReceive")
-
 
159
                        
125
            .onReceive(timer, perform: { _ in
160
                        let duration =  CMTimeGetSeconds(playerItem.asset.duration)
-
 
161
                        
-
 
162
         
-
 
163
                        
-
 
164
                        let currentTime =  CMTimeGetSeconds(playerItem.currentTime())
-
 
165
                        
-
 
166
                        
-
 
167
                        let diference = duration - currentTime
-
 
168
                        if diference < 10 {
-
 
169
                            self.isCompleted = true;
-
 
170
                            self.timer.upstream.connect().cancel()
-
 
171
                            timerActive = false
126
                let duration =  CMTimeGetSeconds(playerItem.asset.duration)
172
                        }
-
 
173
                        
-
 
Línea 174... Línea -...
174
                    })
-
 
175
 
127
                if duration > 0 {
-
 
128
 
176
                    
129
                    let currentTime =  CMTimeGetSeconds(playerItem.currentTime())
-
 
130
                    let diference = duration - currentTime
-
 
131
                       
-
 
132
                    if diference < 10 {
-
 
133
                        self.isCompleted = true;
-
 
134
                        self.timer.upstream.connect().cancel()
-
 
135
                        timerActive = false
177
                    //.frame(width: geometry.size.width, height: geometry.size.height, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
136
                    }
178
                
137
                }
179
  
138
            })