@@ -42,6 +42,7 @@ extension NCNetworking {
42
42
var uploadError = NKError ( )
43
43
44
44
var filesNames = NCManageDatabase . shared. getChunks ( account: metadata. account, ocId: metadata. ocId)
45
+
45
46
if filesNames. count == 0 {
46
47
filesNames = NextcloudKit . shared. nkCommonInstance. chunkedFile ( inputDirectory: directoryProviderStorageOcId, outputDirectory: directoryProviderStorageOcId, fileName: metadata. fileName, chunkSizeMB: chunkSize)
47
48
if filesNames. count > 0 {
@@ -57,7 +58,13 @@ extension NCNetworking {
57
58
NotificationCenter . default. postOnMainThread ( name: NCGlobal . shared. notificationCenterReloadDataSource, userInfo: [ " serverUrl " : metadata. serverUrl] )
58
59
}
59
60
60
- createChunkedFolder ( chunkFolderPath: chunkFolderPath, account: metadata. account) { error in
61
+ let pathServerUrl = CCUtility . returnPathfromServerUrl ( metadata. serverUrl, urlBase: metadata. urlBase, userId: metadata. userId, account: metadata. account) !
62
+ let serverUrlFileNameDestination = metadata. urlBase + " / " + NextcloudKit. shared. nkCommonInstance. dav + " /files/ " + metadata. userId + pathServerUrl + " / " + metadata. fileName
63
+
64
+ let destinationHeader : [ String : String ] = [ " Destination " : serverUrlFileNameDestination]
65
+
66
+ // Create folder for chunks
67
+ createChunkedFolder ( customHeaders: destinationHeader, chunkFolderPath: chunkFolderPath, account: metadata. account) { error in
61
68
62
69
NCContentPresenter . shared. dismiss ( after: NCGlobal . shared. dismissAfterSecond)
63
70
@@ -71,6 +78,7 @@ extension NCNetworking {
71
78
72
79
start ( )
73
80
81
+ // Upload the chunks
74
82
for fileName in filesNames {
75
83
76
84
let serverUrlFileName = chunkFolderPath + " / " + fileName
@@ -91,7 +99,7 @@ extension NCNetworking {
91
99
92
100
let semaphore = DispatchSemaphore ( value: 0 )
93
101
94
- NextcloudKit . shared. upload ( serverUrlFileName: serverUrlFileName, fileNameLocalPath: fileNameChunkLocalPath, requestHandler: { request in
102
+ NextcloudKit . shared. upload ( serverUrlFileName: serverUrlFileName, fileNameLocalPath: fileNameChunkLocalPath, addCustomHeaders : destinationHeader , requestHandler: { request in
95
103
96
104
self . uploadRequest [ fileNameLocalPath] = request
97
105
@@ -147,28 +155,28 @@ extension NCNetworking {
147
155
return
148
156
}
149
157
150
- // Assembling the chunks
158
+ // Assemble the chunks
151
159
let serverUrlFileNameSource = chunkFolderPath + " /.file "
152
- let pathServerUrl = CCUtility . returnPathfromServerUrl ( metadata. serverUrl, urlBase: metadata. urlBase, userId: metadata. userId, account: metadata. account) !
153
- let serverUrlFileNameDestination = metadata. urlBase + " / " + NextcloudKit. shared. nkCommonInstance. dav + " /files/ " + metadata. userId + pathServerUrl + " / " + metadata. fileName
154
160
155
- var customHeader : [ String : String ] = [ : ]
161
+ var customHeaders : [ String : String ] = [ : ]
156
162
157
163
if metadata. creationDate. timeIntervalSince1970 > 0 {
158
- customHeader [ " X-OC-CTime " ] = " \( metadata. creationDate. timeIntervalSince1970) "
164
+ customHeaders [ " X-OC-CTime " ] = " \( metadata. creationDate. timeIntervalSince1970) "
159
165
}
160
166
161
167
if metadata. date. timeIntervalSince1970 > 0 {
162
- customHeader [ " X-OC-MTime " ] = " \( metadata. date. timeIntervalSince1970) "
168
+ customHeaders [ " X-OC-MTime " ] = " \( metadata. date. timeIntervalSince1970) "
163
169
}
164
170
171
+ destinationHeader. forEach { customHeaders [ $0] = $1 }
172
+
165
173
// Calculate Assemble Timeout
166
174
let ASSEMBLE_TIME_PER_GB : Double = 3 * 60 // 3 min
167
175
let ASSEMBLE_TIME_MIN : Double = 60 // 60 sec
168
176
let ASSEMBLE_TIME_MAX : Double = 30 * 60 // 30 min
169
177
let timeout = max ( ASSEMBLE_TIME_MIN, min ( ASSEMBLE_TIME_PER_GB * fileSizeInGB, ASSEMBLE_TIME_MAX) )
170
178
171
- let options = NKRequestOptions ( customHeader: customHeader , timeout: timeout, queue: DispatchQueue . global ( ) )
179
+ let options = NKRequestOptions ( customHeader: customHeaders , timeout: timeout, queue: DispatchQueue . global ( ) )
172
180
173
181
NextcloudKit . shared. moveFileOrFolder ( serverUrlFileNameSource: serverUrlFileNameSource, serverUrlFileNameDestination: serverUrlFileNameDestination, overwrite: true , options: options) { _, error in
174
182
@@ -223,10 +231,10 @@ extension NCNetworking {
223
231
}
224
232
}
225
233
226
- private func createChunkedFolder( chunkFolderPath: String , account: String , completion: @escaping ( _ errorCode: NKError ) -> Void ) {
234
+ private func createChunkedFolder( customHeaders: [ String : String ] , chunkFolderPath: String , account: String , completion: @escaping ( _ errorCode: NKError ) -> Void ) {
235
+
236
+ let options = NKRequestOptions ( customHeader: customHeaders, queue: NextcloudKit . shared. nkCommonInstance. backgroundQueue)
227
237
228
- let options = NKRequestOptions ( queue: NextcloudKit . shared. nkCommonInstance. backgroundQueue)
229
-
230
238
NextcloudKit . shared. readFileOrFolder ( serverUrlFileName: chunkFolderPath, depth: " 0 " , showHiddenFiles: CCUtility . getShowHiddenFiles ( ) , options: options) { _, _, _, error in
231
239
232
240
if error == . success {
0 commit comments