Skip to content
Snippets Groups Projects
Commit 0630286d authored by Kateryna Kostiuk's avatar Kateryna Kostiuk
Browse files

conversations: data transfer from Files

This patch fixes creating data transfer from Files(iCloud)

Change-Id: I02b91744439c9a32c1b949965fda77394dc85eec
parent 582658ce
No related branches found
No related tags found
No related merge requests found
......@@ -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
}
}
......@@ -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)
}
}
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment