Skip to content

Commit fac7cf3

Browse files
authored
Merge pull request #78 from claucambra/bugfix/skip-lock-file-enumeration
Skip enumeration of MS Office/LibreOffice lock files
2 parents d73df81 + 045b0d1 commit fac7cf3

2 files changed

Lines changed: 48 additions & 3 deletions

File tree

Sources/NextcloudFileProviderKit/Metadata/SendableItemMetadata+Array.swift

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,22 @@ extension Array<SendableItemMetadata> {
1818

1919
return await concurrentChunkedCompactMap { itemMetadata in
2020
guard !itemMetadata.e2eEncrypted else {
21-
logger.error(
21+
logger.warning(
2222
"""
2323
Skipping encrypted metadata in enumeration:
24-
\(itemMetadata.ocId, privacy: .public)
25-
\(itemMetadata.fileName, privacy: .public)
24+
ocId: \(itemMetadata.ocId, privacy: .public)
25+
fileName: \(itemMetadata.fileName, privacy: .public)
26+
"""
27+
)
28+
return nil
29+
}
30+
31+
guard !isLockFileName(itemMetadata.fileName) else {
32+
logger.warning(
33+
"""
34+
Skipping remote lock file item metadata in enumeration:
35+
ocId: \(itemMetadata.ocId, privacy: .public)
36+
fileName: \(itemMetadata.fileName, privacy: .public)
2637
"""
2738
)
2839
return nil

Tests/NextcloudFileProviderKitTests/EnumeratorTests.swift

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -913,4 +913,38 @@ final class EnumeratorTests: XCTestCase {
913913
XCTAssertEqual((error as NSError?)?.code, NSFeatureUnsupportedError)
914914
}
915915
}
916+
917+
func testRemoteLockFilesNotEnumerated() async throws {
918+
let db = Self.dbManager.ncDatabase() // Strong ref for in memory test db
919+
debugPrint(db) // Avoid build-time warning about unused variable, ensure compiler won't free
920+
let remoteInterface = MockRemoteInterface(rootItem: rootItem, rootTrashItem: rootTrashItem)
921+
922+
rootItem.children = [remoteFolder]
923+
remoteFolder.parent = rootItem
924+
925+
let remoteLockFileItem = MockRemoteItem(
926+
identifier: "lock-file",
927+
name: "~$lock-file.docx",
928+
remotePath: Self.account.davFilesUrl + "/" + remoteFolder.name + "/~$lock-file.docx",
929+
account: Self.account.ncKitAccount,
930+
username: Self.account.username,
931+
userId: Self.account.id,
932+
serverUrl: Self.account.serverUrl
933+
)
934+
rootItem.children.append(remoteLockFileItem)
935+
remoteLockFileItem.parent = rootItem
936+
937+
let enumerator = Enumerator(
938+
enumeratedItemIdentifier: .rootContainer,
939+
account: Self.account,
940+
remoteInterface: remoteInterface,
941+
dbManager: Self.dbManager
942+
)
943+
let observer = MockEnumerationObserver(enumerator: enumerator)
944+
try await observer.enumerateItems()
945+
XCTAssertEqual(observer.items.count, 1)
946+
XCTAssertFalse(
947+
observer.items.contains(where: { $0.itemIdentifier.rawValue == "lock-file" })
948+
)
949+
}
916950
}

0 commit comments

Comments
 (0)