From 023289596000c623ed4d4657d20d6fee84ed1adf Mon Sep 17 00:00:00 2001 From: Peter Suwara Date: Wed, 6 Jan 2021 20:40:52 +0300 Subject: [PATCH] Added support for multipart requests to contain an packet request interceptor --- Sources/RxAlamofire/RxAlamofire.swift | 70 +++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 5 deletions(-) diff --git a/Sources/RxAlamofire/RxAlamofire.swift b/Sources/RxAlamofire/RxAlamofire.swift index 4f11623..7e64f92 100644 --- a/Sources/RxAlamofire/RxAlamofire.swift +++ b/Sources/RxAlamofire/RxAlamofire.swift @@ -604,7 +604,57 @@ public func upload(multipartFormData: @escaping (MultipartFormData) -> Void, to url: URLConvertible, method: HTTPMethod, headers: HTTPHeaders? = nil) -> Observable { - return Alamofire.Session.default.rx.upload(multipartFormData: multipartFormData, to: url, method: method, headers: headers) + return Alamofire.Session.default.rx.upload( + multipartFormData: multipartFormData, + to: url, + method: method, + headers: headers) +} + +/** + Returns an observable of a request using the shared manager instance to upload a specific file to a specified URL. + The request is started immediately. + + - parameter multipartFormData: The block for building `MultipartFormData`. + - parameter url: An object adopting `URLConvertible` + - parameter method: Alamofire method object + - parameter headers: A `HTTPHeaders` containing all the additional headers + - returns: The observable of `UploadRequest` for the created request. + */ +public func upload(multipartFormData: @escaping (MultipartFormData) -> Void, + to url: URLConvertible, + method: HTTPMethod, + headers: HTTPHeaders? = nil, + interceptor: RequestInterceptor? = nil) -> Observable { + return Alamofire.Session.default.rx.upload( + multipartFormData: multipartFormData, + to: url, + method: method, + headers: headers, + interceptor: interceptor) +} + +/** + Returns an observable of a request progress using the shared manager instance to upload a specific file to a specified URL. + The request is started immediately. + + - parameter multipartFormData: The block for building `MultipartFormData`. + - parameter url: An object adopting `URLConvertible` + - parameter method: Alamofire method object + - parameter headers: A `HTTPHeaders` containing all the additional headers + - returns: The observable of `RxProgress` for the created request. + */ +public func upload(multipartFormData: @escaping (MultipartFormData) -> Void, + to url: URLConvertible, + method: HTTPMethod, + headers: HTTPHeaders? = nil, + interceptor: RequestInterceptor? = nil) -> Observable { + return Alamofire.Session.default.rx.upload( + multipartFormData: multipartFormData, + to: url, + method: method, + headers: headers, + interceptor: interceptor) } // MARK: Download @@ -1204,9 +1254,14 @@ public extension Reactive where Base: Alamofire.Session { func upload(multipartFormData: @escaping (MultipartFormData) -> Void, to url: URLConvertible, method: HTTPMethod, - headers: HTTPHeaders? = nil) -> Observable { + headers: HTTPHeaders? = nil, + interceptor: RequestInterceptor? = nil) -> Observable { return request { manager in - manager.upload(multipartFormData: multipartFormData, to: url, method: method, headers: headers) + manager.upload(multipartFormData: multipartFormData, + to: url, + method: method, + headers: headers, + interceptor: interceptor) } } @@ -1223,8 +1278,13 @@ public extension Reactive where Base: Alamofire.Session { func upload(multipartFormData: @escaping (MultipartFormData) -> Void, to url: URLConvertible, method: HTTPMethod, - headers: HTTPHeaders? = nil) -> Observable { - return upload(multipartFormData: multipartFormData, to: url, method: method, headers: headers) + headers: HTTPHeaders? = nil, + interceptor: RequestInterceptor? = nil) -> Observable { + return upload(multipartFormData: multipartFormData, + to: url, + method: method, + headers: headers, + interceptor: interceptor) .flatMap { $0.rx.progress() } }