Эх сурвалжийг харах

NCViewerProviderContextMenu

marinofaggiana 4 жил өмнө
parent
commit
d050a4e2da

+ 53 - 38
iOSClient/Viewer/NCViewerProviderContextMenu.swift

@@ -27,10 +27,6 @@ import NCCommunication
 class NCViewerProviderContextMenu: UIViewController  {
 
     private let imageView = UIImageView()
-    private let standardSizeWidth = UIScreen.main.bounds.width / 2
-    private let standardSizeHeight = UIScreen.main.bounds.height / 2
-    private var player: AVPlayer?
-    private var videoLayer: AVPlayerLayer?
 
     override func loadView() {
         view = imageView
@@ -39,57 +35,76 @@ class NCViewerProviderContextMenu: UIViewController  {
     init(metadata: tableMetadata) {
         super.init(nibName: nil, bundle: nil)
         
+        var image: UIImage?
         let ext = CCUtility.getExtension(metadata.fileNameView)
         let imagePath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView)!
         let imagePathPreview = CCUtility.getDirectoryProviderStoragePreviewOcId(metadata.ocId, etag: metadata.etag)!
 
-        imageView.clipsToBounds = true
-        imageView.contentMode = .scaleAspectFill
+        imageView.contentMode = .scaleAspectFit
                 
         if metadata.directory {
 
-            imageView.image = UIImage(named: "folder")!.image(color: NCBrandColor.shared.brandElement, size: standardSizeWidth)
+            image = UIImage(named: "folder")!.image(color: NCBrandColor.shared.brandElement, size: UIScreen.main.bounds.width / 2)
 
         } else {
-            
-            imageView.image = UIImage.init(named: metadata.iconName)?.resizeImage(size: CGSize(width: standardSizeWidth, height: standardSizeHeight), isAspectRation: true)
-        
-            if metadata.hasPreview {
+                            
+            // PREVIEW
+            if CCUtility.fileProviderStoragePreviewIconExists(metadata.ocId, etag: metadata.etag) {
+                image = UIImage.init(contentsOfFile: imagePathPreview)
+            }
                 
-                // PREVIEW
-                if CCUtility.fileProviderStoragePreviewIconExists(metadata.ocId, etag: metadata.etag) {
-                    imageView.image = UIImage.init(contentsOfFile: imagePathPreview)
+            // IMAGE
+            if metadata.typeFile == NCBrandGlobal.shared.metadataTypeFileImage && CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: metadata.fileNameView) {
+                if ext == "GIF" {
+                    image = UIImage.animatedImage(withAnimatedGIFURL: URL(fileURLWithPath: imagePath))
+                } else {
+                    image = UIImage.init(contentsOfFile: imagePath)
                 }
-                
-                // IMAGE
-                if metadata.typeFile == NCBrandGlobal.shared.metadataTypeFileImage && CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: metadata.fileNameView) {
-                    if ext == "GIF" {
-                        imageView.image = UIImage.animatedImage(withAnimatedGIFURL: URL(fileURLWithPath: imagePath))
+            }
+            
+            imageView.image = image
+            imageView.frame = CGRect(x: 0, y: 0, width: image?.size.width ?? 0, height: image?.size.height ?? 0)
+
+            
+            // VIDEO
+            if metadata.typeFile == NCBrandGlobal.shared.metadataTypeFileVideo && CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: metadata.fileNameView) {
+
+                if let resolutionVideo = resolutionForLocalVideo(url: URL(fileURLWithPath: imagePath)) {
+                                        
+                    let originRatio = resolutionVideo.width / resolutionVideo.height
+                    let newRatio = UIScreen.main.bounds.width / UIScreen.main.bounds.height
+                    var newSize = CGSize.zero
+                    
+                    if originRatio < newRatio {
+                        newSize.height = UIScreen.main.bounds.height
+                        newSize.width = UIScreen.main.bounds.height * originRatio
                     } else {
-                        imageView.image = UIImage.init(contentsOfFile: imagePath)
+                        newSize.width = UIScreen.main.bounds.width
+                        newSize.height = UIScreen.main.bounds.width / originRatio
                     }
-                }
-                
-                // VIDEO
-                if metadata.typeFile == NCBrandGlobal.shared.metadataTypeFileVideo && CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: metadata.fileNameView) {
-
-                    player = AVPlayer(url: URL(fileURLWithPath: imagePath))
-                    player?.isMuted = false
-                    videoLayer = AVPlayerLayer(player: player)
-                        
-                    videoLayer!.frame = CGRect(x: 0, y: 0, width: imageView.image?.size.width ?? 0, height: imageView.image?.size.height ?? 0)
-                    videoLayer!.videoGravity = AVLayerVideoGravity.resizeAspectFill
-                                       
-                    imageView.layer.addSublayer(videoLayer!)
-                        
-                    player?.play()
+                    
+                    let player = AVPlayer(url: URL(fileURLWithPath: imagePath))
+                    let videoLayer = AVPlayerLayer(player: player)
+                    
+                    videoLayer.frame = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)
+                    videoLayer.videoGravity = AVLayerVideoGravity.resizeAspect
+                         
+                    imageView.frame = videoLayer.frame
+                    imageView.layer.addSublayer(videoLayer)
+                            
+                    player.isMuted = false
+                    player.play()
                 }
             }
         }
         
-        if let size = imageView.image?.size {
-            preferredContentSize = size
-        }
+        preferredContentSize = imageView.frame.size
+    }
+    
+    private func resolutionForLocalVideo(url: URL) -> CGSize? {
+        guard let track = AVURLAsset(url: url).tracks(withMediaType: AVMediaType.video).first else { return nil }
+        let size = track.naturalSize.applying(track.preferredTransform)
+        return CGSize(width: abs(size.width), height: abs(size.height))
     }
     
     required init?(coder: NSCoder) {