diff --git a/SignalServiceKit/src/Network/API/OWSUploadV2.m b/SignalServiceKit/src/Network/API/OWSUploadV2.m index e9f0f2a3b3..5e176e8436 100644 --- a/SignalServiceKit/src/Network/API/OWSUploadV2.m +++ b/SignalServiceKit/src/Network/API/OWSUploadV2.m @@ -224,7 +224,10 @@ void AppendMultipartFormPath(id formData, NSString *name, N self.urlPath = form.key; NSString *uploadUrlPath = @""; - return [OWSUploadV2 uploadObjcWithData:self.avatarData uploadForm:form uploadUrlPath:uploadUrlPath]; + return [OWSUploadV2 uploadObjcWithData:self.avatarData + uploadForm:form + uploadUrlPath:uploadUrlPath + progressBlock:progressBlock]; } @end @@ -373,7 +376,10 @@ void AppendMultipartFormPath(id formData, NSString *name, N self.serverId = serverId; NSString *uploadUrlPath = @"attachments/"; - return [OWSUploadV2 uploadObjcWithData:self.attachmentData uploadForm:form uploadUrlPath:uploadUrlPath]; + return [OWSUploadV2 uploadObjcWithData:self.attachmentData + uploadForm:form + uploadUrlPath:uploadUrlPath + progressBlock:progressBlock]; } @end diff --git a/SignalServiceKit/src/Network/API/OWSUploadV2.swift b/SignalServiceKit/src/Network/API/OWSUploadV2.swift index 6103e17a6d..85c1cca633 100644 --- a/SignalServiceKit/src/Network/API/OWSUploadV2.swift +++ b/SignalServiceKit/src/Network/API/OWSUploadV2.swift @@ -8,8 +8,14 @@ import PromiseKit @objc public class OWSUploadV2: NSObject { @objc - public class func uploadObjc(data: Data, uploadForm: OWSUploadForm, uploadUrlPath: String) -> AnyPromise { - return AnyPromise(upload(data: data, uploadForm: uploadForm, uploadUrlPath: uploadUrlPath)) + public class func uploadObjc(data: Data, + uploadForm: OWSUploadForm, + uploadUrlPath: String, + progressBlock: ((Progress) -> Void)?) -> AnyPromise { + return AnyPromise(upload(data: data, + uploadForm: uploadForm, + uploadUrlPath: uploadUrlPath, + progressBlock: progressBlock)) } } @@ -25,12 +31,15 @@ public extension OWSUploadV2 { // MARK: - - class func upload(data: Data, uploadForm: OWSUploadForm, uploadUrlPath: String) -> Promise { + class func upload(data: Data, + uploadForm: OWSUploadForm, + uploadUrlPath: String, + progressBlock: ((Progress) -> Void)? = nil) -> Promise { let (promise, resolver) = Promise.pending() DispatchQueue.global().async { self.uploadSessionManager.post(uploadUrlPath, - parameters: nil, - constructingBodyWith: { (formData: AFMultipartFormData) -> Void in + parameters: nil, + constructingBodyWith: { (formData: AFMultipartFormData) -> Void in // We have to build up the form manually vs. simply passing in a parameters dict // because AWS is sensitive to the order of the form params (at least the "key" @@ -43,10 +52,14 @@ public extension OWSUploadV2 { formData.appendPart(withForm: data, name: "file") }, - progress: { progress in + progress: { progress in Logger.verbose("progress: \(progress.fractionCompleted)") + + if let progressBlock = progressBlock { + progressBlock(progress) + } }, - success: { (_, _) in + success: { (_, _) in Logger.verbose("Success.") let uploadedUrlPath = uploadForm.key resolver.fulfill(uploadedUrlPath)