marinofaggiana 3 years ago
parent
commit
71aaddf1b3

+ 11 - 8
iOSClient/Viewer/NCViewerImage/NCViewerImage.swift

@@ -127,8 +127,8 @@ class NCViewerImage: UIViewController {
         NotificationCenter.default.addObserver(self, selector: #selector(triggerProgressTask(_:)), name: NSNotification.Name(rawValue: NCGlobal.shared.notificationCenterProgressTask), object:nil)
         NotificationCenter.default.addObserver(self, selector: #selector(triggerProgressTask(_:)), name: NSNotification.Name(rawValue: NCGlobal.shared.notificationCenterProgressTask), object:nil)
     }
     }
     
     
-    override func viewDidDisappear(_ animated: Bool) {
-        super.viewDidDisappear(animated)
+    override func viewWillDisappear(_ animated: Bool) {
+        super.viewWillDisappear(animated)
                    
                    
         NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: NCGlobal.shared.notificationCenterDeleteFile), object: nil)
         NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: NCGlobal.shared.notificationCenterDeleteFile), object: nil)
         NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: NCGlobal.shared.notificationCenterRenameFile), object: nil)
         NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: NCGlobal.shared.notificationCenterRenameFile), object: nil)
@@ -302,7 +302,7 @@ class NCViewerImage: UIViewController {
             
             
             currentViewerImageZoom?.statusViewImage.isHidden = false
             currentViewerImageZoom?.statusViewImage.isHidden = false
             currentViewerImageZoom?.statusLabel.isHidden = false
             currentViewerImageZoom?.statusLabel.isHidden = false
-            NCViewerVideo.shared.videoStop()
+            NCViewerVideo.shared.videoRemoved()
         }
         }
     }
     }
     
     
@@ -445,6 +445,7 @@ extension NCViewerImage: UIPageViewControllerDelegate, UIPageViewControllerDataS
             previousViewControllers.forEach { viewController in
             previousViewControllers.forEach { viewController in
                 let viewerImageZoom = viewController as! NCViewerImageZoom
                 let viewerImageZoom = viewController as! NCViewerImageZoom
                 viewerImageZoom.scrollView.zoomScale = viewerImageZoom.scrollView.minimumZoomScale
                 viewerImageZoom.scrollView.zoomScale = viewerImageZoom.scrollView.minimumZoomScale
+                
             }
             }
             currentIndex = nextIndex!
             currentIndex = nextIndex!
         }
         }
@@ -496,12 +497,14 @@ extension NCViewerImage: UIGestureRecognizerDelegate {
     
     
     @objc func didSingleTapWith(gestureRecognizer: UITapGestureRecognizer) {
     @objc func didSingleTapWith(gestureRecognizer: UITapGestureRecognizer) {
              
              
-        if let viewerVideoToolBar = NCViewerVideo.shared.viewerVideoToolBar {
-            if viewerVideoToolBar.isHidden {
-                viewerVideoToolBar.showToolBar()
-                return
+        if !currentMetadata.livePhoto {
+            if let viewerVideoToolBar = currentViewerImageZoom?.videoToolBar {
+                if viewerVideoToolBar.isHidden {
+                    viewerVideoToolBar.showToolBar()
+                    return
+                }
             }
             }
-        }
+        }        
             
             
         /*
         /*
         if currentMetadata.classFile == NCCommunicationCommon.typeClassFile.video.rawValue || currentMetadata.classFile == NCCommunicationCommon.typeClassFile.audio.rawValue {
         if currentMetadata.classFile == NCCommunicationCommon.typeClassFile.video.rawValue || currentMetadata.classFile == NCCommunicationCommon.typeClassFile.audio.rawValue {

+ 5 - 1
iOSClient/Viewer/NCViewerImage/NCViewerImageZoom.swift

@@ -60,6 +60,10 @@ class NCViewerImageZoom: UIViewController {
         doubleTapGestureRecognizer.numberOfTapsRequired = 2
         doubleTapGestureRecognizer.numberOfTapsRequired = 2
     }
     }
     
     
+    deinit {
+        print("")
+    }
+    
     override func viewDidLoad() {
     override func viewDidLoad() {
         super.viewDidLoad()
         super.viewDidLoad()
         
         
@@ -121,7 +125,7 @@ class NCViewerImageZoom: UIViewController {
     override func viewDidDisappear(_ animated: Bool) {
     override func viewDidDisappear(_ animated: Bool) {
         super.viewDidDisappear(animated)
         super.viewDidDisappear(animated)
         
         
-        NCViewerVideo.shared.videoStop()
+//        NCViewerVideo.shared.videoStop()
     }
     }
     
     
     override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
     override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

+ 34 - 8
iOSClient/Viewer/NCViewerVideo/NCViewerVideo.swift

@@ -35,12 +35,13 @@ class NCViewerVideo: NSObject {
     private var imageView: UIImageView?
     private var imageView: UIImageView?
     private var timeObserver: Any?
     private var timeObserver: Any?
     private var rateObserver: Any?
     private var rateObserver: Any?
-    
+    private var durationSeconds: Double = 0
+    private var viewerVideoToolBar: NCViewerVideoToolBar?
+
     public var metadata: tableMetadata?
     public var metadata: tableMetadata?
     public var videoLayer: AVPlayerLayer?
     public var videoLayer: AVPlayerLayer?
     public var player: AVPlayer?
     public var player: AVPlayer?
-    public var viewerVideoToolBar: NCViewerVideoToolBar?
-    
+
     //MARK: - NotificationCenter
     //MARK: - NotificationCenter
 
 
     @objc func applicationDidEnterBackground(_ notification: NSNotification) {
     @objc func applicationDidEnterBackground(_ notification: NSNotification) {
@@ -60,9 +61,7 @@ class NCViewerVideo: NSObject {
         NCKTVHTTPCache.shared.startProxy(user: appDelegate.user, password: appDelegate.password, metadata: metadata)
         NCKTVHTTPCache.shared.startProxy(user: appDelegate.user, password: appDelegate.password, metadata: metadata)
         
         
         func initPlayer(url: URL) {
         func initPlayer(url: URL) {
-            
-            var durationSeconds: Double = 0
-            
+                        
             self.player = AVPlayer(url: url)
             self.player = AVPlayer(url: url)
             self.player?.isMuted = CCUtility.getAudioMute()
             self.player?.isMuted = CCUtility.getAudioMute()
             self.player?.seek(to: .zero)
             self.player?.seek(to: .zero)
@@ -92,7 +91,7 @@ class NCViewerVideo: NSObject {
                 self.player?.seek(to: time)
                 self.player?.seek(to: time)
             }
             }
             
             
-            viewerVideoToolBar?.setBarPlayer(player: self.player, metadata: metadata, durationSeconds: durationSeconds)
+            viewerVideoToolBar?.setBarPlayer()
         }
         }
         
         
         if let url = NCKTVHTTPCache.shared.getVideoURL(metadata: metadata) {
         if let url = NCKTVHTTPCache.shared.getVideoURL(metadata: metadata) {
@@ -103,11 +102,25 @@ class NCViewerVideo: NSObject {
     }
     }
     
     
     func videoPlay() {
     func videoPlay() {
+        guard let metadata = self.metadata else { return }
+        
         self.player?.play()
         self.player?.play()
     }
     }
     
     
-    func videoStop() {
+    func videoPause() {
+        guard let metadata = self.metadata else { return }
         
         
+        self.player?.pause()
+    }
+    
+    func videoSeek(time: CMTime) {
+        guard let metadata = self.metadata else { return }
+
+        self.player?.seek(to: time)
+        NCManageDatabase.shared.addVideoTime(metadata: metadata, time: time, durationSeconds: nil)
+    }
+    
+    func videoRemoved() {
         guard let metadata = self.metadata else { return }
         guard let metadata = self.metadata else { return }
         
         
         self.player?.pause()
         self.player?.pause()
@@ -128,6 +141,19 @@ class NCViewerVideo: NSObject {
         self.videoLayer?.removeFromSuperlayer()
         self.videoLayer?.removeFromSuperlayer()
     }
     }
     
     
+    func getVideoCurrentSeconds() -> Float64 {
+        
+        if let currentTime = NCViewerVideo.shared.player?.currentTime() {
+            return CMTimeGetSeconds(currentTime)
+        }
+        return 0
+    }
+    
+    func getVideoDurationSeconds() -> Float64 {
+        
+        return self.durationSeconds
+    }
+    
     override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
     override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
         
         
         guard let metadata = self.metadata else { return }
         guard let metadata = self.metadata else { return }

+ 33 - 53
iOSClient/Viewer/NCViewerVideo/NCViewerVideoToolBar.swift

@@ -39,10 +39,7 @@ class NCViewerVideoToolBar: UIView {
         case ended
         case ended
         case moved
         case moved
     }
     }
-    
-    var player: AVPlayer?
-    var metadata: tableMetadata?
-    
+        
     private var wasInPlay: Bool = false
     private var wasInPlay: Bool = false
     private var playbackSliderEvent: sliderEventType = .ended
     private var playbackSliderEvent: sliderEventType = .ended
     private let seekDuration: Float64 = 15
     private let seekDuration: Float64 = 15
@@ -85,29 +82,26 @@ class NCViewerVideoToolBar: UIView {
         muteButton.setImage(NCUtility.shared.loadImage(named: "audioOff", color: .lightGray), for: .normal)
         muteButton.setImage(NCUtility.shared.loadImage(named: "audioOff", color: .lightGray), for: .normal)
     }
     }
     
     
-    func setBarPlayer(player: AVPlayer?, metadata: tableMetadata, durationSeconds: Double) {
-        
-        self.player = player
-        self.metadata = metadata
-                
+    func setBarPlayer() {
+                        
         playbackSlider.value = 0
         playbackSlider.value = 0
         playbackSlider.minimumValue = 0
         playbackSlider.minimumValue = 0
-        playbackSlider.maximumValue = Float(durationSeconds)
+        playbackSlider.maximumValue = Float(NCViewerVideo.shared.getVideoDurationSeconds())
         playbackSlider.addTarget(self, action: #selector(onSliderValChanged(slider:event:)), for: .valueChanged)
         playbackSlider.addTarget(self, action: #selector(onSliderValChanged(slider:event:)), for: .valueChanged)
 
 
         labelCurrentTime.text = NCUtility.shared.stringFromTimeInterval(interval: 0)
         labelCurrentTime.text = NCUtility.shared.stringFromTimeInterval(interval: 0)
-        labelOverallDuration.text = "-" + NCUtility.shared.stringFromTimeInterval(interval: durationSeconds)
+        labelOverallDuration.text = "-" + NCUtility.shared.stringFromTimeInterval(interval: NCViewerVideo.shared.getVideoDurationSeconds())
                 
                 
-        player?.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(1, preferredTimescale: 1), queue: .main, using: { (CMTime) in
+        updateToolBar()
+        
+        NCViewerVideo.shared.player?.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(1, preferredTimescale: 1), queue: .main, using: { (CMTime) in
             
             
-            if self.player?.currentItem?.status == .readyToPlay {
+            if NCViewerVideo.shared.player?.currentItem?.status == .readyToPlay {
                 if self.isHidden == false {
                 if self.isHidden == false {
                     self.updateToolBar()
                     self.updateToolBar()
                 }
                 }
             }
             }
-        })
-        
-        updateToolBar()
+        })        
     }
     }
     
     
     @objc public func hideToolBar() {
     @objc public func hideToolBar() {
@@ -135,8 +129,10 @@ class NCViewerVideoToolBar: UIView {
     public func updateToolBar() {
     public func updateToolBar() {
 
 
         var namedPlay = "play.fill"
         var namedPlay = "play.fill"
-        if player?.rate == 1 { namedPlay = "pause.fill"}
-               
+        if NCViewerVideo.shared.player?.rate == 1 { namedPlay = "pause.fill"}
+        let currentSeconds = NCViewerVideo.shared.getVideoCurrentSeconds()
+        let durationSeconds = NCViewerVideo.shared.getVideoDurationSeconds()
+        
         playbackSlider.isEnabled = true
         playbackSlider.isEnabled = true
         
         
         backButton.setImage(NCUtility.shared.loadImage(named: "gobackward.15", color: .white), for: .normal)
         backButton.setImage(NCUtility.shared.loadImage(named: "gobackward.15", color: .white), for: .normal)
@@ -159,15 +155,8 @@ class NCViewerVideoToolBar: UIView {
         }
         }
         muteButton.isEnabled = true
         muteButton.isEnabled = true
         
         
-        if let duration = player?.currentItem?.asset.duration, let currentTime = player?.currentTime() {
-            
-            let durationSeconds: Float64 = CMTimeGetSeconds(duration)
-            let currentSeconds: Float64 = CMTimeGetSeconds(currentTime)
-            
-            self.playbackSlider.value = Float(currentSeconds)
-            self.labelCurrentTime.text = NCUtility.shared.stringFromTimeInterval(interval: currentSeconds)
-            self.labelOverallDuration.text = "-" + NCUtility.shared.stringFromTimeInterval(interval: durationSeconds - currentSeconds)
-        }
+        self.labelCurrentTime.text = NCUtility.shared.stringFromTimeInterval(interval: currentSeconds)
+        self.labelOverallDuration.text = "-" + NCUtility.shared.stringFromTimeInterval(interval: durationSeconds - currentSeconds)
     }
     }
     
     
     //MARK: - Event / Gesture
     //MARK: - Event / Gesture
@@ -181,19 +170,16 @@ class NCViewerVideoToolBar: UIView {
             
             
             switch touchEvent.phase {
             switch touchEvent.phase {
             case .began:
             case .began:
-                wasInPlay = player?.rate == 1 ? true : false
-                self.player?.pause()
+                wasInPlay = NCViewerVideo.shared.player?.rate == 1 ? true : false
+                NCViewerVideo.shared.videoPause()
                 playbackSliderEvent = .began
                 playbackSliderEvent = .began
             case .moved:
             case .moved:
-                self.player?.seek(to: targetTime)
+                NCViewerVideo.shared.videoSeek(time: targetTime)
                 playbackSliderEvent = .moved
                 playbackSliderEvent = .moved
             case .ended:
             case .ended:
-                self.player?.seek(to: targetTime)
-                if let metadata = self.metadata {
-                    NCManageDatabase.shared.addVideoTime(metadata: metadata, time: targetTime, durationSeconds: nil)
-                }
+                NCViewerVideo.shared.videoSeek(time: targetTime)
                 if wasInPlay {
                 if wasInPlay {
-                    self.player?.play()
+                    NCViewerVideo.shared.videoPlay()
                 }
                 }
                 playbackSliderEvent = .ended
                 playbackSliderEvent = .ended
             default:
             default:
@@ -214,10 +200,10 @@ class NCViewerVideoToolBar: UIView {
     
     
     @IBAction func playerPause(_ sender: Any) {
     @IBAction func playerPause(_ sender: Any) {
         
         
-        if player?.timeControlStatus == .playing {
-            player?.pause()
-        } else if player?.timeControlStatus == .paused {
-            player?.play()
+        if NCViewerVideo.shared.player?.timeControlStatus == .playing {
+            NCViewerVideo.shared.videoPause()
+        } else if NCViewerVideo.shared.player?.timeControlStatus == .paused {
+            NCViewerVideo.shared.videoPlay()
         }
         }
     }
     }
         
         
@@ -226,37 +212,31 @@ class NCViewerVideoToolBar: UIView {
         let mute = CCUtility.getAudioMute()
         let mute = CCUtility.getAudioMute()
         
         
         CCUtility.setAudioMute(!mute)
         CCUtility.setAudioMute(!mute)
-        player?.isMuted = !mute
+        NCViewerVideo.shared.player?.isMuted = !mute
         updateToolBar()
         updateToolBar()
     }
     }
     
     
     @IBAction func forwardButtonSec(_ sender: Any) {
     @IBAction func forwardButtonSec(_ sender: Any) {
-        guard let player = self.player else { return }
-        guard let duration = player.currentItem?.duration else { return }
-        guard let metadata = self.metadata else { return }
+        guard let player = NCViewerVideo.shared.player else { return }
         
         
         let playerCurrentTime = CMTimeGetSeconds(player.currentTime())
         let playerCurrentTime = CMTimeGetSeconds(player.currentTime())
         let newTime = playerCurrentTime + seekDuration
         let newTime = playerCurrentTime + seekDuration
         
         
-        if newTime < CMTimeGetSeconds(duration) {
-            let targetTime: CMTime = CMTimeMake(value: Int64(newTime * 1000 as Float64), timescale: 1000)
-            
-            self.player?.seek(to: targetTime)
-            NCManageDatabase.shared.addVideoTime(metadata: metadata, time: targetTime, durationSeconds: nil)
+        if newTime < NCViewerVideo.shared.getVideoDurationSeconds() {
+            let time: CMTime = CMTimeMake(value: Int64(newTime * 1000 as Float64), timescale: 1000)
+            NCViewerVideo.shared.videoSeek(time: time)
         }
         }
     }
     }
     
     
     @IBAction func backButtonSec(_ sender: Any) {
     @IBAction func backButtonSec(_ sender: Any) {
-        guard let player = self.player else { return }
-        guard let metadata = self.metadata else { return }
+        guard let player = NCViewerVideo.shared.player else { return }
 
 
         let playerCurrenTime = CMTimeGetSeconds(player.currentTime())
         let playerCurrenTime = CMTimeGetSeconds(player.currentTime())
         var newTime = playerCurrenTime - seekDuration
         var newTime = playerCurrenTime - seekDuration
         
         
         if newTime < 0 { newTime = 0 }
         if newTime < 0 { newTime = 0 }
-        let targetTime: CMTime = CMTimeMake(value: Int64(newTime * 1000 as Float64), timescale: 1000)
+        let time: CMTime = CMTimeMake(value: Int64(newTime * 1000 as Float64), timescale: 1000)
         
         
-        self.player?.seek(to: targetTime)
-        NCManageDatabase.shared.addVideoTime(metadata: metadata, time: targetTime, durationSeconds: nil)
+        NCViewerVideo.shared.videoSeek(time: time)
     }
     }
 }
 }