@@ -62,7 +62,8 @@ public actor NKTypeIdentifiers {
6262 fileNameWithoutExt = fileName
6363 ext = " "
6464 } else {
65- let props = await resolver. resolve ( inUTI: typeIdentifier, account: account)
65+ let capabilities = await NKCapabilities . shared. getCapabilities ( for: account)
66+ let props = resolver. resolve ( inUTI: typeIdentifier, capabilities: capabilities)
6667 classFile = props. classFile. rawValue
6768 iconName = props. iconName. rawValue
6869 }
@@ -90,3 +91,58 @@ public actor NKTypeIdentifiers {
9091 filePropertyCache. removeAll ( )
9192 }
9293}
94+
95+ /// Helper class to access NKTypeIdentifiers from sync contexts (e.g. in legacy code or libraries).
96+ public final class NKTypeIdentifiersHelper {
97+ public static let shared = NKTypeIdentifiersHelper ( )
98+
99+ // Resolves type info from file name and optional MIME type
100+ public func getInternalType( fileName: String , mimeType inputMimeType: String , directory: Bool , capabilities: NKCapabilities . Capabilities ) -> NKTypeIdentifierCache {
101+ var ext = ( fileName as NSString ) . pathExtension. lowercased ( )
102+ var mimeType = inputMimeType
103+ var classFile = " "
104+ var iconName = " "
105+ var typeIdentifier = " "
106+ var fileNameWithoutExt = ( fileName as NSString ) . deletingPathExtension
107+
108+ // Use full name if no extension
109+ if ext. isEmpty {
110+ fileNameWithoutExt = fileName
111+ }
112+
113+ // Resolve UTType
114+ let type = UTType ( filenameExtension: ext) ?? . data
115+ typeIdentifier = type. identifier
116+
117+ // Resolve MIME type
118+ if mimeType. isEmpty {
119+ mimeType = type. preferredMIMEType ?? " application/octet-stream "
120+ }
121+
122+ // Handle folder case
123+ if directory {
124+ mimeType = " httpd/unix-directory "
125+ classFile = NKTypeClassFile . directory. rawValue
126+ iconName = NKTypeIconFile . directory. rawValue
127+ typeIdentifier = UTType . folder. identifier
128+ fileNameWithoutExt = fileName
129+ ext = " "
130+ } else {
131+ let props = NKFilePropertyResolver ( ) . resolve ( inUTI: typeIdentifier, capabilities: capabilities)
132+ classFile = props. classFile. rawValue
133+ iconName = props. iconName. rawValue
134+ }
135+
136+ // Construct result
137+ let result = NKTypeIdentifierCache (
138+ mimeType: mimeType,
139+ classFile: classFile,
140+ iconName: iconName,
141+ typeIdentifier: typeIdentifier,
142+ fileNameWithoutExt: fileNameWithoutExt,
143+ ext: ext
144+ )
145+
146+ return result
147+ }
148+ }
0 commit comments