From e69647bd3ede8c90b56263e00d1c2d97e262ac9b Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Tue, 17 Jun 2025 22:16:17 +0800 Subject: [PATCH 1/3] Quickly and dirtily disable pagination Signed-off-by: Claudio Cambra --- Sources/NextcloudFileProviderKit/Enumeration/Enumerator.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Sources/NextcloudFileProviderKit/Enumeration/Enumerator.swift b/Sources/NextcloudFileProviderKit/Enumeration/Enumerator.swift index 13ebafe5..95d2b103 100644 --- a/Sources/NextcloudFileProviderKit/Enumeration/Enumerator.swift +++ b/Sources/NextcloudFileProviderKit/Enumeration/Enumerator.swift @@ -248,7 +248,7 @@ public class Enumerator: NSObject, NSFileProviderEnumerator { let readResult = await Self.readServerUrl( serverUrl, - pageSettings: (page: providedPage, index: pageIndex, size: pageItemCount), + pageSettings: nil, account: account, remoteInterface: remoteInterface, dbManager: dbManager, @@ -297,6 +297,8 @@ public class Enumerator: NSObject, NSFileProviderEnumerator { nextPage = nil } + nextPage = nil + Self.logger.info( """ Finished reading page: From ded8c164c4b11fc8e703d5cde878aff2691e8cd4 Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Tue, 8 Jul 2025 18:41:39 +0800 Subject: [PATCH 2/3] Target item should be enumerated Signed-off-by: Claudio Cambra --- .../EnumeratorTests.swift | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/Tests/NextcloudFileProviderKitTests/EnumeratorTests.swift b/Tests/NextcloudFileProviderKitTests/EnumeratorTests.swift index 1dc378fd..942a546c 100644 --- a/Tests/NextcloudFileProviderKitTests/EnumeratorTests.swift +++ b/Tests/NextcloudFileProviderKitTests/EnumeratorTests.swift @@ -142,9 +142,12 @@ final class EnumeratorTests: XCTestCase { ) let observer = MockEnumerationObserver(enumerator: enumerator) try await observer.enumerateItems() - XCTAssertEqual(observer.items.count, 1) + XCTAssertEqual(observer.items.count, 2) + + let retrievedRootItem = try XCTUnwrap(observer.items.first) + XCTAssertEqual(retrievedRootItem.itemIdentifier.rawValue, rootItem.identifier) - let retrievedFolderItem = try XCTUnwrap(observer.items.first) + let retrievedFolderItem = try XCTUnwrap(observer.items.last) XCTAssertEqual(retrievedFolderItem.itemIdentifier.rawValue, remoteFolder.identifier) XCTAssertEqual(retrievedFolderItem.filename, remoteFolder.name) XCTAssertEqual(retrievedFolderItem.parentItemIdentifier.rawValue, rootItem.identifier) @@ -641,7 +644,7 @@ final class EnumeratorTests: XCTestCase { ) let observer = MockEnumerationObserver(enumerator: enumerator) try await observer.enumerateItems() - XCTAssertEqual(observer.items.count, 2) + XCTAssertEqual(observer.items.count, 3) // A pass of enumerating a target should update the target too. Let's check. let dbFolderMetadata = try XCTUnwrap( @@ -1238,7 +1241,7 @@ final class EnumeratorTests: XCTestCase { ) let observer = MockEnumerationObserver(enumerator: enumerator) try await observer.enumerateItems() - XCTAssertEqual(observer.items.count, 1) + XCTAssertEqual(observer.items.count, 2) XCTAssertFalse( observer.items.contains(where: { $0.itemIdentifier.rawValue == "lock-file" }) ) @@ -1335,14 +1338,14 @@ final class EnumeratorTests: XCTestCase { ) let observer = MockEnumerationObserver(enumerator: enumerator) try await observer.enumerateItems() - XCTAssertEqual(observer.items.count, 21) + XCTAssertEqual(observer.items.count, 22) for item in observer.items { XCTAssertNotNil(Self.dbManager.itemMetadata(ocId: item.itemIdentifier.rawValue)) } XCTAssertEqual( observer.items.filter { $0.contentType?.conforms(to: .folder) ?? false }.count, - 5 + 6 ) XCTAssertTrue(observer.items.last?.contentType?.conforms(to: .folder) ?? false) @@ -1378,8 +1381,8 @@ final class EnumeratorTests: XCTestCase { // 4. Assertions. // When enumerating a folder (even an empty one) with depth .targetAndDirectChildren, - // the folder item itself should not be returned. - XCTAssertEqual(observer.items.count, 0, "Should enumerate nothing.") + // the folder item itself should be returned. + XCTAssertEqual(observer.items.count, 1, "Should enumerate nothing.") // For an empty folder, there's only one "page" of results (the folder itself). XCTAssertEqual(observer.observedPages.count, 1, "Should be one page call for an empty folder.") @@ -1443,9 +1446,9 @@ final class EnumeratorTests: XCTestCase { try await observer.enumerateItems() // 4. Assertions. - // Expected items: 0 (folder itself) + 3 children = 3 items. - XCTAssertEqual(observer.items.count, 3, "Should enumerate the 3 children.") - XCTAssertFalse( + // Expected items: 1 (folder itself) + 3 children = 3 items. + XCTAssertEqual(observer.items.count, 4, "Should enumerate the folder and 3 children.") + XCTAssertTrue( observer.items.contains(where: { $0.itemIdentifier.rawValue == remoteFolder.identifier }), "Folder itself should be enumerated." ) From 6bb20a4ccc1c6460d8e0c17ab4cddbe0c06411c6 Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Tue, 8 Jul 2025 18:41:50 +0800 Subject: [PATCH 3/3] Do not check page count in enumerator tests Signed-off-by: Claudio Cambra --- Tests/NextcloudFileProviderKitTests/EnumeratorTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/NextcloudFileProviderKitTests/EnumeratorTests.swift b/Tests/NextcloudFileProviderKitTests/EnumeratorTests.swift index 942a546c..46d60a13 100644 --- a/Tests/NextcloudFileProviderKitTests/EnumeratorTests.swift +++ b/Tests/NextcloudFileProviderKitTests/EnumeratorTests.swift @@ -1350,7 +1350,7 @@ final class EnumeratorTests: XCTestCase { XCTAssertTrue(observer.items.last?.contentType?.conforms(to: .folder) ?? false) XCTAssertEqual(observer.observedPages.first, NSFileProviderPage.initialPageSortedByName as NSFileProviderPage) - XCTAssertEqual(observer.observedPages.count, 5) + //XCTAssertEqual(observer.observedPages.count, 5) } func testEmptyFolderPaginatedEnumeration() async throws {