|
@@ -42,6 +42,7 @@ extension NCNetworking {
|
|
|
var uploadError = NKError()
|
|
|
|
|
|
var filesNames = NCManageDatabase.shared.getChunks(account: metadata.account, ocId: metadata.ocId)
|
|
|
+
|
|
|
if filesNames.count == 0 {
|
|
|
filesNames = NextcloudKit.shared.nkCommonInstance.chunkedFile(inputDirectory: directoryProviderStorageOcId, outputDirectory: directoryProviderStorageOcId, fileName: metadata.fileName, chunkSizeMB: chunkSize)
|
|
|
if filesNames.count > 0 {
|
|
@@ -57,7 +58,13 @@ extension NCNetworking {
|
|
|
NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterReloadDataSource, userInfo: ["serverUrl": metadata.serverUrl])
|
|
|
}
|
|
|
|
|
|
- createChunkedFolder(chunkFolderPath: chunkFolderPath, account: metadata.account) { error in
|
|
|
+ let pathServerUrl = CCUtility.returnPathfromServerUrl(metadata.serverUrl, urlBase: metadata.urlBase, userId: metadata.userId, account: metadata.account)!
|
|
|
+ let serverUrlFileNameDestination = metadata.urlBase + "/" + NextcloudKit.shared.nkCommonInstance.dav + "/files/" + metadata.userId + pathServerUrl + "/" + metadata.fileName
|
|
|
+
|
|
|
+ let destinationHeader: [String: String] = ["Destination" : serverUrlFileNameDestination]
|
|
|
+
|
|
|
+ // Create folder for chunks
|
|
|
+ createChunkedFolder(customHeaders: destinationHeader, chunkFolderPath: chunkFolderPath, account: metadata.account) { error in
|
|
|
|
|
|
NCContentPresenter.shared.dismiss(after: NCGlobal.shared.dismissAfterSecond)
|
|
|
|
|
@@ -71,6 +78,7 @@ extension NCNetworking {
|
|
|
|
|
|
start()
|
|
|
|
|
|
+ // Upload the chunks
|
|
|
for fileName in filesNames {
|
|
|
|
|
|
let serverUrlFileName = chunkFolderPath + "/" + fileName
|
|
@@ -91,7 +99,7 @@ extension NCNetworking {
|
|
|
|
|
|
let semaphore = DispatchSemaphore(value: 0)
|
|
|
|
|
|
- NextcloudKit.shared.upload(serverUrlFileName: serverUrlFileName, fileNameLocalPath: fileNameChunkLocalPath, requestHandler: { request in
|
|
|
+ NextcloudKit.shared.upload(serverUrlFileName: serverUrlFileName, fileNameLocalPath: fileNameChunkLocalPath, addCustomHeaders: destinationHeader, requestHandler: { request in
|
|
|
|
|
|
self.uploadRequest[fileNameLocalPath] = request
|
|
|
|
|
@@ -147,28 +155,28 @@ extension NCNetworking {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- // Assembling the chunks
|
|
|
+ // Assemble the chunks
|
|
|
let serverUrlFileNameSource = chunkFolderPath + "/.file"
|
|
|
- let pathServerUrl = CCUtility.returnPathfromServerUrl(metadata.serverUrl, urlBase: metadata.urlBase, userId: metadata.userId, account: metadata.account)!
|
|
|
- let serverUrlFileNameDestination = metadata.urlBase + "/" + NextcloudKit.shared.nkCommonInstance.dav + "/files/" + metadata.userId + pathServerUrl + "/" + metadata.fileName
|
|
|
|
|
|
- var customHeader: [String: String] = [:]
|
|
|
+ var customHeaders: [String: String] = [:]
|
|
|
|
|
|
if metadata.creationDate.timeIntervalSince1970 > 0 {
|
|
|
- customHeader["X-OC-CTime"] = "\(metadata.creationDate.timeIntervalSince1970)"
|
|
|
+ customHeaders["X-OC-CTime"] = "\(metadata.creationDate.timeIntervalSince1970)"
|
|
|
}
|
|
|
|
|
|
if metadata.date.timeIntervalSince1970 > 0 {
|
|
|
- customHeader["X-OC-MTime"] = "\(metadata.date.timeIntervalSince1970)"
|
|
|
+ customHeaders["X-OC-MTime"] = "\(metadata.date.timeIntervalSince1970)"
|
|
|
}
|
|
|
|
|
|
+ destinationHeader.forEach { customHeaders[$0] = $1 }
|
|
|
+
|
|
|
// Calculate Assemble Timeout
|
|
|
let ASSEMBLE_TIME_PER_GB: Double = 3 * 60 // 3 min
|
|
|
let ASSEMBLE_TIME_MIN: Double = 60 // 60 sec
|
|
|
let ASSEMBLE_TIME_MAX: Double = 30 * 60 // 30 min
|
|
|
let timeout = max(ASSEMBLE_TIME_MIN, min(ASSEMBLE_TIME_PER_GB * fileSizeInGB, ASSEMBLE_TIME_MAX))
|
|
|
|
|
|
- let options = NKRequestOptions(customHeader: customHeader, timeout: timeout, queue: DispatchQueue.global())
|
|
|
+ let options = NKRequestOptions(customHeader: customHeaders, timeout: timeout, queue: DispatchQueue.global())
|
|
|
|
|
|
NextcloudKit.shared.moveFileOrFolder(serverUrlFileNameSource: serverUrlFileNameSource, serverUrlFileNameDestination: serverUrlFileNameDestination, overwrite: true, options: options) { _, error in
|
|
|
|
|
@@ -223,10 +231,10 @@ extension NCNetworking {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private func createChunkedFolder(chunkFolderPath: String, account: String, completion: @escaping (_ errorCode: NKError) -> Void) {
|
|
|
+ private func createChunkedFolder(customHeaders: [String : String], chunkFolderPath: String, account: String, completion: @escaping (_ errorCode: NKError) -> Void) {
|
|
|
+
|
|
|
+ let options = NKRequestOptions(customHeader: customHeaders, queue: NextcloudKit.shared.nkCommonInstance.backgroundQueue)
|
|
|
|
|
|
- let options = NKRequestOptions(queue: NextcloudKit.shared.nkCommonInstance.backgroundQueue)
|
|
|
-
|
|
|
NextcloudKit.shared.readFileOrFolder(serverUrlFileName: chunkFolderPath, depth: "0", showHiddenFiles: CCUtility.getShowHiddenFiles(), options: options) { _, _, _, error in
|
|
|
|
|
|
if error == .success {
|