Skip to content
Snippets Groups Projects
Commit 4b8750c8 authored by Tobias Ullerich's avatar Tobias Ullerich
Browse files

Add DataManagerDelegate

parent 55a3f915
No related branches found
No related tags found
No related merge requests found
......@@ -20,6 +20,11 @@ public protocol HttpSuccessFilter
func handleResponse(data: Data?, response: HTTPURLResponse, responseHandler: ResponseHandler?, sender: Any?, promise: Promise<Data?, ResponseError>)
}
public protocol DataManagerDelegate
{
func manipulateRequest(request: Request) -> Request
}
public class DataManager: NSObject, URLSessionDelegate
{
public enum DataManagerError: Error
......@@ -52,6 +57,8 @@ public class DataManager: NSObject, URLSessionDelegate
private var responseOkFilter: HttpSuccessFilter
private var responseFilters: [Int: HttpResponseFilter] = [:]
public var delegate: DataManagerDelegate?
public init(host: Host, responseOkFilter: HttpSuccessFilter, responseFilters: [Int: HttpResponseFilter] = [:], timeout: TimeInterval = 10.0) {
self.host = host
self.responseOkFilter = responseOkFilter
......@@ -85,8 +92,10 @@ public class DataManager: NSObject, URLSessionDelegate
print("Request: \(r)")
}
if var req: URLRequest = createUrlRequest(request: r) {
if let authentication = r.authentication {
let request = delegate?.manipulateRequest(request: r) ?? r
if var req: URLRequest = createUrlRequest(request: request) {
if let authentication = request.authentication {
if let headerKey = authentication.headerKey, let headerValue = authentication.headerValue {
req.setValue(headerValue, forHTTPHeaderField: headerKey)
}
......@@ -106,7 +115,7 @@ public class DataManager: NSObject, URLSessionDelegate
if response.is2xx {
self.responseOkFilter.handleResponse(data: data, response: response, responseHandler: responseHandler, sender: sender, promise: promise)
} else if let filter = self.responseFilters[response.statusCode] {
filter.handleResponse(request: r, data: data, responseHandler: responseHandler, sender: sender, promise: promise)
filter.handleResponse(request: request, data: data, responseHandler: responseHandler, sender: sender, promise: promise)
} else {
promise.fail(error: ResponseError.getErrorForStatusCode(code: response.statusCode))
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment