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
Branches
No related tags found
No related merge requests found
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
*/ */
import Foundation import Foundation
import MobileCoreServices
extension String { extension String {
func toBool() -> Bool? { func toBool() -> Bool? {
...@@ -97,4 +98,37 @@ extension String { ...@@ -97,4 +98,37 @@ extension String {
var boolValue: Bool { var boolValue: Bool {
return (self as NSString).boolValue 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, ...@@ -115,35 +115,15 @@ class ConversationViewController: UIViewController,
let filePath = urls[0].absoluteURL.path let filePath = urls[0].absoluteURL.path
self.log.debug("Successfully imported \(filePath)") self.log.debug("Successfully imported \(filePath)")
let fileName = urls[0].absoluteURL.lastPathComponent let fileName = urls[0].absoluteURL.lastPathComponent
let fileExtension = urls[0].pathExtension
let result = PHAsset.fetchAssets(withALAssetURLs: urls, options: nil) if !fileExtension.isMediaExtension() && !fileExtension.isImageExtension() {
self.viewModel.sendFile(filePath: filePath, displayName: fileName)
guard let localCachePath = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(fileName) else {
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 return
} }
self.log.debug("copying movie to: \(String(describing: localCachePath))") do {
videoData.write(toFile: localCachePath.path, atomically: true) let data = try Data(contentsOf: urls[0])
self.viewModel.sendAndSaveFile(displayName: fileName, self.viewModel.sendAndSaveFile(displayName: fileName, imageData: data)
imageData: videoData as Data) } catch {
})
} else {
self.viewModel.sendFile(filePath: filePath, displayName: fileName) self.viewModel.sendFile(filePath: filePath, displayName: fileName)
} }
} }
......
...@@ -246,22 +246,7 @@ class MessageViewModel { ...@@ -246,22 +246,7 @@ class MessageViewModel {
guard let fileExtension = NSURL(fileURLWithPath: name).pathExtension else { guard let fileExtension = NSURL(fileURLWithPath: name).pathExtension else {
return nil return nil
} }
let uti = UTTypeCreatePreferredIdentifierForTag( if fileExtension.isMediaExtension() {
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 {
// first search for incoming video in downloads folder and for outgoing in recorded // first search for incoming video in downloads folder and for outgoing in recorded
let folderName = self.message.incoming ? Directories.downloads.rawValue : Directories.recorded.rawValue let folderName = self.message.incoming ? Directories.downloads.rawValue : Directories.recorded.rawValue
var path = self.dataTransferService 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