diff --git a/Source/Request.swift b/Source/Request.swift index 4454d9ea176287b9ff90b3165391375fdeda7ae8..df3954d92ac552f3ce0a0d5d8505e63655539a66 100644 --- a/Source/Request.swift +++ b/Source/Request.swift @@ -77,8 +77,11 @@ open class Request { /// A closure executed when monitoring upload or download progress of a request. public typealias ProgressHandler = (Progress) -> Void - enum RequestType { - case data, download, upload, stream + enum RequestTask { + case data(TaskConvertible?, URLSessionTask?) + case download(TaskConvertible?, URLSessionTask?) + case upload(TaskConvertible?, URLSessionTask?) + case stream(TaskConvertible?, URLSessionTask?) } // MARK: Properties @@ -119,25 +122,22 @@ open class Request { // MARK: Lifecycle - init( - session: URLSession, - requestType: RequestType, - task: URLSessionTask? = nil, - originalTask: TaskConvertible? = nil, - error: Error? = nil) - { + init(session: URLSession, requestTask: RequestTask, error: Error? = nil) { self.session = session - self.originalTask = originalTask - switch (task, requestType) { - case (is URLSessionUploadTask, .upload), (nil, .upload): - taskDelegate = UploadTaskDelegate(task: task) - case (is URLSessionDataTask, .data), (nil, .data): + switch requestTask { + case .data(let originalTask, let task): taskDelegate = DataTaskDelegate(task: task) - case (is URLSessionDownloadTask, .download), (nil, .download): + self.originalTask = originalTask + case .download(let originalTask, let task): taskDelegate = DownloadTaskDelegate(task: task) - default: + self.originalTask = originalTask + case .upload(let originalTask, let task): + taskDelegate = UploadTaskDelegate(task: task) + self.originalTask = originalTask + case .stream(let originalTask, let task): taskDelegate = TaskDelegate(task: task) + self.originalTask = originalTask } delegate.error = error diff --git a/Source/SessionManager.swift b/Source/SessionManager.swift index 6bd647e6c57e255f2c442fbd250b0df8184b4eef..f19f9ff9dee9f50b6ccab06a2eada834e02d5aad 100644 --- a/Source/SessionManager.swift +++ b/Source/SessionManager.swift @@ -253,7 +253,7 @@ open class SessionManager { let originalTask = DataRequest.Requestable(urlRequest: originalRequest) let task = try originalTask.task(session: session, adapter: adapter, queue: queue) - let request = DataRequest(session: session, requestType: .data, task: task, originalTask: originalTask) + let request = DataRequest(session: session, requestTask: .data(originalTask, task)) delegate[task] = request @@ -268,7 +268,7 @@ open class SessionManager { // MARK: Private - Request Implementation private func request(failedWith error: Error) -> DataRequest { - let request = DataRequest(session: session, requestType: .data, error: error) + let request = DataRequest(session: session, requestTask: .data(nil, nil), error: error) if startRequestsImmediately { request.resume() } return request } @@ -372,7 +372,7 @@ open class SessionManager { { do { let task = try downloadable.task(session: session, adapter: adapter, queue: queue) - let request = DownloadRequest(session: session, requestType: .download, task: task, originalTask: downloadable) + let request = DownloadRequest(session: session, requestTask: .download(downloadable, task)) request.downloadDelegate.destination = destination @@ -387,7 +387,7 @@ open class SessionManager { } private func download(failedWith error: Error) -> DownloadRequest { - let download = DownloadRequest(session: session, requestType: .download, error: error) + let download = DownloadRequest(session: session, requestTask: .download(nil, nil), error: error) if startRequestsImmediately { download.resume() } return download } @@ -672,24 +672,24 @@ open class SessionManager { private func upload(_ uploadable: UploadRequest.Uploadable) -> UploadRequest { do { let task = try uploadable.task(session: session, adapter: adapter, queue: queue) - let request = UploadRequest(session: session, requestType: .upload, task: task, originalTask: uploadable) + let upload = UploadRequest(session: session, requestTask: .upload(uploadable, task)) if case let .stream(inputStream, _) = uploadable { - request.delegate.taskNeedNewBodyStream = { _, _ in inputStream } + upload.delegate.taskNeedNewBodyStream = { _, _ in inputStream } } - delegate[task] = request + delegate[task] = upload - if startRequestsImmediately { request.resume() } + if startRequestsImmediately { upload.resume() } - return request + return upload } catch { return upload(failedWith: error) } } private func upload(failedWith error: Error) -> UploadRequest { - let upload = UploadRequest(session: session, requestType: .upload, error: error) + let upload = UploadRequest(session: session, requestTask: .upload(nil, nil), error: error) if startRequestsImmediately { upload.resume() } return upload } @@ -732,7 +732,7 @@ open class SessionManager { private func stream(_ streamable: StreamRequest.Streamable) -> StreamRequest { do { let task = try streamable.task(session: session, adapter: adapter, queue: queue) - let request = StreamRequest(session: session, requestType: .upload, task: task, originalTask: streamable) + let request = StreamRequest(session: session, requestTask: .stream(streamable, task)) delegate[task] = request @@ -745,7 +745,7 @@ open class SessionManager { } private func stream(failedWith error: Error) -> StreamRequest { - let stream = StreamRequest(session: session, requestType: .stream, error: error) + let stream = StreamRequest(session: session, requestTask: .stream(nil, nil), error: error) if startRequestsImmediately { stream.resume() } return stream } diff --git a/Tests/ValidationTests.swift b/Tests/ValidationTests.swift index eed3513188d3e56f9290b6f4b5014ab7189b9f62..d078cf96b0cb9d75240b9c723a435aecf5913d38 100644 --- a/Tests/ValidationTests.swift +++ b/Tests/ValidationTests.swift @@ -342,13 +342,7 @@ class ContentTypeValidationTestCase: BaseTestCase { let originalTask = DataRequest.Requestable(urlRequest: originalRequest) let task = try originalTask.task(session: session, adapter: adapter, queue: queue) - - let request = MockDataRequest( - session: session, - requestType: .data, - task: task, - originalTask: originalTask - ) + let request = MockDataRequest(session: session, requestTask: .data(originalTask, task)) delegate[task] = request @@ -356,7 +350,9 @@ class ContentTypeValidationTestCase: BaseTestCase { return request } catch { - return DataRequest(session: session, requestType: .data, error: error) + let request = DataRequest(session: session, requestTask: .data(nil, nil), error: error) + if startRequestsImmediately { request.resume() } + return request } } @@ -370,13 +366,7 @@ class ContentTypeValidationTestCase: BaseTestCase { let originalTask = DownloadRequest.Downloadable.request(originalRequest) let task = try originalTask.task(session: session, adapter: adapter, queue: queue) - - let request = MockDownloadRequest( - session: session, - requestType: .download, - task: task, - originalTask: originalTask - ) + let request = MockDownloadRequest(session: session, requestTask: .download(originalTask, task)) request.downloadDelegate.destination = destination @@ -386,7 +376,9 @@ class ContentTypeValidationTestCase: BaseTestCase { return request } catch { - return DownloadRequest(session: session, requestType: .download, error: error) + let download = DownloadRequest(session: session, requestTask: .download(nil, nil), error: error) + if startRequestsImmediately { download.resume() } + return download } } }