Skip to content

Commit 0864b0d

Browse files
nilsdingmgallien
authored andcommitted
fix(NKFile+Extensions): prevent __NC_ROOT__ from appearing
With nextcloud/NextcloudKit#169 the sync root folder name has changed. This required consumers of the API to update the handling of the root folder case accordingly. BUG: nextcloud/desktop#8832 Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
1 parent b879261 commit 0864b0d

5 files changed

Lines changed: 12 additions & 13 deletions

File tree

Sources/NextcloudFileProviderKit/Enumeration/Enumerator+SyncEngine.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ extension Enumerator {
183183
guard receivedFile.directory ||
184184
serverUrl == dbManager.account.davFilesUrl ||
185185
receivedFile.fullUrlMatches(dbManager.account.davFilesUrl + "/.") ||
186-
(receivedFile.fileName == "." && receivedFile.serverUrl == "..")
186+
(receivedFile.fileName == NextcloudKit.shared.nkCommonInstance.rootFileName && receivedFile.serverUrl == dbManager.account.davFilesUrl)
187187
else {
188188
logger.debug("Read item is a file, converting.", [.url: serverUrl])
189189
var metadata = receivedFile.toItemMetadata()

Sources/NextcloudFileProviderKit/Extensions/NKFile+Extensions.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,13 @@ extension NKFile {
2626

2727
// Don't ask me why, NextcloudKit renames and moves the root folder details
2828
// Also don't ask me why, but, NextcloudKit marks the NKFile for this as not a directory
29-
let rootRequiresFixup = serverUrl == ".." && fileName == "."
29+
let rootServerUrl = urlBase + Account.webDavFilesUrlSuffix + userId
30+
let rootRequiresFixup = serverUrl == rootServerUrl && fileName == NextcloudKit.shared.nkCommonInstance.rootFileName
3031
let ocId = rootRequiresFixup
3132
? NSFileProviderItemIdentifier.rootContainer.rawValue
3233
: self.ocId
3334
let directory = rootRequiresFixup ? true : self.directory
34-
let serverUrl = rootRequiresFixup
35-
? urlBase + Account.webDavFilesUrlSuffix + userId
36-
: self.serverUrl
35+
let serverUrl = rootRequiresFixup ? rootServerUrl : self.serverUrl
3736
let fileName = rootRequiresFixup ? "" : self.fileName
3837

3938
return SendableItemMetadata(

Tests/Interface/MockRemoteItem.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ public class MockRemoteItem: Equatable {
140140
let isRoot = identifier == NSFileProviderItemIdentifier.rootContainer.rawValue
141141
var file = NKFile()
142142
file.fileName = isRoot
143-
? "."
143+
? "__NC_ROOT__"
144144
: trashbinOriginalLocation?.split(separator: "/").last?.toString() ?? name
145145
file.size = size
146146
file.date = creationDate
@@ -149,7 +149,7 @@ public class MockRemoteItem: Equatable {
149149
file.ocId = identifier
150150
file.fileId = identifier.replacingOccurrences(of: trashedItemIdSuffix, with: "")
151151
file.serverUrl = isRoot
152-
? ".."
152+
? serverUrl + "/remote.php/dav/files/" + userId
153153
: parent?.remotePath ?? remotePath
154154
file.account = account
155155
file.user = username

Tests/InterfaceTests/MockRemoteInterfaceTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -503,9 +503,9 @@ final class MockRemoteInterfaceTests: XCTestCase {
503503
let targetRootFile = result.files.first
504504
let expectedRoot = remoteInterface.rootItem
505505
XCTAssertEqual(targetRootFile?.ocId, expectedRoot?.identifier)
506-
XCTAssertEqual(targetRootFile?.fileName, ".") // NextcloudKit gives the root dir this name
506+
XCTAssertEqual(targetRootFile?.fileName, "__NC_ROOT__") // NextcloudKit gives the root dir this name
507507
XCTAssertNotEqual(targetRootFile?.fileName, expectedRoot?.name)
508-
XCTAssertEqual(targetRootFile?.serverUrl, "..") // NextcloudKit gives the root dir this surl
508+
XCTAssertEqual(targetRootFile?.serverUrl, "https://mock.nc.com/remote.php/dav/files/testUserId") // NextcloudKit gives the root dir this url
509509
XCTAssertEqual(targetRootFile?.date, expectedRoot?.creationDate)
510510
XCTAssertEqual(targetRootFile?.etag, expectedRoot?.versionIdentifier)
511511

Tests/NextcloudFileProviderKitTests/NKFileExtensionTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ final class NKFileExtensionsTests: NextcloudFileProviderKitTestCase {
4646
// which has a special serverUrl and fileName.
4747
let rootNKFile = createNKFile(
4848
ocId: "rootId",
49-
serverUrl: "..", // Special root value
50-
fileName: ".", // Special root value
49+
serverUrl: "https://mock.nc.com/remote.php/dav/files/testUserId", // Special root value
50+
fileName: "__NC_ROOT__", // Special root value
5151
directory: false // NextcloudKit sometimes marks the root as not a directory
5252
)
5353

@@ -99,8 +99,8 @@ final class NKFileExtensionsTests: NextcloudFileProviderKitTestCase {
9999
// 1. Arrange: Create an array of NKFiles where the first item is the special root.
100100
let rootNKFile = createNKFile(
101101
ocId: "rootId", // This will be overridden by the logic
102-
serverUrl: "..",
103-
fileName: ".",
102+
serverUrl: "https://mock.nc.com/remote.php/dav/files/testUserId",
103+
fileName: "__NC_ROOT__",
104104
directory: false // Mimic NextcloudKit behavior
105105
)
106106
let childNKFile = createNKFile(

0 commit comments

Comments
 (0)