Skip to content

Commit

Permalink
Merge pull request #9 from lukasz-pomianek/feature/add-no-internet-co…
Browse files Browse the repository at this point in the history
…nnection-handler

Added error handler so user can respond to a specific error different…
  • Loading branch information
dppeak authored Mar 15, 2021
2 parents 9f5c0a4 + 65092b7 commit 2be41e7
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
24 changes: 23 additions & 1 deletion Sources/WebRequest/Delivery/HTTPWebRequestDelivery.swift
Original file line number Diff line number Diff line change
Expand Up @@ -103,21 +103,28 @@ open class HTTPWebRequestDelivery : NSObject, WebRequestDelivery {
let group = DispatchGroup()
var taskData: Data?
var taskResponse: HTTPURLResponse?
var errorCode: ErrorCode?

group.enter()
queue.async {
let task = urlSession.dataTask(
with: urlRequest,
completionHandler: ({ (data, response, _) in
completionHandler: ({ (data, response, error) in
taskData = data
taskResponse = response as? HTTPURLResponse
errorCode = self.parseError(error)
group.leave()
}))
task.resume()
}

let timeoutResult = group.wait(timeout: .now() + timeoutInterval)

if let errorCode = errorCode {
try complete(request: request, errorCode: errorCode)
return
}

guard (timeoutResult != .timedOut) else {
try complete(request: request, errorCode: .TimedOut)
return
Expand Down Expand Up @@ -150,4 +157,19 @@ open class HTTPWebRequestDelivery : NSObject, WebRequestDelivery {
let result = WebRequest.Result(status: status, headers: [:] , data: nil)
try request.onDataReceived?(result, request, percentComplete, target);
}

open func parseError(_ error: Error?) -> ErrorCode? {
guard let error = error else { return nil }
if let urlError = error as? URLError {
switch urlError.code {
case .notConnectedToInternet:
return .NoInternetConnection
case .timedOut:
return .TimedOut
default:
()
}
}
return .MalformedResponse
}
}
1 change: 1 addition & 0 deletions Sources/WebRequest/WebRequest+Result.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ extension WebRequest {
case MalformedURL = -8
case MalformedResponse = -11
case TimedOut = -12
case NoInternetConnection = -13
}

public init(status: Int) {
Expand Down

0 comments on commit 2be41e7

Please sign in to comment.