@@ -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