diff --git a/Ring/Ring/Extensions/String+Helpers.swift b/Ring/Ring/Extensions/String+Helpers.swift index 5f04b7cd133b8a49cbf89cf074a6ec0f7ebd29ad..3fbafddbedd4b632839aa144db120b7886cde994 100644 --- a/Ring/Ring/Extensions/String+Helpers.swift +++ b/Ring/Ring/Extensions/String+Helpers.swift @@ -21,6 +21,7 @@ */ import Foundation +import MobileCoreServices extension String { func toBool() -> Bool? { @@ -97,4 +98,37 @@ extension String { var boolValue: Bool { return (self as NSString).boolValue } + + func isMediaExtension() -> Bool { + let uti = UTTypeCreatePreferredIdentifierForTag( + kUTTagClassFilenameExtension, + self as CFString, + nil) + + var fileIsMedia = false + if let value = uti?.takeRetainedValue(), + UTTypeConformsTo(value, kUTTypeMovie) || UTTypeConformsTo(value, kUTTypeVideo) + || UTTypeConformsTo(value, kUTTypeAudio) { + fileIsMedia = true + } + let mediaExtension = ["ogg", "webm"] + if mediaExtension.contains(where: {$0.compare(self, options: .caseInsensitive) == .orderedSame}) { + fileIsMedia = true + } + return fileIsMedia + } + + func isImageExtension() -> Bool { + let uti = UTTypeCreatePreferredIdentifierForTag( + kUTTagClassFilenameExtension, + self as CFString, + nil) + + var fileIsImage = false + if let value = uti?.takeRetainedValue(), + UTTypeConformsTo(value, kUTTypeImage) { + fileIsImage = true + } + return fileIsImage + } } diff --git a/Ring/Ring/Features/Conversations/Conversation/ConversationViewController.swift b/Ring/Ring/Features/Conversations/Conversation/ConversationViewController.swift index decc5f333034b33fff9c93f025af115bdac01397..c21a1eab46cf2a12eb949de196688ad7b1e81115 100644 --- a/Ring/Ring/Features/Conversations/Conversation/ConversationViewController.swift +++ b/Ring/Ring/Features/Conversations/Conversation/ConversationViewController.swift @@ -115,35 +115,15 @@ class ConversationViewController: UIViewController, let filePath = urls[0].absoluteURL.path self.log.debug("Successfully imported \(filePath)") let fileName = urls[0].absoluteURL.lastPathComponent - - let result = PHAsset.fetchAssets(withALAssetURLs: urls, options: nil) - - guard let localCachePath = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(fileName) else { + let fileExtension = urls[0].pathExtension + if !fileExtension.isMediaExtension() && !fileExtension.isImageExtension() { + self.viewModel.sendFile(filePath: filePath, displayName: fileName) return } - self.log.debug("localCachePath: \(String(describing: localCachePath))") - - guard let phAsset = result.firstObject else { return } - - if phAsset.mediaType == .video { - PHImageManager.default() - .requestAVAsset(forVideo: phAsset, - options: PHVideoRequestOptions(), - resultHandler: { (asset, _, _) -> Void in - guard let asset = asset as? AVURLAsset else { - self.log.error("couldn't get asset") - return - } - guard let videoData = NSData(contentsOf: asset.url) else { - self.log.error("couldn't get movie data") - return - } - self.log.debug("copying movie to: \(String(describing: localCachePath))") - videoData.write(toFile: localCachePath.path, atomically: true) - self.viewModel.sendAndSaveFile(displayName: fileName, - imageData: videoData as Data) - }) - } else { + do { + let data = try Data(contentsOf: urls[0]) + self.viewModel.sendAndSaveFile(displayName: fileName, imageData: data) + } catch { self.viewModel.sendFile(filePath: filePath, displayName: fileName) } } diff --git a/Ring/Ring/Features/Conversations/Conversation/MessageViewModel.swift b/Ring/Ring/Features/Conversations/Conversation/MessageViewModel.swift index 35a8ea36c86c7ba99e11a26a5a56a15a85c8e483..86c55b7e3e895d01c3ec96a9c207dd21ceb2737a 100644 --- a/Ring/Ring/Features/Conversations/Conversation/MessageViewModel.swift +++ b/Ring/Ring/Features/Conversations/Conversation/MessageViewModel.swift @@ -246,22 +246,7 @@ class MessageViewModel { guard let fileExtension = NSURL(fileURLWithPath: name).pathExtension else { return nil } - let uti = UTTypeCreatePreferredIdentifierForTag( - kUTTagClassFilenameExtension, - fileExtension as CFString, - nil) - - var fileIsMedia = false - if let value = uti?.takeRetainedValue(), - UTTypeConformsTo(value, kUTTypeMovie) || UTTypeConformsTo(value, kUTTypeVideo) - || UTTypeConformsTo(value, kUTTypeAudio) { - fileIsMedia = true - } - let mediaExtension = ["ogg", "webm"] - if mediaExtension.contains(where: {$0.compare(fileExtension, options: .caseInsensitive) == .orderedSame}) { - fileIsMedia = true - } - if fileIsMedia { + if fileExtension.isMediaExtension() { // first search for incoming video in downloads folder and for outgoing in recorded let folderName = self.message.incoming ? Directories.downloads.rawValue : Directories.recorded.rawValue var path = self.dataTransferService