Skip to content
This repository was archived by the owner on Apr 1, 2023. It is now read-only.

Commit e31b1e2

Browse files
committed
improve function naming, fix empty types fallback, fix fallback to startAccessingSecurityScopedResource
1 parent 86e5160 commit e31b1e2

File tree

3 files changed

+17
-16
lines changed

3 files changed

+17
-16
lines changed

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -123,12 +123,12 @@ Open the file picker that allows the user to select one or more files.
123123

124124
#### PickFilesOptions
125125

126-
| Prop | Type | Description |
127-
| -------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
128-
| **`types`** | <code>string[]</code> | List of accepted file types. Look at [IANA Media Types](https://www.iana.org/assignments/media-types/media-types.xhtml) for a complete list of standard media types. This option cannot be used with `multiple: true` on Android. Example: `['image/png', 'application/pdf']` |
129-
| **`customExtensions`** | <code>string[]</code> | List of custom extensions. Necessary in iOS since the mimetype alone is not enought Example: `['cs2']` |
130-
| **`multiple`** | <code>boolean</code> | Whether multiple files may be selected. Default: `false` |
131-
| **`readData`** | <code>boolean</code> | Whether to read the file data. Default: `false` |
126+
| Prop | Type | Description |
127+
| ---------------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
128+
| **`types`** | <code>string[]</code> | List of accepted file types. Look at [IANA Media Types](https://www.iana.org/assignments/media-types/media-types.xhtml) for a complete list of standard media types. This option cannot be used with `multiple: true` on Android. Example: `['image/png', 'application/pdf']` |
129+
| **`customExtensions`** | <code>string[]</code> | iOS only. List of custom file name extensions (without leading dot '.'). Necessary in iOS since custom mimetypes are not supported. Example: `['cs2']` |
130+
| **`multiple`** | <code>boolean</code> | Whether multiple files may be selected. Default: `false` |
131+
| **`readData`** | <code>boolean</code> | Whether to read the file data. Default: `false` |
132132

133133
</docgen-api>
134134

ios/Plugin/FilePicker.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import UniformTypeIdentifiers
2323
}
2424

2525
@available(iOS 14.0, *)
26-
public func updatedOpenDocumentPicker(multiple: Bool, documentTypes: [UTType]) {
26+
public func openDocumentPickerWithFileExtensions(multiple: Bool, documentTypes: [UTType]) {
2727
DispatchQueue.main.async {
2828
let documentPicker = UIDocumentPickerViewController(forOpeningContentTypes: documentTypes)
2929
documentPicker.delegate = self

ios/Plugin/FilePickerPlugin.swift

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ public class FilePickerPlugin: CAPPlugin {
2525
let types = call.getArray("types", String.self) ?? []
2626
let fileExtensions = call.getArray("customExtensions", String.self) ?? []
2727
if #available(iOS 14.0, *) {
28-
let parsedTypes = newParseTypesOption(types)
28+
let parsedTypes = parseTypesOptionsToUTTypes(types)
2929
let parsedExtensions = parseCustomExtensions(fileExtensions)
3030
let concatenatedTypes = parsedTypes + parsedExtensions
31-
let documentTypes = concatenatedTypes.isEmpty ? [.jpeg] : concatenatedTypes
32-
implementation?.updatedOpenDocumentPicker(multiple: multiple, documentTypes: documentTypes)
31+
let documentTypes = concatenatedTypes.isEmpty ? [.data] : concatenatedTypes
32+
implementation?.openDocumentPickerWithFileExtensions(multiple: multiple, documentTypes: documentTypes)
3333
} else {
3434
// Fallback on earlier versions
3535
let parsedTypes = parseTypesOption(types)
@@ -51,7 +51,7 @@ public class FilePickerPlugin: CAPPlugin {
5151
}
5252

5353
@available(iOS 14.0, *)
54-
@objc func newParseTypesOption(_ types: [String]) -> [UTType] {
54+
@objc func parseTypesOptionsToUTTypes(_ types: [String]) -> [UTType] {
5555
var parsedTypes: [UTType] = []
5656
for (_, type) in types.enumerated() {
5757
guard let utType: UTType = UTType(mimeType: type) else {
@@ -84,15 +84,16 @@ public class FilePickerPlugin: CAPPlugin {
8484
return
8585
}
8686
for (url) in urls {
87-
guard url.startAccessingSecurityScopedResource() else {
88-
return
89-
}
90-
}
87+
guard url.startAccessingSecurityScopedResource() else {
88+
return
89+
}
90+
}
9191
do {
9292
var result = JSObject()
9393
let filesResult = try urls.map {(url: URL) -> JSObject in
9494
guard url.startAccessingSecurityScopedResource() else {
95-
return
95+
let error = NSError(domain: "", code: 0, userInfo: [NSLocalizedDescriptionKey: "File access denied"])
96+
throw error
9697
}
9798
var file = JSObject()
9899
file["path"] = implementation?.getPathFromUrl(url) ?? ""

0 commit comments

Comments
 (0)