Browse Source

coding video

marinofaggiana 4 năm trước cách đây
mục cha
commit
5bd6591137

+ 62 - 57
iOSClient/Viewer/NCViewerImage/NCViewerImage.swift

@@ -89,7 +89,7 @@ class NCViewerImage: UIViewController {
         viewerImageZoom.index = currentIndex
         viewerImageZoom.image = getImageMetadata(metadatas[currentIndex])
         viewerImageZoom.metadata = metadatas[currentIndex]
-        viewerImageZoom.delegateViewerImage = self
+        viewerImageZoom.delegate = self
 
         singleTapGestureRecognizer.require(toFail: viewerImageZoom.doubleTapGestureRecognizer)
         
@@ -127,8 +127,6 @@ class NCViewerImage: UIViewController {
     
     override func viewWillDisappear(_ animated: Bool) {
         super.viewWillDisappear(animated)
-   
-        videoStop()
     }
     
     @objc func openMenuMore() {
@@ -305,52 +303,6 @@ class NCViewerImage: UIViewController {
         }
     }
     
-    //MARK: - Delegate Image Zoom
-
-    func viewWillAppearImageZoom(viewerImageZoom: NCViewerImageZoom, metadata: tableMetadata) {
-
-        navigationItem.title = metadata.fileNameView
-
-        currentMetadata = metadata
-        currentViewerImageZoom = viewerImageZoom
-        toolBar.isHidden = true
-        
-        videoStop()
-    }
-    
-    func viewDidAppearImageZoom(viewerImageZoom: NCViewerImageZoom, metadata: tableMetadata) {
-                
-        if (currentMetadata.typeFile == k_metadataTypeFile_video || currentMetadata.typeFile == k_metadataTypeFile_audio) {
-
-            toolBar.isHidden = false
-            videoPlay(metadata: metadata)
-        }
-        
-        if !NCOperationQueue.shared.downloadExists(metadata: metadata) {
-            self.progressView.progress = 0
-        }
-        
-        let isFolderEncrypted = CCUtility.isFolderEncrypted(metadata.serverUrl, e2eEncrypted: metadata.e2eEncrypted, account: metadata.account, urlBase: metadata.urlBase)
-        let ext = CCUtility.getExtension(metadata.fileNameView)
-        
-        if ((metadata.contentType == "image/heic" &&  metadata.hasPreview == false) || ext == "GIF" || ext == "SVG" || isFolderEncrypted) && metadata.session == "" && !CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: metadata.fileNameView) {
-            NCOperationQueue.shared.download(metadata: metadata, selector: "", setFavorite: false)
-        }
-        
-        if !CCUtility.fileProviderStoragePreviewIconExists(metadata.ocId, etag: metadata.etag) && metadata.hasPreview {
-            
-            let fileNamePath = CCUtility.returnFileNamePath(fromFileName: metadata.fileName, serverUrl: metadata.serverUrl, urlBase: metadata.urlBase, account: metadata.account)!
-            let fileNamePreviewLocalPath = CCUtility.getDirectoryProviderStoragePreviewOcId(metadata.ocId, etag: metadata.etag)!
-            let fileNameIconLocalPath = CCUtility.getDirectoryProviderStorageIconOcId(metadata.ocId, etag: metadata.etag)!
-            
-            NCCommunication.shared.downloadPreview(fileNamePathOrFileId: fileNamePath, fileNamePreviewLocalPath: fileNamePreviewLocalPath, widthPreview: Int(k_sizePreview), heightPreview: Int(k_sizePreview), fileNameIconLocalPath: fileNameIconLocalPath, sizeIcon: Int(k_sizeIcon)) { (account, imagePreview, imageIcon,  errorCode, errorMessage) in
-                if errorCode == 0 {
-                    self.reloadCurrentPage()
-                }
-            }
-        }
-    }
-    
     //MARK: - Image
     
     func getImageMetadata(_ metadata: tableMetadata) -> UIImage? {
@@ -538,7 +490,7 @@ extension NCViewerImage: UIPageViewControllerDelegate, UIPageViewControllerDataS
         viewerImageZoom.index = currentIndex
         viewerImageZoom.image = getImageMetadata(metadatas[currentIndex])
         viewerImageZoom.metadata = metadatas[currentIndex]
-        viewerImageZoom.delegateViewerImage = self
+        viewerImageZoom.delegate = self
         
         singleTapGestureRecognizer.require(toFail: viewerImageZoom.doubleTapGestureRecognizer)
         
@@ -554,7 +506,7 @@ extension NCViewerImage: UIPageViewControllerDelegate, UIPageViewControllerDataS
         viewerImageZoom.index = currentIndex
         viewerImageZoom.image = getImageMetadata(metadatas[currentIndex])
         viewerImageZoom.metadata = metadatas[currentIndex]
-        viewerImageZoom.delegateViewerImage = self
+        viewerImageZoom.delegate = self
         
         singleTapGestureRecognizer.require(toFail: viewerImageZoom.doubleTapGestureRecognizer)
         
@@ -569,7 +521,7 @@ extension NCViewerImage: UIPageViewControllerDelegate, UIPageViewControllerDataS
         viewerImageZoom.index = currentIndex - 1
         viewerImageZoom.image = getImageMetadata(metadatas[currentIndex - 1])
         viewerImageZoom.metadata = metadatas[currentIndex - 1]
-        viewerImageZoom.delegateViewerImage = self
+        viewerImageZoom.delegate = self
         
         self.singleTapGestureRecognizer.require(toFail: viewerImageZoom.doubleTapGestureRecognizer)
         
@@ -584,7 +536,7 @@ extension NCViewerImage: UIPageViewControllerDelegate, UIPageViewControllerDataS
         viewerImageZoom.index = currentIndex + 1
         viewerImageZoom.image = getImageMetadata(metadatas[currentIndex + 1])
         viewerImageZoom.metadata = metadatas[currentIndex + 1]
-        viewerImageZoom.delegateViewerImage = self
+        viewerImageZoom.delegate = self
         
         singleTapGestureRecognizer.require(toFail: viewerImageZoom.doubleTapGestureRecognizer)
 
@@ -711,16 +663,69 @@ extension NCViewerImage: UIGestureRecognizerDelegate {
     }
 }
 
+//MARK: - NCViewerImageZoomDelegate
+
+extension NCViewerImage: NCViewerImageZoomDelegate {
+   
+    func willAppearImageZoom(viewerImageZoom: NCViewerImageZoom, metadata: tableMetadata) {
+        
+        navigationItem.title = metadata.fileNameView
+        currentMetadata = metadata
+        currentViewerImageZoom = viewerImageZoom
+        toolBar.isHidden = true
+    }
+    
+    func didAppearImageZoom(viewerImageZoom: NCViewerImageZoom, metadata: tableMetadata) {
+                    
+        if (currentMetadata.typeFile == k_metadataTypeFile_video || currentMetadata.typeFile == k_metadataTypeFile_audio) {
+            if pictureInPictureOcId != metadata.ocId {
+                videoPlay(metadata: metadata)
+                toolBar.isHidden = false
+            } else {
+                toolBar.isHidden = true
+            }
+        }
+            
+        if !NCOperationQueue.shared.downloadExists(metadata: metadata) {
+            self.progressView.progress = 0
+        }
+        
+        let isFolderEncrypted = CCUtility.isFolderEncrypted(metadata.serverUrl, e2eEncrypted: metadata.e2eEncrypted, account: metadata.account, urlBase: metadata.urlBase)
+        let ext = CCUtility.getExtension(metadata.fileNameView)
+        
+        if ((metadata.contentType == "image/heic" &&  metadata.hasPreview == false) || ext == "GIF" || ext == "SVG" || isFolderEncrypted) && metadata.session == "" && !CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: metadata.fileNameView) {
+            NCOperationQueue.shared.download(metadata: metadata, selector: "", setFavorite: false)
+        }
+            
+        if !CCUtility.fileProviderStoragePreviewIconExists(metadata.ocId, etag: metadata.etag) && metadata.hasPreview {
+            
+            let fileNamePath = CCUtility.returnFileNamePath(fromFileName: metadata.fileName, serverUrl: metadata.serverUrl, urlBase: metadata.urlBase, account: metadata.account)!
+            let fileNamePreviewLocalPath = CCUtility.getDirectoryProviderStoragePreviewOcId(metadata.ocId, etag: metadata.etag)!
+            let fileNameIconLocalPath = CCUtility.getDirectoryProviderStorageIconOcId(metadata.ocId, etag: metadata.etag)!
+            
+            NCCommunication.shared.downloadPreview(fileNamePathOrFileId: fileNamePath, fileNamePreviewLocalPath: fileNamePreviewLocalPath, widthPreview: Int(k_sizePreview), heightPreview: Int(k_sizePreview), fileNameIconLocalPath: fileNameIconLocalPath, sizeIcon: Int(k_sizeIcon)) { (account, imagePreview, imageIcon,  errorCode, errorMessage) in
+                if errorCode == 0 {
+                    self.reloadCurrentPage()
+                }
+            }
+        }
+    }
+    
+    func disappearImageZoom(viewerImageZoom: NCViewerImageZoom, metadata: tableMetadata) {
+        videoStop()
+    }
+}
+
 //MARK: - NCViewerVideoDelegate
 
 extension NCViewerImage: NCViewerVideoDelegate {
     
-    func playerViewControllerDidStopPictureInPicture(metadata: tableMetadata) {
-        self.pictureInPictureOcId = ""
+    func startPictureInPicture(metadata: tableMetadata) {
+        self.pictureInPictureOcId = metadata.ocId
     }
     
-    func playerViewControllerDidStartPictureInPicture(metadata: tableMetadata) {
-        self.pictureInPictureOcId = metadata.ocId
+    func stopPictureInPicture(metadata: tableMetadata) {
+        self.pictureInPictureOcId = ""
     }
     
     func playerCurrentTime(_ time: CMTime?) {

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

@@ -22,6 +22,12 @@
 //
 import UIKit
 
+protocol NCViewerImageZoomDelegate {
+    func willAppearImageZoom(viewerImageZoom: NCViewerImageZoom, metadata: tableMetadata)
+    func didAppearImageZoom(viewerImageZoom: NCViewerImageZoom, metadata: tableMetadata)
+    func disappearImageZoom(viewerImageZoom: NCViewerImageZoom, metadata: tableMetadata)
+}
+
 class NCViewerImageZoom: UIViewController {
     
     @IBOutlet weak var imageViewBottomConstraint: NSLayoutConstraint!
@@ -32,9 +38,8 @@ class NCViewerImageZoom: UIViewController {
     @IBOutlet weak var imageView: UIImageView!
     @IBOutlet weak var statusViewImage: UIImageView!
     @IBOutlet weak var statusLabel: UILabel!
-
-    weak var delegateViewerImage: NCViewerImage?
     
+    var delegate: NCViewerImageZoomDelegate?
     var image: UIImage?
     var metadata: tableMetadata = tableMetadata()
     var index: Int = 0
@@ -79,18 +84,19 @@ class NCViewerImageZoom: UIViewController {
         updateZoomScale()
         updateConstraints()
         
-        delegateViewerImage?.viewWillAppearImageZoom(viewerImageZoom: self, metadata: metadata)
+        delegate?.willAppearImageZoom(viewerImageZoom: self, metadata: metadata)
     }
     
     override func viewDidAppear(_ animated: Bool) {
         super.viewDidAppear(animated)
-                
-        delegateViewerImage?.viewDidAppearImageZoom(viewerImageZoom: self, metadata: metadata)
+        
+        delegate?.didAppearImageZoom(viewerImageZoom: self, metadata: metadata)
     }
     
     override func viewWillDisappear(_ animated: Bool) {
         super.viewWillDisappear(animated)
         
+        delegate?.disappearImageZoom(viewerImageZoom: self, metadata: metadata)
     }
     
     override func viewDidLayoutSubviews() {

+ 17 - 14
iOSClient/Viewer/NCViewerVideo/NCViewerVideo.swift

@@ -24,8 +24,8 @@
 import Foundation
 
 protocol NCViewerVideoDelegate {
-    func playerViewControllerDidStopPictureInPicture(metadata: tableMetadata)
-    func playerViewControllerDidStartPictureInPicture(metadata: tableMetadata)
+    func stopPictureInPicture(metadata: tableMetadata)
+    func startPictureInPicture(metadata: tableMetadata)
     func playerCurrentTime(_ time: CMTime?)
 }
 
@@ -34,6 +34,7 @@ class NCViewerVideo: AVPlayerViewController {
     let appDelegate = UIApplication.shared.delegate as! AppDelegate
     var metadata = tableMetadata()
     var seekTime: CMTime?
+    var pictureInPicture: Bool = false
     
    // weak var delegateViewerImage: NCViewerImage?
     var delegateViewerVideo: NCViewerVideoDelegate?
@@ -88,19 +89,19 @@ class NCViewerVideo: AVPlayerViewController {
     override func viewWillDisappear(_ animated: Bool) {
         super.viewWillDisappear(animated)
         
-        player?.pause()
-        
-        if rateObserverToken != nil {
-            player?.removeObserver(self, forKeyPath: "rate")
-            NotificationCenter.default.removeObserver(self, name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
-            NCKTVHTTPCache.shared.stopProxy()
-            self.delegateViewerVideo?.playerCurrentTime(player?.currentTime())
-            self.rateObserverToken = nil
+        if !pictureInPicture {
+            player?.pause()
+            
+            if rateObserverToken != nil {
+                player?.removeObserver(self, forKeyPath: "rate")
+                NotificationCenter.default.removeObserver(self, name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
+                NCKTVHTTPCache.shared.stopProxy()
+                self.delegateViewerVideo?.playerCurrentTime(player?.currentTime())
+                self.rateObserverToken = nil
+            }
         }
     }
     
-    //MARK: - Observer
-
     override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
         
         if keyPath != nil && keyPath == "rate" {
@@ -112,10 +113,12 @@ class NCViewerVideo: AVPlayerViewController {
 extension NCViewerVideo: AVPlayerViewControllerDelegate {
     
     func playerViewControllerDidStartPictureInPicture(_ playerViewController: AVPlayerViewController) {
-        delegateViewerVideo?.playerViewControllerDidStartPictureInPicture(metadata: metadata)
+        pictureInPicture = true
+        delegateViewerVideo?.startPictureInPicture(metadata: metadata)
     }
     
     func playerViewControllerDidStopPictureInPicture(_ playerViewController: AVPlayerViewController) {
-        delegateViewerVideo?.playerViewControllerDidStopPictureInPicture(metadata: metadata)
+        pictureInPicture = false
+        delegateViewerVideo?.stopPictureInPicture(metadata: metadata)
     }
 }