Complete item method of FileProviderExtension
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Thu, 26 Jan 2023 19:51:23 +0000 (20:51 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:21:15 +0000 (13:21 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension.swift

index 209c626f49477fd1875ef5a57971049fc5841c48..e8ad2becb90480209bed7632059e7f132f7f2162 100644 (file)
@@ -65,9 +65,34 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension {
     func item(for identifier: NSFileProviderItemIdentifier, request: NSFileProviderRequest, completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void) -> Progress {
         // resolve the given identifier to a record in the model
         
-        // TODO: implement the actual lookup
+        if identifier == .rootContainer {
+            guard let ncAccount = ncAccount, let ncKitAccount = ncAccount.ncKitAccount, let serverUrl = ncAccount.serverUrl else {
+                completionHandler(nil, NSFileProviderError(.notAuthenticated))
+                return Progress()
+            }
 
-        completionHandler(FileProviderItem(identifier: identifier), nil)
+            let metadata = NextcloudItemMetadataTable()
+
+            metadata.account = ncKitAccount
+            metadata.directory = true
+            metadata.ocId = NSFileProviderItemIdentifier.rootContainer.rawValue
+            metadata.fileName = "root"
+            metadata.fileNameView = "root"
+            metadata.serverUrl = serverUrl.path
+            metadata.classFile = NKCommon.typeClassFile.directory.rawValue
+
+            completionHandler(FileProviderItem(metadata: metadata, parentItemIdentifier: NSFileProviderItemIdentifier.rootContainer), nil)
+            return Progress()
+        }
+
+        let dbManager = NextcloudFilesDatabaseManager.shared
+        guard let metadata = dbManager.itemMetadataFromFileProviderItemIdentifier(identifier),
+              let parentItemIdentifier = parentItemIdentifierFromMetadata(metadata) else {
+            completionHandler(nil, NSFileProviderError(.noSuchItem))
+            return Progress()
+        }
+
+        completionHandler(FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier), nil)
         return Progress()
     }