@@ -51,7 +51,7 @@ public class WSRequest {
51
51
for (key, value) in headers {
52
52
r. setValue ( value, forHTTPHeaderField: key)
53
53
}
54
- if let t = self . timeout {
54
+ if let t = timeout {
55
55
r. timeoutInterval = t
56
56
}
57
57
@@ -70,23 +70,26 @@ public class WSRequest {
70
70
/// Returns Promise containing response status code, headers and parsed JSON
71
71
public func fetch( ) -> Promise < ( Int , [ NSObject : AnyObject ] , JSON ) > {
72
72
return Promise< ( Int, [ NSObject : AnyObject] , JSON) > { resolve, reject, progress in
73
- if self . showsNetworkActivityIndicator {
74
- UIApplication . sharedApplication ( ) . networkActivityIndicatorVisible = true
75
- }
76
- if self . logLevels != . None {
77
- print ( " \( self . httpVerb) \( self . URL) " )
78
- print ( " params : \( self . params) " )
73
+ let bgQueue = dispatch_get_global_queue ( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 )
74
+ dispatch_async ( bgQueue) {
75
+ if self . showsNetworkActivityIndicator {
76
+ UIApplication . sharedApplication ( ) . networkActivityIndicatorVisible = true
77
+ }
78
+ if self . logLevels != . None {
79
+ print ( " \( self . httpVerb) \( self . URL) " )
80
+ print ( " params : \( self . params) " )
81
+ if self . isMultipart {
82
+ print ( " \( self . multipartName) : \( self . multipartMimeType) \( self . multipartFileName) " )
83
+ }
84
+ }
79
85
if self . isMultipart {
80
- print ( " \( self . multipartName) : \( self . multipartMimeType) \( self . multipartFileName) " )
86
+ self . sendMultipartRequest ( resolve, reject: reject, progress: progress)
87
+ } else if !self . returnsJSON {
88
+ self . sendRequest ( resolve, reject: reject)
89
+ } else {
90
+ self . sendJSONRequest ( resolve, reject: reject)
81
91
}
82
92
}
83
- if self . isMultipart {
84
- self . sendMultipartRequest ( resolve, reject: reject, progress: progress)
85
- } else if !self . returnsJSON {
86
- self . sendRequest ( resolve, reject: reject)
87
- } else {
88
- self . sendJSONRequest ( resolve, reject: reject)
89
- }
90
93
}
91
94
}
92
95
@@ -126,60 +129,64 @@ public class WSRequest {
126
129
127
130
func sendRequest( resolve: ( result: ( Int , [ NSObject : AnyObject ] , JSON ) ) -> Void , reject: ( error: ErrorType ) -> Void ) {
128
131
self . req = request ( self . buildRequest ( ) )
129
- req? . validate ( ) . response ( completionHandler: { req, response, data, error in
132
+ let bgQueue = dispatch_get_global_queue ( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 )
133
+ req? . validate ( ) . response ( queue: bgQueue) { req, response, data, error in
130
134
UIApplication . sharedApplication ( ) . networkActivityIndicatorVisible = false
131
135
self . printResponseStatusCodeIfNeeded ( response)
132
136
if error == nil {
133
137
resolve ( result: ( response? . statusCode ?? 0 , response? . allHeaderFields ?? [ : ] , JSON ( [ " " : " " ] ) !) )
134
138
} else {
135
- self . rejectCallWithMatchingError ( response, reject: reject)
139
+ self . rejectCallWithMatchingError ( response, data : data , reject: reject)
136
140
}
137
- } )
141
+ }
138
142
}
139
143
140
144
func sendJSONRequest( resolve: ( result: ( Int , [ NSObject : AnyObject ] , JSON ) ) -> Void , reject: ( error: ErrorType ) -> Void ) {
141
145
self . req = request ( self . buildRequest ( ) )
142
- req? . validate ( ) . responseJSON { r in
146
+ let bgQueue = dispatch_get_global_queue ( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 )
147
+ req? . validate ( ) . responseJSON ( queue: bgQueue) { r in
143
148
self . handleJSONResponse ( r, resolve: resolve, reject: reject)
144
149
}
145
150
}
146
151
147
152
func handleJSONResponse( response: Response < AnyObject , NSError > , resolve: ( result: ( Int , [ NSObject : AnyObject ] , JSON ) ) -> Void , reject: ( error: ErrorType ) -> Void ) {
148
153
UIApplication . sharedApplication ( ) . networkActivityIndicatorVisible = false
149
- self . printResponseStatusCodeIfNeeded ( response. response)
154
+ printResponseStatusCodeIfNeeded ( response. response)
150
155
switch response. result {
151
156
case . Success( let value) :
152
- if self . logLevels == . CallsAndResponses {
157
+ if logLevels == . CallsAndResponses {
153
158
print ( value)
154
159
}
155
160
if let json: JSON = JSON ( value) {
156
161
resolve ( result: ( response. response? . statusCode ?? 0 , response. response? . allHeaderFields ?? [ : ] , json) )
157
162
} else {
158
- self . rejectCallWithMatchingError ( response. response, reject: reject)
163
+ rejectCallWithMatchingError ( response. response, reject: reject)
159
164
}
160
165
case . Failure( _) :
161
- self . rejectCallWithMatchingError ( response. response, reject: reject)
166
+ rejectCallWithMatchingError ( response. response, reject: reject)
162
167
}
163
168
}
164
169
165
170
func printResponseStatusCodeIfNeeded( response: NSHTTPURLResponse ? ) {
166
- if self . logLevels == . CallsAndResponses {
171
+ if logLevels == . CallsAndResponses {
167
172
if let sc = response? . statusCode {
168
173
print ( " CODE: \( sc) " )
169
174
}
170
175
}
171
176
}
172
177
173
- func rejectCallWithMatchingError( response: NSHTTPURLResponse ? , reject: ( error: ErrorType ) -> Void ) {
174
- if let sc = response? . statusCode {
175
- switch sc {
176
- case 401 : reject ( error: WSError . UnauthorizedError)
177
- case 404 : reject ( error: WSError . NotFoundError)
178
- default : reject ( error: WSError . NetworkError)
179
- }
180
- } else {
181
- reject ( error: WSError . NetworkError)
178
+ func rejectCallWithMatchingError( response: NSHTTPURLResponse ? , data: NSData ? = nil , reject: ( error: ErrorType ) -> Void ) {
179
+ var error = WSError ( )
180
+ error. httpStatusCode = response? . statusCode ?? 0
181
+ if let d = data,
182
+ json = try ? NSJSONSerialization . JSONObjectWithData ( d, options: NSJSONReadingOptions . AllowFragments) ,
183
+ j = JSON ( json) {
184
+ error. jsonPayload = j
185
+ }
186
+ if let erroType = WSErrorType ( rawValue: error. httpStatusCode) {
187
+ error. type = erroType
182
188
}
189
+ reject( error: error)
183
190
}
184
191
185
192
func methodForHTTPVerb( verb: WSHTTPVerb) - > Alamofire. Method {
0 commit comments