@@ -37,8 +37,8 @@ open class Session {
37
37
/// - parameter handler: The closure that receives result of the request.
38
38
/// - returns: The new session task.
39
39
@discardableResult
40
- open class func send< Request: APIKit . Request > ( _ request: Request , callbackQueue: CallbackQueue ? = nil , handler : @escaping ( Result < Request . Response , SessionTaskError > ) -> Void = { _ in } ) -> SessionTask ? {
41
- return shared. send ( request, callbackQueue: callbackQueue, handler : handler )
40
+ open class func send< Request: APIKit . Request > ( _ request: Request , callbackQueue: CallbackQueue ? = nil , progressHandler : @escaping ( Int64 , Int64 , Int64 ) -> Void = { _ in } , completionHandler : @escaping ( Result < Request . Response , SessionTaskError > ) -> Void = { _ in } ) -> SessionTask ? {
41
+ return shared. send ( request, callbackQueue: callbackQueue, progressHandler : progressHandler , completionHandler : completionHandler )
42
42
}
43
43
44
44
/// Calls `cancelRequests(with:passingTest:)` of `sharedSession`.
@@ -55,41 +55,46 @@ open class Session {
55
55
/// - parameter handler: The closure that receives result of the request.
56
56
/// - returns: The new session task.
57
57
@discardableResult
58
- open func send< Request: APIKit . Request > ( _ request: Request , callbackQueue: CallbackQueue ? = nil , handler : @escaping ( Result < Request . Response , SessionTaskError > ) -> Void = { _ in } ) -> SessionTask ? {
58
+ open func send< Request: APIKit . Request > ( _ request: Request , callbackQueue: CallbackQueue ? = nil , progressHandler : @escaping ( Int64 , Int64 , Int64 ) -> Void = { _ in } , completionHandler : @escaping ( Result < Request . Response , SessionTaskError > ) -> Void = { _ in } ) -> SessionTask ? {
59
59
let callbackQueue = callbackQueue ?? self . callbackQueue
60
60
61
61
let urlRequest : URLRequest
62
62
do {
63
63
urlRequest = try request. buildURLRequest ( )
64
64
} catch {
65
65
callbackQueue. execute {
66
- handler ( . failure( . requestError( error) ) )
66
+ completionHandler ( . failure( . requestError( error) ) )
67
67
}
68
68
return nil
69
69
}
70
70
71
- let task = adapter. createTask ( with: urlRequest) { data, urlResponse, error in
72
- let result : Result < Request . Response , SessionTaskError >
73
-
74
- switch ( data, urlResponse, error) {
75
- case ( _, _, let error? ) :
76
- result = . failure( . connectionError( error) )
71
+ let task = adapter. createTask ( with: urlRequest,
72
+ progressHandler: { bytesSent, totalBytesSent, totalBytesExpectedToSend in
73
+ progressHandler ( bytesSent, totalBytesSent, totalBytesExpectedToSend)
74
+ } ,
75
+ completionHandler: { data, urlResponse, error in
76
+ let result : Result < Request . Response , SessionTaskError >
77
+
78
+ switch ( data, urlResponse, error) {
79
+ case ( _, _, let error? ) :
80
+ result = . failure( . connectionError( error) )
81
+
82
+ case ( let data? , let urlResponse as HTTPURLResponse , _) :
83
+ do {
84
+ result = . success( try request. parse ( data: data as Data , urlResponse: urlResponse) )
85
+ } catch {
86
+ result = . failure( . responseError( error) )
87
+ }
77
88
78
- case ( let data? , let urlResponse as HTTPURLResponse , _) :
79
- do {
80
- result = . success( try request. parse ( data: data as Data , urlResponse: urlResponse) )
81
- } catch {
82
- result = . failure( . responseError( error) )
89
+ default :
90
+ result = . failure( . responseError( ResponseError . nonHTTPURLResponse ( urlResponse) ) )
83
91
}
84
92
85
- default :
86
- result = . failure( . responseError( ResponseError . nonHTTPURLResponse ( urlResponse) ) )
87
- }
88
-
89
- callbackQueue. execute {
90
- handler ( result)
93
+ callbackQueue. execute {
94
+ completionHandler ( result)
95
+ }
91
96
}
92
- }
97
+ )
93
98
94
99
setRequest ( request, forTask: task)
95
100
task. resume ( )
0 commit comments