|
|
@ -95,35 +95,11 @@ public class FilePickerController: NSObject {
|
|
|
|
return nil
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private func saveTemporaryFile(_ sourceUrl: URL) throws -> URL {
|
|
|
|
|
|
|
|
var directory = URL(fileURLWithPath: NSTemporaryDirectory())
|
|
|
|
|
|
|
|
if let cachesDirectory = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first {
|
|
|
|
|
|
|
|
directory = cachesDirectory
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
let targetUrl = directory.appendingPathComponent(sourceUrl.lastPathComponent)
|
|
|
|
|
|
|
|
do {
|
|
|
|
|
|
|
|
try deleteFile(targetUrl)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
try FileManager.default.copyItem(at: sourceUrl, to: targetUrl)
|
|
|
|
|
|
|
|
return targetUrl
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private func deleteFile(_ url: URL) throws {
|
|
|
|
|
|
|
|
if FileManager.default.fileExists(atPath: url.path) {
|
|
|
|
|
|
|
|
try FileManager.default.removeItem(atPath: url.path)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
extension FilePickerController: UIDocumentPickerDelegate {
|
|
|
|
extension FilePickerController: UIDocumentPickerDelegate {
|
|
|
|
public func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
|
|
|
|
public func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
|
|
|
|
do {
|
|
|
|
self.plugin.onFilePickerEvent(.selected(urls))
|
|
|
|
let temporaryUrls = try urls.map { try saveTemporaryFile($0) }
|
|
|
|
|
|
|
|
self.plugin.onFilePickerEvent(.selected(temporaryUrls))
|
|
|
|
|
|
|
|
} catch {
|
|
|
|
|
|
|
|
self.plugin.onFilePickerEvent(.error("Failed to create a temporary copy of the file"))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
|
|
|
|
public func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
|
|
|
@ -148,12 +124,7 @@ extension FilePickerController: UIImagePickerControllerDelegate, UINavigationCon
|
|
|
|
public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
|
|
|
|
public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
|
|
|
|
dismissViewController(picker) {
|
|
|
|
dismissViewController(picker) {
|
|
|
|
if let url = info[.mediaURL] as? URL {
|
|
|
|
if let url = info[.mediaURL] as? URL {
|
|
|
|
do {
|
|
|
|
self.plugin.onFilePickerEvent(.selected([url]))
|
|
|
|
let temporaryUrl = try self.saveTemporaryFile(url)
|
|
|
|
|
|
|
|
self.plugin.onFilePickerEvent(.selected([temporaryUrl]))
|
|
|
|
|
|
|
|
} catch {
|
|
|
|
|
|
|
|
self.plugin.onFilePickerEvent(.error("Failed to create a temporary copy of the file"))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
self.plugin.onFilePickerEvent(.cancelled)
|
|
|
|
self.plugin.onFilePickerEvent(.cancelled)
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -169,7 +140,7 @@ extension FilePickerController: PHPickerViewControllerDelegate {
|
|
|
|
self.plugin.onFilePickerEvent(.cancelled)
|
|
|
|
self.plugin.onFilePickerEvent(.cancelled)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
var temporaryUrls: [URL] = []
|
|
|
|
var urls: [URL] = []
|
|
|
|
var errorMessage: String?
|
|
|
|
var errorMessage: String?
|
|
|
|
let dispatchGroup = DispatchGroup()
|
|
|
|
let dispatchGroup = DispatchGroup()
|
|
|
|
for result in results {
|
|
|
|
for result in results {
|
|
|
@ -190,12 +161,7 @@ extension FilePickerController: PHPickerViewControllerDelegate {
|
|
|
|
errorMessage = "Unknown error"
|
|
|
|
errorMessage = "Unknown error"
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
do {
|
|
|
|
urls.append(url)
|
|
|
|
let temporaryUrl = try self.saveTemporaryFile(url)
|
|
|
|
|
|
|
|
temporaryUrls.append(temporaryUrl)
|
|
|
|
|
|
|
|
} catch {
|
|
|
|
|
|
|
|
errorMessage = "Failed to create a temporary copy of the file"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
})
|
|
|
|
} else if result.itemProvider.hasItemConformingToTypeIdentifier(UTType.image.identifier) {
|
|
|
|
} else if result.itemProvider.hasItemConformingToTypeIdentifier(UTType.image.identifier) {
|
|
|
|
dispatchGroup.enter()
|
|
|
|
dispatchGroup.enter()
|
|
|
@ -211,12 +177,7 @@ extension FilePickerController: PHPickerViewControllerDelegate {
|
|
|
|
errorMessage = "Unknown error"
|
|
|
|
errorMessage = "Unknown error"
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
do {
|
|
|
|
urls.append(url)
|
|
|
|
let temporaryUrl = try self.saveTemporaryFile(url)
|
|
|
|
|
|
|
|
temporaryUrls.append(temporaryUrl)
|
|
|
|
|
|
|
|
} catch {
|
|
|
|
|
|
|
|
errorMessage = "Failed to create a temporary copy of the file"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
})
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
errorMessage = "Unsupported file type identifier"
|
|
|
|
errorMessage = "Unsupported file type identifier"
|
|
|
@ -227,7 +188,7 @@ extension FilePickerController: PHPickerViewControllerDelegate {
|
|
|
|
self.plugin.onFilePickerEvent(.error(errorMessage))
|
|
|
|
self.plugin.onFilePickerEvent(.error(errorMessage))
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
self.plugin.onFilePickerEvent(.selected(temporaryUrls))
|
|
|
|
self.plugin.onFilePickerEvent(.selected(urls))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|