Browse Source

Request task is now optional allowing errors to potentially propagate through.

Christian Noon 9 years ago
parent
commit
cb5e8db685
4 changed files with 16 additions and 10 deletions
  1. 9 3
      Source/Request.swift
  2. 2 2
      Source/SessionDelegate.swift
  3. 4 4
      Source/SessionManager.swift
  4. 1 1
      Source/TaskDelegate.swift

+ 9 - 3
Source/Request.swift

@@ -87,16 +87,16 @@ open class Request {
     }
 
     /// The underlying task.
-    open var task: URLSessionTask { return delegate.task }
+    open var task: URLSessionTask? { return delegate.task }
 
     /// The session belonging to the underlying task.
     open let session: URLSession
 
     /// The request sent or to be sent to the server.
-    open var request: URLRequest? { return task.originalRequest }
+    open var request: URLRequest? { return task?.originalRequest }
 
     /// The response received from the server, if any.
-    open var response: HTTPURLResponse? { return task.response as? HTTPURLResponse }
+    open var response: HTTPURLResponse? { return task?.response as? HTTPURLResponse }
 
     let originalTask: TaskConvertible?
 
@@ -177,6 +177,8 @@ open class Request {
 
     /// Resumes the request.
     open func resume() {
+        guard let task = task else { return }
+
         if startTime == nil { startTime = CFAbsoluteTimeGetCurrent() }
 
         task.resume()
@@ -190,6 +192,8 @@ open class Request {
 
     /// Suspends the request.
     open func suspend() {
+        guard let task = task else { return }
+
         task.suspend()
 
         NotificationCenter.default.post(
@@ -201,6 +205,8 @@ open class Request {
 
     /// Cancels the request.
     open func cancel() {
+        guard let task = task else { return }
+
         task.cancel()
 
         NotificationCenter.default.post(

+ 2 - 2
Source/SessionDelegate.swift

@@ -440,8 +440,8 @@ extension SessionDelegate: URLSessionTaskDelegate {
 
                     let retrySucceeded = strongSelf.sessionManager?.retry(request) ?? false
 
-                    if retrySucceeded {
-                        strongSelf[request.task] = request
+                    if retrySucceeded, let task = request.task {
+                        strongSelf[task] = request
                         return
                     } else {
                         completeTask(session, task, error)

+ 4 - 4
Source/SessionManager.swift

@@ -257,7 +257,7 @@ open class SessionManager {
         let task = originalTask.task(session: session, adapter: adapter, queue: queue)
         let request = DataRequest(session: session, task: task, originalTask: originalTask)
 
-        delegate[request.delegate.task] = request
+        delegate[task] = request
 
         if startRequestsImmediately { request.resume() }
 
@@ -364,7 +364,7 @@ open class SessionManager {
 
         request.downloadDelegate.destination = destination
 
-        delegate[request.delegate.task] = request
+        delegate[task] = request
 
         if startRequestsImmediately { request.resume() }
 
@@ -629,7 +629,7 @@ open class SessionManager {
             request.delegate.taskNeedNewBodyStream = { _, _ in inputStream }
         }
 
-        delegate[request.delegate.task] = request
+        delegate[task] = request
 
         if startRequestsImmediately { request.resume() }
 
@@ -675,7 +675,7 @@ open class SessionManager {
         let task = streamable.task(session: session, adapter: adapter, queue: queue)
         let request = StreamRequest(session: session, task: task, originalTask: streamable)
 
-        delegate[request.delegate.task] = request
+        delegate[task] = request
 
         if startRequestsImmediately { request.resume() }
 

+ 1 - 1
Source/TaskDelegate.swift

@@ -33,7 +33,7 @@ open class TaskDelegate: NSObject {
     /// The serial operation queue used to execute all operations after the task completes.
     open let queue: OperationQueue
 
-    var task: URLSessionTask {
+    var task: URLSessionTask? {
         didSet { reset() }
     }