Skip to content

Commit c0ee0c3

Browse files
committed
fix: Interpretation of lock responses.
Signed-off-by: Iva Horn <iva.horn@icloud.com>
1 parent 503bbad commit c0ee0c3

3 files changed

Lines changed: 47 additions & 15 deletions

File tree

Sources/NextcloudKit/Models/NKDataFileXML.swift

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -429,8 +429,27 @@ public class NKDataFileXML: NSObject {
429429
file.richWorkspace = richWorkspace
430430
}
431431

432-
if let lock = NKLock(xml: propstat["d:prop"]) {
433-
file.lock = lock
432+
if let lock = propstat["d:prop", "nc:lock"].int {
433+
file.lock = NSNumber(integerLiteral: lock).boolValue
434+
}
435+
436+
if let lockOwner = propstat["d:prop", "nc:lock-owner"].text {
437+
file.lockOwner = lockOwner
438+
}
439+
if let lockOwnerEditor = propstat["d:prop", "nc:lock-owner-editor"].text {
440+
file.lockOwnerEditor = lockOwnerEditor
441+
}
442+
if let lockOwnerType = propstat["d:prop", "nc:lock-owner-type"].int {
443+
file.lockOwnerType = lockOwnerType
444+
}
445+
if let lockOwnerDisplayName = propstat["d:prop", "nc:lock-owner-displayname"].text {
446+
file.lockOwnerDisplayName = lockOwnerDisplayName
447+
}
448+
if let lockTime = propstat["d:prop", "nc:lock-time"].int {
449+
file.lockTime = Date(timeIntervalSince1970: TimeInterval(lockTime))
450+
}
451+
if let lockTimeOut = propstat["d:prop", "nc:lock-timeout"].int {
452+
file.lockTimeOut = file.lockTime?.addingTimeInterval(TimeInterval(lockTimeOut))
434453
}
435454

436455
let tagsElements = propstat["d:prop", "nc:system-tags"]

Sources/NextcloudKit/Models/NKFile.swift

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,13 @@ public struct NKFile: Sendable {
3838
public var ocId: String
3939
public var ownerId: String
4040
public var ownerDisplayName: String
41-
42-
///
43-
/// An optional lock on this file. `nil` equals the file not being locked.
44-
///
45-
public var lock: NKLock?
46-
41+
public var lock: Bool
42+
public var lockOwner: String
43+
public var lockOwnerEditor: String
44+
public var lockOwnerType: Int
45+
public var lockOwnerDisplayName: String
46+
public var lockTime: Date?
47+
public var lockTimeOut: Date?
4748
public var path: String
4849
public var permissions: String
4950
public var quotaUsedBytes: Int64
@@ -109,7 +110,13 @@ public struct NKFile: Sendable {
109110
ocId: String = "",
110111
ownerId: String = "",
111112
ownerDisplayName: String = "",
112-
lock: NKLock? = nil,
113+
lock: Bool = false,
114+
lockOwner: String = "",
115+
lockOwnerEditor: String = "",
116+
lockOwnerType: Int = 0,
117+
lockOwnerDisplayName: String = "",
118+
lockTime: Date? = nil,
119+
lockTimeOut: Date? = nil,
113120
path: String = "",
114121
permissions: String = "",
115122
quotaUsedBytes: Int64 = 0,
@@ -167,6 +174,12 @@ public struct NKFile: Sendable {
167174
self.ownerId = ownerId
168175
self.ownerDisplayName = ownerDisplayName
169176
self.lock = lock
177+
self.lockOwner = lockOwner
178+
self.lockOwnerEditor = lockOwnerEditor
179+
self.lockOwnerType = lockOwnerType
180+
self.lockOwnerDisplayName = lockOwnerDisplayName
181+
self.lockTime = lockTime
182+
self.lockTimeOut = lockTimeOut
170183
self.path = path
171184
self.permissions = permissions
172185
self.quotaUsedBytes = quotaUsedBytes

Sources/NextcloudKit/Models/NKLock.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public struct NKLock: Equatable, Sendable {
1818
///
1919
/// App id of an app owned lock to allow clients to suggest joining the collaborative editing session through the web or direct editing.
2020
///
21-
public let ownerEditor: String
21+
public let ownerEditor: String?
2222

2323
///
2424
/// What kind of lock this is.
@@ -53,19 +53,19 @@ public struct NKLock: Equatable, Sendable {
5353
/// This is intended for creating an instance based on a superset of required properties returned by a `PROPFIND` request to the server about an item.
5454
///
5555
public init?(xml properties: XML.Accessor) {
56-
guard let isLocked = properties["nc:lock"].bool else {
56+
guard let rawIsLocked = properties["nc:lock"].int else {
5757
return nil
5858
}
5959

60-
guard let owner = properties["nc:lock-owner"].text else {
60+
guard rawIsLocked > 0 else {
6161
return nil
6262
}
6363

64-
guard let ownerDisplayName = properties["nc:lock-owner-displayname"].text else {
64+
guard let owner = properties["nc:lock-owner"].text else {
6565
return nil
6666
}
6767

68-
guard let ownerEditor = properties["nc:lock-owner-editor"].text else {
68+
guard let ownerDisplayName = properties["nc:lock-owner-displayname"].text else {
6969
return nil
7070
}
7171

@@ -84,7 +84,7 @@ public struct NKLock: Equatable, Sendable {
8484
let lockToken = properties["nc:lock-token"].text
8585

8686
self.owner = owner
87-
self.ownerEditor = ownerEditor
87+
self.ownerEditor = properties["nc:lock-owner-editor"].text
8888
self.ownerType = lockOwnerType
8989
self.ownerDisplayName = ownerDisplayName
9090
self.time = Date(timeIntervalSince1970: rawTime)

0 commit comments

Comments
 (0)