Respond to materializedItemsDidChange in FileProviderExtension
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Mon, 13 Mar 2023 12:43:31 +0000 (13:43 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:21:30 +0000 (13:21 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension.swift

index 18953d6331b2ac71b0c70446dd08869aa968eb7b..0a8a3bdcf6c3254038cfae47d12aa89a7c2e44d0 100644 (file)
@@ -570,6 +570,29 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
         return FileProviderEnumerator(enumeratedItemIdentifier: containerItemIdentifier, ncAccount: ncAccount, ncKit: ncKit)
     }
 
+    func materializedItemsDidChange(completionHandler: @escaping () -> Void) {
+        guard let ncAccount = self.ncAccount else {
+            NSLog("Not purging stale local file metadatas, account not set up")
+            completionHandler()
+            return
+        }
+
+        guard let fpManager = NSFileProviderManager(for: domain) else {
+            NSLog("Could not get file provider manager for domain: %@", domain.displayName)
+            completionHandler()
+            return
+        }
+
+        let dbManager = NextcloudFilesDatabaseManager.shared
+        let materialisedEnumerator = fpManager.enumeratorForMaterializedItems()
+        let materialisedObserver = FileProviderMaterialisedEnumerationObserver(ncKitAccount: ncAccount.ncKitAccount) { _ in
+            completionHandler()
+        }
+        let startingPage = NSFileProviderPage(NSFileProviderPage.initialPageSortedByName as Data)
+
+        materialisedEnumerator.enumerateItems(for: materialisedObserver, startingAt: startingPage)
+    }
+
     // MARK: Nextcloud desktop client communication
     func sendFileProviderDomainIdentifier() {
         let command = "FILE_PROVIDER_DOMAIN_IDENTIFIER_REQUEST_REPLY"