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) } diff --git a/shell_integration/MacOSX/NextcloudFileProviderKit/Tests/NextcloudFileProviderKitTests/MaterialisedEnumerationObserverTests.swift b/shell_integration/MacOSX/NextcloudFileProviderKit/Tests/NextcloudFileProviderKitTests/MaterialisedEnumerationObserverTests.swift index 5a6ac4a0c39f9..e400d833d932a 100644 --- a/shell_integration/MacOSX/NextcloudFileProviderKit/Tests/NextcloudFileProviderKitTests/MaterialisedEnumerationObserverTests.swift +++ b/shell_integration/MacOSX/NextcloudFileProviderKit/Tests/NextcloudFileProviderKitTests/MaterialisedEnumerationObserverTests.swift @@ -130,8 +130,8 @@ final class MaterialisedEnumerationObserverTests: NextcloudFileProviderKitTestCa XCTAssertTrue(finalItemC?.downloaded ?? false, "itemC should remain downloaded.") let finalDirD = dbManager.itemMetadata(ocId: "dirD") - XCTAssertFalse( - finalDirD?.visitedDirectory ?? true, "dirD should now be marked as not visited." + XCTAssertTrue( + finalDirD?.visitedDirectory ?? false, "dirD should be marked as visited." ) expect.fulfill()