Skip to content

Commit bc3d109

Browse files
Merge pull request #221 from nextcloud/share-put-response
Modify upload PUT request
2 parents 4204ead + 9c12bd3 commit bc3d109

3 files changed

Lines changed: 34 additions & 20 deletions

File tree

Sources/NextcloudKit/NKCommon.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public protocol NextcloudKitDelegate: AnyObject, Sendable {
2727
func downloadingFinish(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL)
2828

2929
func downloadComplete(fileName: String, serverUrl: String, etag: String?, date: Date?, dateLastModified: Date?, length: Int64, task: URLSessionTask, error: NKError)
30-
func uploadComplete(fileName: String, serverUrl: String, ocId: String?, etag: String?, date: Date?, size: Int64, task: URLSessionTask, error: NKError)
30+
func uploadComplete(fileName: String, serverUrl: String, ocId: String?, etag: String?, date: Date?, size: Int64, ownerId: String?, permissions: String?, task: URLSessionTask, error: NKError)
3131
}
3232

3333
public extension NextcloudKitDelegate {
@@ -44,7 +44,7 @@ public extension NextcloudKitDelegate {
4444
func downloadingFinish(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) { }
4545

4646
func downloadComplete(fileName: String, serverUrl: String, etag: String?, date: Date?, dateLastModified: Date?, length: Int64, task: URLSessionTask, error: NKError) { }
47-
func uploadComplete(fileName: String, serverUrl: String, ocId: String?, etag: String?, date: Date?, size: Int64, task: URLSessionTask, error: NKError) { }
47+
func uploadComplete(fileName: String, serverUrl: String, ocId: String?, etag: String?, date: Date?, size: Int64, ownerId: String?, permissions: String?, task: URLSessionTask, error: NKError) { }
4848
}
4949

5050
public struct NKCommon: Sendable {

Sources/NextcloudKit/NextcloudKit+Upload.swift

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ public extension NextcloudKit {
2727
/// - etag: The entity tag for versioning.
2828
/// - date: The server date of the operation.
2929
/// - size: The total uploaded size in bytes.
30-
/// - headers: The response headers.
30+
/// - ownerId: The owner id returned by the server.
31+
/// - permissions: The DAV permissions returned by the server.
32+
/// - response: The raw upload response.
3133
/// - nkError: The result status.
3234
func upload(serverUrlFileName: Any,
3335
fileNameLocalPath: String,
@@ -40,7 +42,7 @@ public extension NextcloudKit {
4042
requestHandler: @escaping (_ request: UploadRequest) -> Void = { _ in },
4143
taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in },
4244
progressHandler: @escaping (_ progress: Progress) -> Void = { _ in },
43-
completionHandler: @escaping (_ account: String, _ ocId: String?, _ etag: String?, _ date: Date?, _ size: Int64, _ response: AFDataResponse<Data>?, _ nkError: NKError) -> Void) {
45+
completionHandler: @escaping (_ account: String, _ ocId: String?, _ etag: String?, _ date: Date?, _ size: Int64, _ ownerId: String?, _ permissions: String?, _ response: AFDataResponse<Data>?, _ nkError: NKError) -> Void) {
4446
var convertible: URLConvertible?
4547
var uploadedSize: Int64 = 0
4648

@@ -52,7 +54,7 @@ public extension NextcloudKit {
5254
guard let url = convertible,
5355
let nkSession = nkCommonInstance.nksessions.session(forAccount: account),
5456
var headers = nkCommonInstance.getStandardHeaders(account: account, options: options) else {
55-
return options.queue.async { completionHandler(account, nil, nil, nil, 0, nil, .urlError) }
57+
return options.queue.async { completionHandler(account, nil, nil, nil, 0, nil, nil, nil, .urlError) }
5658
}
5759
let fileNameLocalPathUrl = URL(fileURLWithPath: fileNameLocalPath)
5860
// Epoch of linux do not permitted negativ value
@@ -80,27 +82,30 @@ public extension NextcloudKit {
8082
uploadedSize = progress.totalUnitCount
8183
options.queue.async { progressHandler(progress) }
8284
} .responseData(queue: self.nkCommonInstance.backgroundQueue) { response in
83-
var ocId: String?, etag: String?, date: Date?
84-
85-
if self.nkCommonInstance.findHeader("oc-fileid", allHeaderFields: response.response?.allHeaderFields) != nil {
86-
ocId = self.nkCommonInstance.findHeader("oc-fileid", allHeaderFields: response.response?.allHeaderFields)
87-
} else if self.nkCommonInstance.findHeader("fileid", allHeaderFields: response.response?.allHeaderFields) != nil {
88-
ocId = self.nkCommonInstance.findHeader("fileid", allHeaderFields: response.response?.allHeaderFields)
85+
var ocId: String?, etag: String?, date: Date?, ownerId: String?, permissions: String?
86+
let allHeaderFields = response.response?.allHeaderFields
87+
88+
ownerId = self.nkCommonInstance.findHeader("x-nc-ownerid", allHeaderFields: allHeaderFields)
89+
permissions = self.nkCommonInstance.findHeader("x-nc-permissions", allHeaderFields: allHeaderFields)
90+
if self.nkCommonInstance.findHeader("oc-fileid", allHeaderFields: allHeaderFields) != nil {
91+
ocId = self.nkCommonInstance.findHeader("oc-fileid", allHeaderFields: allHeaderFields)
92+
} else if self.nkCommonInstance.findHeader("fileid", allHeaderFields: allHeaderFields) != nil {
93+
ocId = self.nkCommonInstance.findHeader("fileid", allHeaderFields: allHeaderFields)
8994
}
90-
if self.nkCommonInstance.findHeader("oc-etag", allHeaderFields: response.response?.allHeaderFields) != nil {
91-
etag = self.nkCommonInstance.findHeader("oc-etag", allHeaderFields: response.response?.allHeaderFields)
92-
} else if self.nkCommonInstance.findHeader("etag", allHeaderFields: response.response?.allHeaderFields) != nil {
93-
etag = self.nkCommonInstance.findHeader("etag", allHeaderFields: response.response?.allHeaderFields)
95+
if self.nkCommonInstance.findHeader("oc-etag", allHeaderFields: allHeaderFields) != nil {
96+
etag = self.nkCommonInstance.findHeader("oc-etag", allHeaderFields: allHeaderFields)
97+
} else if self.nkCommonInstance.findHeader("etag", allHeaderFields: allHeaderFields) != nil {
98+
etag = self.nkCommonInstance.findHeader("etag", allHeaderFields: allHeaderFields)
9499
}
95100
if etag != nil {
96101
etag = etag?.replacingOccurrences(of: "\"", with: "")
97102
}
98-
if let dateRaw = self.nkCommonInstance.findHeader("date", allHeaderFields: response.response?.allHeaderFields) {
103+
if let dateRaw = self.nkCommonInstance.findHeader("date", allHeaderFields: allHeaderFields) {
99104
date = dateRaw.parsedDate(using: "EEE, dd MMM y HH:mm:ss zzz")
100105
}
101106

102107
options.queue.async {
103-
completionHandler(account, ocId, etag, date, uploadedSize, response, self.evaluateResponse(response))
108+
completionHandler(account, ocId, etag, date, uploadedSize, ownerId, permissions, response, self.evaluateResponse(response))
104109
}
105110
}
106111

@@ -119,7 +124,9 @@ public extension NextcloudKit {
119124
/// - etag: The file etag returned by the server.
120125
/// - date: The server timestamp.
121126
/// - size: The size of the uploaded file in bytes.
122-
/// - headers: The raw HTTP response headers.
127+
/// - ownerId: The owner id returned by the server.
128+
/// - permissions: The DAV permissions returned by the server.
129+
/// - response: The raw upload response.
123130
/// - error: The NKError result of the upload.
124131
func uploadAsync(serverUrlFileName: Any,
125132
fileNameLocalPath: String,
@@ -138,6 +145,8 @@ public extension NextcloudKit {
138145
etag: String?,
139146
date: Date?,
140147
size: Int64,
148+
ownerId: String?,
149+
permissions: String?,
141150
response: AFDataResponse<Data>?,
142151
error: NKError
143152
) {
@@ -152,13 +161,15 @@ public extension NextcloudKit {
152161
options: options,
153162
requestHandler: requestHandler,
154163
taskHandler: taskHandler,
155-
progressHandler: progressHandler) { account, ocId, etag, date, size, response, error in
164+
progressHandler: progressHandler) { account, ocId, etag, date, size, ownerId, permissions, response, error in
156165
continuation.resume(returning: (
157166
account: account,
158167
ocId: ocId,
159168
etag: etag,
160169
date: date,
161170
size: size,
171+
ownerId: ownerId,
172+
permissions: permissions,
162173
response: response,
163174
error: error
164175
))

Sources/NextcloudKit/NextcloudKitBackground.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@ public final class NKBackground: NSObject, URLSessionTaskDelegate, URLSessionDel
280280

281281
public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
282282
var fileName: String = "", serverUrl: String = "", etag: String?, ocId: String?, date: Date?, dateLastModified: Date?, length: Int64 = 0
283+
var ownerId: String?, permissions: String?
283284
let url = task.currentRequest?.url?.absoluteString.removingPercentEncoding
284285
if let url {
285286
fileName = (url as NSString).lastPathComponent
@@ -302,6 +303,8 @@ public final class NKBackground: NSObject, URLSessionTaskDelegate, URLSessionDel
302303
}
303304

304305
if let header = (task.response as? HTTPURLResponse)?.allHeaderFields {
306+
ownerId = self.nkCommonInstance.findHeader("x-nc-ownerid", allHeaderFields: header)
307+
permissions = self.nkCommonInstance.findHeader("x-nc-permissions", allHeaderFields: header)
305308
if self.nkCommonInstance.findHeader("oc-fileid", allHeaderFields: header) != nil {
306309
ocId = self.nkCommonInstance.findHeader("oc-fileid", allHeaderFields: header)
307310
} else if self.nkCommonInstance.findHeader("fileid", allHeaderFields: header) != nil {
@@ -325,7 +328,7 @@ public final class NKBackground: NSObject, URLSessionTaskDelegate, URLSessionDel
325328
if task is URLSessionDownloadTask {
326329
self.nkCommonInstance.delegate?.downloadComplete(fileName: fileName, serverUrl: serverUrl, etag: etag, date: date, dateLastModified: dateLastModified, length: length, task: task, error: nkError)
327330
} else if task is URLSessionUploadTask {
328-
self.nkCommonInstance.delegate?.uploadComplete(fileName: fileName, serverUrl: serverUrl, ocId: ocId, etag: etag, date: date, size: task.countOfBytesExpectedToSend, task: task, error: nkError)
331+
self.nkCommonInstance.delegate?.uploadComplete(fileName: fileName, serverUrl: serverUrl, ocId: ocId, etag: etag, date: date, size: task.countOfBytesExpectedToSend, ownerId: ownerId, permissions: permissions, task: task, error: nkError)
329332
}
330333
}
331334

0 commit comments

Comments
 (0)