Marino Faggiana 2 年之前
父節點
當前提交
d8888b3f73

+ 0 - 49
iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayer.swift

@@ -24,10 +24,7 @@
 import Foundation
 import NextcloudKit
 import UIKit
-import AVFoundation
 import MediaPlayer
-import JGProgressHUD
-import Alamofire
 import MobileVLCKit
 
 class NCPlayer: NSObject {
@@ -222,52 +219,6 @@ class NCPlayer: NSObject {
             player.saveVideoSnapshot(at: fileNamePreviewLocalPath, withWidth: Int32(width), andHeight: Int32(height))
         }
     }
-
-    internal func downloadVideo(isEncrypted: Bool = false, requiredConvert: Bool = false) {
-
-        guard let view = appDelegate.window?.rootViewController?.view else { return }
-        let serverUrlFileName = metadata.serverUrl + "/" + metadata.fileName
-        let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileName)!
-        let hud = JGProgressHUD()
-        var downloadRequest: DownloadRequest?
-
-        hud.indicatorView = JGProgressHUDRingIndicatorView()
-        if let indicatorView = hud.indicatorView as? JGProgressHUDRingIndicatorView {
-            indicatorView.ringWidth = 1.5
-        }
-        hud.textLabel.text = NSLocalizedString(metadata.fileNameView, comment: "")
-        hud.detailTextLabel.text = NSLocalizedString("_tap_to_cancel_", comment: "")
-        hud.show(in: view)
-        hud.tapOnHUDViewBlock = { hud in
-            downloadRequest?.cancel()
-        }
-
-        NextcloudKit.shared.download(serverUrlFileName: serverUrlFileName, fileNameLocalPath: fileNameLocalPath) { request in
-            downloadRequest = request
-        } taskHandler: { task in
-            // task
-        } progressHandler: { progress in
-            hud.progress = Float(progress.fractionCompleted)
-        } completionHandler: { _, _, _, _, _, afError, error in
-            if afError == nil {
-                NCManageDatabase.shared.addLocalFile(metadata: self.metadata)
-                if isEncrypted {
-                    if let result = NCManageDatabase.shared.getE2eEncryption(predicate: NSPredicate(format: "fileNameIdentifier == %@ AND serverUrl == %@", self.metadata.fileName, self.metadata.serverUrl)) {
-                        NCEndToEndEncryption.sharedManager()?.decryptFile(self.metadata.fileName, fileNameView: self.metadata.fileNameView, ocId: self.metadata.ocId, key: result.key, initializationVector: result.initializationVector, authenticationTag: result.authenticationTag)
-                    }
-                }
-                if CCUtility.fileProviderStorageExists(self.metadata) || self.metadata.isDirectoryE2EE {
-                    let url = URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageOcId(self.metadata.ocId, fileNameView: self.metadata.fileNameView))
-                    if requiredConvert {
-
-                    } else {
-                        self.openAVPlayer(url: url)
-                    }
-                }
-            }
-            hud.dismiss()
-        }
-    }
 }
 
 extension NCPlayer: VLCMediaPlayerDelegate {

+ 35 - 0
iOSClient/Viewer/NCViewerMedia/NCViewerMedia.swift

@@ -52,6 +52,8 @@ class NCViewerMedia: UIViewController {
     var imageViewConstraint: CGFloat = 0
     var isDetailViewInitializze: Bool = false
 
+    var avPlayerLayer: AVPlayerLayer?
+    var avPlayer: AVPlayer?
 
     // MARK: - View Life Cycle
 
@@ -326,6 +328,35 @@ class NCViewerMedia: UIViewController {
         }
     }
 
+    // MARK: - Live Photo
+
+    func playLivePhoto(filePath: String) {
+
+        updateViewConstraints()
+        statusViewImage.isHidden = true
+        statusLabel.isHidden = true
+
+        avPlayer = AVPlayer(url: URL(fileURLWithPath: filePath))
+        avPlayerLayer = AVPlayerLayer(player: avPlayer)
+
+        if let avPlayerLayer = self.avPlayerLayer, let imageView = imageVideoContainer {
+            avPlayerLayer.videoGravity = .resizeAspect
+            avPlayerLayer.frame = imageView.bounds
+            imageView.layer.addSublayer(avPlayerLayer)
+            imageView.playerLayer = avPlayerLayer
+            avPlayer?.play()
+        }
+    }
+
+    func stopLivePhoto() {
+
+        avPlayer?.pause()
+        avPlayerLayer?.removeFromSuperlayer()
+
+        statusViewImage.isHidden = false
+        statusLabel.isHidden = false
+    }
+
     // MARK: - Gesture
 
     @objc func didDoubleTapWith(gestureRecognizer: UITapGestureRecognizer) {
@@ -560,4 +591,8 @@ extension NCViewerMedia: EasyTipViewDelegate {
 class imageVideoContainerView: UIImageView {
     var playerLayer: CALayer?
     var metadata: tableMetadata?
+    override func layoutSublayers(of layer: CALayer) {
+        super.layoutSublayers(of: layer)
+        playerLayer?.frame = self.bounds
+    }
 }

+ 46 - 15
iOSClient/Viewer/NCViewerMedia/NCViewerMediaPage.swift

@@ -24,6 +24,8 @@
 import UIKit
 import NextcloudKit
 import MediaPlayer
+import JGProgressHUD
+import Alamofire
 
 class NCViewerMediaPage: UIViewController {
 
@@ -53,7 +55,6 @@ class NCViewerMediaPage: UIViewController {
     var modifiedOcId: [String] = []
     var currentIndex = 0
     var nextIndex: Int?
-    var ncplayerLivePhoto: NCPlayer?
     var panGestureRecognizer: UIPanGestureRecognizer!
     var singleTapGestureRecognizer: UITapGestureRecognizer!
     var longtapGestureRecognizer: UILongPressGestureRecognizer!
@@ -601,28 +602,58 @@ extension NCViewerMediaPage: UIGestureRecognizerDelegate {
 
         if gestureRecognizer.state == .began {
 
-            currentViewController.updateViewConstraints()
-            currentViewController.statusViewImage.isHidden = true
-            currentViewController.statusLabel.isHidden = true
-
             let fileName = (currentViewController.metadata.fileNameView as NSString).deletingPathExtension + ".mov"
             if let metadata = NCManageDatabase.shared.getMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileNameView LIKE[c] %@", currentViewController.metadata.account, currentViewController.metadata.serverUrl, fileName)), CCUtility.fileProviderStorageExists(metadata) {
 
                 AudioServicesPlaySystemSound(1519) // peek feedback
-
-                NCNetworking.shared.getVideoUrl(metadata: metadata) { url in
-                    if let url = url {
-                        self.ncplayerLivePhoto = NCPlayer.init(imageVideoContainer: self.currentViewController.imageVideoContainer, playerToolBar: nil, metadata: metadata, detailView: nil, viewController: self, viewerMediaPage: self)
-                        self.ncplayerLivePhoto?.openAVPlayer(url: url)
-                    }
-                }
+                currentViewController.playLivePhoto(filePath: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView)!)
             }
 
         } else if gestureRecognizer.state == .ended {
 
-            currentViewController.statusViewImage.isHidden = false
-            currentViewController.statusLabel.isHidden = false
-            currentViewController.imageVideoContainer.image = currentViewController.image
+            currentViewController.stopLivePhoto()
+        }
+    }
+
+    internal func downloadVideo(metadata: tableMetadata) {
+
+        let serverUrlFileName = metadata.serverUrl + "/" + metadata.fileName
+        let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileName)!
+        let hud = JGProgressHUD()
+        var downloadRequest: DownloadRequest?
+
+        hud.indicatorView = JGProgressHUDRingIndicatorView()
+        if let indicatorView = hud.indicatorView as? JGProgressHUDRingIndicatorView {
+            indicatorView.ringWidth = 1.5
+        }
+        hud.textLabel.text = NSLocalizedString(metadata.fileNameView, comment: "")
+        hud.detailTextLabel.text = NSLocalizedString("_tap_to_cancel_", comment: "")
+        hud.show(in: view)
+        hud.tapOnHUDViewBlock = { hud in
+            downloadRequest?.cancel()
+        }
+
+        NextcloudKit.shared.download(serverUrlFileName: serverUrlFileName, fileNameLocalPath: fileNameLocalPath) { request in
+            downloadRequest = request
+        } taskHandler: { task in
+            // task
+        } progressHandler: { progress in
+            hud.progress = Float(progress.fractionCompleted)
+        } completionHandler: { _, _, _, _, _, afError, error in
+            if afError == nil {
+                NCManageDatabase.shared.addLocalFile(metadata: metadata)
+                if metadata.e2eEncrypted {
+                    if let result = NCManageDatabase.shared.getE2eEncryption(predicate: NSPredicate(format: "fileNameIdentifier == %@ AND serverUrl == %@", metadata.fileName, metadata.serverUrl)) {
+                        NCEndToEndEncryption.sharedManager()?.decryptFile(metadata.fileName, fileNameView: metadata.fileNameView, ocId: metadata.ocId, key: result.key, initializationVector: result.initializationVector, authenticationTag: result.authenticationTag)
+                    }
+                }
+                if CCUtility.fileProviderStorageExists(metadata) || metadata.isDirectoryE2EE {
+                    let url = URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView))
+                    //self.openAVPlayer(url: url)
+
+                }
+            }
+            hud.dismiss()
         }
     }
 }