session-ios/SignalServiceKit/src/Network/API/NetworkManager.swift

54 lines
1.8 KiB
Swift
Raw Normal View History

2018-09-06 06:44:36 +02:00
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
import Foundation
import PromiseKit
enum NetworkManagerError: Error {
/// Wraps TSNetworkManager failure callback params in a single throwable error
case taskError(task: URLSessionDataTask, underlyingError: Error)
}
extension NetworkManagerError {
var isNetworkError: Bool {
switch self {
case .taskError(_, let underlyingError):
return IsNSErrorNetworkFailure(underlyingError)
}
}
var statusCode: Int {
switch self {
case .taskError(let task, _):
return task.statusCode()
}
}
}
extension TSNetworkManager {
2018-10-19 18:25:02 +02:00
public typealias NetworkManagerResult = (task: URLSessionDataTask, responseObject: Any?)
2018-10-13 21:21:46 +02:00
2019-11-13 03:12:25 +01:00
public func perform(_ request: TSRequest, withCompletionQueue queue: DispatchQueue = DispatchQueue.main) -> Promise<NetworkManagerResult> {
return makePromise(request: request, queue: queue)
}
public func makePromise(request: TSRequest, queue: DispatchQueue = DispatchQueue.main) -> Promise<NetworkManagerResult> {
2018-10-19 18:25:02 +02:00
let (promise, resolver) = Promise<NetworkManagerResult>.pending()
2018-09-06 06:44:36 +02:00
self.makeRequest(request,
2019-11-13 03:12:25 +01:00
completionQueue: queue,
2018-09-06 06:44:36 +02:00
success: { task, responseObject in
2018-10-13 21:21:46 +02:00
resolver.fulfill((task: task, responseObject: responseObject))
2018-09-06 06:44:36 +02:00
},
failure: { task, error in
let nmError = NetworkManagerError.taskError(task: task, underlyingError: error)
let nsError: NSError = nmError as NSError
nsError.isRetryable = (error as NSError).isRetryable
2018-10-13 21:21:46 +02:00
resolver.reject(nsError)
2018-09-06 06:44:36 +02:00
})
return promise
}
}