Skip to content

Commit 41168e0

Browse files
authored
Merge pull request #86 from claucambra/bugfix/capabilities
Fully handle permissions in Item capabilities
2 parents 36ba86a + 9d24b70 commit 41168e0

2 files changed

Lines changed: 468 additions & 36 deletions

File tree

Sources/NextcloudFileProviderKit/Item/Item.swift

Lines changed: 28 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -36,49 +36,41 @@ public class Item: NSObject, NSFileProviderItem {
3636
}
3737

3838
public var capabilities: NSFileProviderItemCapabilities {
39-
guard !metadata.directory else {
40-
var directoryCapabilities: NSFileProviderItemCapabilities = [
41-
.allowsAddingSubItems,
42-
.allowsContentEnumerating,
43-
.allowsReading,
44-
.allowsDeleting,
45-
.allowsReparenting,
46-
.allowsRenaming
47-
]
48-
49-
#if os(macOS)
50-
if #available(macOS 11.3, *) {
51-
directoryCapabilities.insert(.allowsExcludingFromSync)
39+
var capabilities: NSFileProviderItemCapabilities = []
40+
let permissions = metadata.permissions.uppercased()
41+
if permissions.contains("G"), metadata.directory { // Readable
42+
capabilities.insert(.allowsContentEnumerating)
43+
} else if permissions.contains("G") {
44+
capabilities.insert(.allowsReading)
45+
}
46+
if !metadata.lock {
47+
if permissions.contains("D") { // Deletable
48+
capabilities.insert(.allowsDeleting)
5249
}
53-
#endif
54-
55-
// .allowsEvicting deprecated on macOS 13.0+, use contentPolicy instead
56-
if #unavailable(macOS 13.0) {
57-
directoryCapabilities.insert(.allowsEvicting)
50+
if remoteSupportsTrash, !isLockFileName(filename) {
51+
capabilities.insert(.allowsTrashing)
5852
}
59-
60-
if remoteSupportsTrash {
61-
directoryCapabilities.insert(.allowsTrashing)
53+
if permissions.contains("W"), !metadata.directory { // Updateable (file)
54+
capabilities.insert(.allowsWriting)
6255
}
56+
if permissions.contains("NV") { // Updateable, renameable, moveable
57+
capabilities.formUnion([.allowsRenaming, .allowsReparenting])
6358

64-
return directoryCapabilities
59+
if metadata.directory {
60+
capabilities.insert(.allowsAddingSubItems)
61+
}
62+
}
6563
}
66-
guard !metadata.lock else {
67-
return [.allowsReading]
64+
// .allowsEvicting deprecated on macOS 13.0+, use contentPolicy instead
65+
if #unavailable(macOS 13.0), !metadata.keepDownloaded {
66+
capabilities.insert(.allowsEvicting)
6867
}
69-
70-
var itemCapabilities: NSFileProviderItemCapabilities = [
71-
.allowsWriting,
72-
.allowsReading,
73-
.allowsDeleting,
74-
.allowsRenaming,
75-
.allowsReparenting,
76-
.allowsEvicting,
77-
]
78-
if remoteSupportsTrash, !isLockFileName(filename) {
79-
itemCapabilities.insert(.allowsTrashing)
68+
#if os(macOS)
69+
if #available(macOS 11.3, *) {
70+
capabilities.insert(.allowsExcludingFromSync)
8071
}
81-
return itemCapabilities
72+
#endif
73+
return capabilities
8274
}
8375

8476
public var itemVersion: NSFileProviderItemVersion {

0 commit comments

Comments
 (0)