From 808d36bdff37af2663980f64a5032216466648c5 Mon Sep 17 00:00:00 2001 From: Rello Date: Fri, 8 May 2026 13:54:11 +0200 Subject: [PATCH 1/3] fix: Refactor visitedDirectory handling in MaterializedEnumerationObserver visitedDirectory is what keeps a browsed folder in materialisedItemMetadatas() in FilesDatabaseManager.swift (line 591). That list drives checkMaterializedItemsOnServer() in Enumerator.swift (line 423). Preserving visitedDirectory means shared folders gets scanned again when its eTag changes, so the newly added child is discovered and reported. Test change: update MaterialisedEnumerationObserverTests.swift (line 80) so an evicted directory remains visitedDirectory == true. The existing mixed-state test currently expects the opposite, and that expectation is the bug. Signed-off-by: Rello --- .../Enumeration/MaterializedEnumerationObserver.swift | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/shell_integration/MacOSX/NextcloudFileProviderKit/Sources/NextcloudFileProviderKit/Enumeration/MaterializedEnumerationObserver.swift b/shell_integration/MacOSX/NextcloudFileProviderKit/Sources/NextcloudFileProviderKit/Enumeration/MaterializedEnumerationObserver.swift index 14e1609622ab2..45e8bbc1a0ce9 100644 --- a/shell_integration/MacOSX/NextcloudFileProviderKit/Sources/NextcloudFileProviderKit/Enumeration/MaterializedEnumerationObserver.swift +++ b/shell_integration/MacOSX/NextcloudFileProviderKit/Sources/NextcloudFileProviderKit/Enumeration/MaterializedEnumerationObserver.swift @@ -97,7 +97,16 @@ public class MaterializedEnumerationObserver: NSObject, NSFileProviderEnumeratio logger.info("Updating item state to dataless.", [.name: metadata.fileName, .item: evictedItemIdentifier]) metadata.downloaded = false - metadata.visitedDirectory = false + + // Being absent from enumeratorForMaterializedItems only means the item has no + // local materialized content. For directories, visitedDirectory is our refresh + // subscription: if Finder has enumerated a folder before, keep watching it for + // remote child changes even when macOS reports it as dataless. This matters for + // shared mount roots, which may be omitted from materialized items after browsing. + if !metadata.directory { + metadata.visitedDirectory = false + } + dbManager.addItemMetadata(metadata) } From 0a14cc3bfc3399ef194473e5d36fa3828551becc Mon Sep 17 00:00:00 2001 From: Rello Date: Fri, 8 May 2026 16:16:07 +0200 Subject: [PATCH 2/3] fkx Signed-off-by: Rello --- .../MaterialisedEnumerationObserverTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shell_integration/MacOSX/NextcloudFileProviderKit/Tests/NextcloudFileProviderKitTests/MaterialisedEnumerationObserverTests.swift b/shell_integration/MacOSX/NextcloudFileProviderKit/Tests/NextcloudFileProviderKitTests/MaterialisedEnumerationObserverTests.swift index 5a6ac4a0c39f9..e6361d643136f 100644 --- a/shell_integration/MacOSX/NextcloudFileProviderKit/Tests/NextcloudFileProviderKitTests/MaterialisedEnumerationObserverTests.swift +++ b/shell_integration/MacOSX/NextcloudFileProviderKit/Tests/NextcloudFileProviderKitTests/MaterialisedEnumerationObserverTests.swift @@ -131,7 +131,7 @@ final class MaterialisedEnumerationObserverTests: NextcloudFileProviderKitTestCa let finalDirD = dbManager.itemMetadata(ocId: "dirD") XCTAssertFalse( - finalDirD?.visitedDirectory ?? true, "dirD should now be marked as not visited." + finalDirD?.visitedDirectory ?? false, "dirD should be marked as visited." ) expect.fulfill() From 086e5a36f9a70cf4f9c335139970a9b1c30257f3 Mon Sep 17 00:00:00 2001 From: Rello Date: Fri, 8 May 2026 16:40:07 +0200 Subject: [PATCH 3/3] fix(test): Fix test assertion for directory visit status Signed-off-by: Rello --- .../MaterialisedEnumerationObserverTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shell_integration/MacOSX/NextcloudFileProviderKit/Tests/NextcloudFileProviderKitTests/MaterialisedEnumerationObserverTests.swift b/shell_integration/MacOSX/NextcloudFileProviderKit/Tests/NextcloudFileProviderKitTests/MaterialisedEnumerationObserverTests.swift index e6361d643136f..e400d833d932a 100644 --- a/shell_integration/MacOSX/NextcloudFileProviderKit/Tests/NextcloudFileProviderKitTests/MaterialisedEnumerationObserverTests.swift +++ b/shell_integration/MacOSX/NextcloudFileProviderKit/Tests/NextcloudFileProviderKitTests/MaterialisedEnumerationObserverTests.swift @@ -130,7 +130,7 @@ final class MaterialisedEnumerationObserverTests: NextcloudFileProviderKitTestCa XCTAssertTrue(finalItemC?.downloaded ?? false, "itemC should remain downloaded.") let finalDirD = dbManager.itemMetadata(ocId: "dirD") - XCTAssertFalse( + XCTAssertTrue( finalDirD?.visitedDirectory ?? false, "dirD should be marked as visited." )