Переглянути джерело

Moved Manager and Request Download extensions into a separate Swift file.

Christian Noon 10 роки тому
батько
коміт
e67f7f2ed2
3 змінених файлів з 178 додано та 151 видалено
  1. 6 0
      Alamofire.xcodeproj/project.pbxproj
  2. 0 151
      Source/Alamofire.swift
  3. 172 0
      Source/Download.swift

+ 6 - 0
Alamofire.xcodeproj/project.pbxproj

@@ -11,6 +11,8 @@
 		4CDE2C381AF8932A00BABAE5 /* Manager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDE2C361AF8932A00BABAE5 /* Manager.swift */; };
 		4CDE2C3A1AF899EC00BABAE5 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDE2C391AF899EC00BABAE5 /* Request.swift */; };
 		4CDE2C3B1AF899EC00BABAE5 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDE2C391AF899EC00BABAE5 /* Request.swift */; };
+		4CDE2C3D1AF89D4900BABAE5 /* Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDE2C3C1AF89D4900BABAE5 /* Download.swift */; };
+		4CDE2C3E1AF89D4900BABAE5 /* Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDE2C3C1AF89D4900BABAE5 /* Download.swift */; };
 		4CE2724F1AF88FB500F1D59A /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE2724E1AF88FB500F1D59A /* ParameterEncoding.swift */; };
 		4CE272501AF88FB500F1D59A /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE2724E1AF88FB500F1D59A /* ParameterEncoding.swift */; };
 		4DD67C241A5C58FB00ED2280 /* Alamofire.h in Headers */ = {isa = PBXBuildFile; fileRef = F8111E3819A95C8B0040E7D1 /* Alamofire.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -58,6 +60,7 @@
 /* Begin PBXFileReference section */
 		4CDE2C361AF8932A00BABAE5 /* Manager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Manager.swift; sourceTree = "<group>"; };
 		4CDE2C391AF899EC00BABAE5 /* Request.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Request.swift; sourceTree = "<group>"; };
+		4CDE2C3C1AF89D4900BABAE5 /* Download.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Download.swift; sourceTree = "<group>"; };
 		4CE2724E1AF88FB500F1D59A /* ParameterEncoding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ParameterEncoding.swift; sourceTree = "<group>"; };
 		4DD67C0B1A5C55C900ED2280 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		F8111E3319A95C8B0040E7D1 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -135,6 +138,7 @@
 			isa = PBXGroup;
 			children = (
 				F897FF4019AA800700AB5182 /* Alamofire.swift */,
+				4CDE2C3C1AF89D4900BABAE5 /* Download.swift */,
 				4CDE2C361AF8932A00BABAE5 /* Manager.swift */,
 				4CE2724E1AF88FB500F1D59A /* ParameterEncoding.swift */,
 				4CDE2C391AF899EC00BABAE5 /* Request.swift */,
@@ -354,6 +358,7 @@
 				4CDE2C3B1AF899EC00BABAE5 /* Request.swift in Sources */,
 				4CDE2C381AF8932A00BABAE5 /* Manager.swift in Sources */,
 				4DD67C251A5C590000ED2280 /* Alamofire.swift in Sources */,
+				4CDE2C3E1AF89D4900BABAE5 /* Download.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -365,6 +370,7 @@
 				4CDE2C3A1AF899EC00BABAE5 /* Request.swift in Sources */,
 				4CDE2C371AF8932A00BABAE5 /* Manager.swift in Sources */,
 				F897FF4119AA800700AB5182 /* Alamofire.swift in Sources */,
+				4CDE2C3D1AF89D4900BABAE5 /* Download.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};

+ 0 - 151
Source/Alamofire.swift

@@ -363,157 +363,6 @@ extension Request {
     }
 }
 
-// MARK: - Download
-
-extension Manager {
-    private enum Downloadable {
-        case Request(NSURLRequest)
-        case ResumeData(NSData)
-    }
-
-    private func download(downloadable: Downloadable, destination: Request.DownloadFileDestination) -> Request {
-        var downloadTask: NSURLSessionDownloadTask!
-
-        switch downloadable {
-        case .Request(let request):
-            dispatch_sync(queue) {
-                downloadTask = self.session.downloadTaskWithRequest(request)
-            }
-        case .ResumeData(let resumeData):
-            dispatch_sync(queue) {
-                downloadTask = self.session.downloadTaskWithResumeData(resumeData)
-            }
-        }
-
-        let request = Request(session: session, task: downloadTask)
-        if let downloadDelegate = request.delegate as? Request.DownloadTaskDelegate {
-            downloadDelegate.downloadTaskDidFinishDownloadingToURL = { (session, downloadTask, URL) in
-                return destination(URL, downloadTask.response as! NSHTTPURLResponse)
-            }
-        }
-        delegate[request.delegate.task] = request.delegate
-
-        if startRequestsImmediately {
-            request.resume()
-        }
-
-        return request
-    }
-
-    // MARK: Request
-
-    /**
-        Creates a download request using the shared manager instance for the specified method and URL string.
-
-        :param: method The HTTP method.
-        :param: URLString The URL string.
-        :param: destination The closure used to determine the destination of the downloaded file.
-
-        :returns: The created download request.
-    */
-    public func download(method: Method, _ URLString: URLStringConvertible, destination: Request.DownloadFileDestination) -> Request {
-        return download(URLRequest(method, URLString), destination: destination)
-    }
-
-    /**
-        Creates a request for downloading from the specified URL request.
-
-        If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.
-
-        :param: URLRequest The URL request
-        :param: destination The closure used to determine the destination of the downloaded file.
-
-        :returns: The created download request.
-    */
-    public func download(URLRequest: URLRequestConvertible, destination: Request.DownloadFileDestination) -> Request {
-        return download(.Request(URLRequest.URLRequest), destination: destination)
-    }
-
-    // MARK: Resume Data
-
-    /**
-        Creates a request for downloading from the resume data produced from a previous request cancellation.
-
-        If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.
-
-        :param: resumeData The resume data. This is an opaque data blob produced by `NSURLSessionDownloadTask` when a task is cancelled. See `NSURLSession -downloadTaskWithResumeData:` for additional information.
-        :param: destination The closure used to determine the destination of the downloaded file.
-
-        :returns: The created download request.
-    */
-    public func download(resumeData: NSData, destination: Request.DownloadFileDestination) -> Request {
-        return download(.ResumeData(resumeData), destination: destination)
-    }
-}
-
-extension Request {
-    /**
-        A closure executed once a request has successfully completed in order to determine where to move the temporary file written to during the download process. The closure takes two arguments: the temporary file URL and the URL response, and returns a single argument: the file URL where the temporary file should be moved.
-    */
-    public typealias DownloadFileDestination = (NSURL, NSHTTPURLResponse) -> (NSURL)
-
-    /**
-        Creates a download file destination closure which uses the default file manager to move the temporary file to a file URL in the first available directory with the specified search path directory and search path domain mask.
-
-        :param: directory The search path directory. `.DocumentDirectory` by default.
-        :param: domain The search path domain mask. `.UserDomainMask` by default.
-
-        :returns: A download file destination closure.
-    */
-    public class func suggestedDownloadDestination(directory: NSSearchPathDirectory = .DocumentDirectory, domain: NSSearchPathDomainMask = .UserDomainMask) -> DownloadFileDestination {
-
-        return { (temporaryURL, response) -> (NSURL) in
-            if let directoryURL = NSFileManager.defaultManager().URLsForDirectory(directory, inDomains: domain)[0] as? NSURL {
-                return directoryURL.URLByAppendingPathComponent(response.suggestedFilename!)
-            }
-
-            return temporaryURL
-        }
-    }
-
-    class DownloadTaskDelegate: TaskDelegate, NSURLSessionDownloadDelegate {
-        var downloadTask: NSURLSessionDownloadTask! { return task as! NSURLSessionDownloadTask }
-        var downloadProgress: ((Int64, Int64, Int64) -> Void)?
-
-        var resumeData: NSData?
-        override var data: NSData? { return resumeData }
-
-        var downloadTaskDidFinishDownloadingToURL: ((NSURLSession!, NSURLSessionDownloadTask!, NSURL) -> (NSURL))?
-        var downloadTaskDidWriteData: ((NSURLSession!, NSURLSessionDownloadTask!, Int64, Int64, Int64) -> Void)?
-        var downloadTaskDidResumeAtOffset: ((NSURLSession!, NSURLSessionDownloadTask!, Int64, Int64) -> Void)?
-
-        // MARK: NSURLSessionDownloadDelegate
-
-        func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
-            if downloadTaskDidFinishDownloadingToURL != nil {
-                let destination = downloadTaskDidFinishDownloadingToURL!(session, downloadTask, location)
-                var fileManagerError: NSError?
-
-                NSFileManager.defaultManager().moveItemAtURL(location, toURL: destination, error: &fileManagerError)
-                if fileManagerError != nil {
-                    error = fileManagerError
-                }
-            }
-        }
-
-        func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
-            progress.totalUnitCount = totalBytesExpectedToWrite
-            progress.completedUnitCount = totalBytesWritten
-
-            downloadTaskDidWriteData?(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite)
-
-            downloadProgress?(bytesWritten, totalBytesWritten, totalBytesExpectedToWrite)
-        }
-
-        func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didResumeAtOffset fileOffset: Int64, expectedTotalBytes: Int64) {
-            progress.totalUnitCount = expectedTotalBytes
-            progress.completedUnitCount = fileOffset
-
-            downloadTaskDidResumeAtOffset?(session, downloadTask, fileOffset, expectedTotalBytes)
-        }
-    }
-}
-
 // MARK: - Response Serializers
 
 // MARK: String

+ 172 - 0
Source/Download.swift

@@ -0,0 +1,172 @@
+// Alamofire.swift
+//
+// Copyright (c) 2014–2015 Alamofire Software Foundation (http://alamofire.org/)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+import Foundation
+
+extension Manager {
+    private enum Downloadable {
+        case Request(NSURLRequest)
+        case ResumeData(NSData)
+    }
+    
+    private func download(downloadable: Downloadable, destination: Request.DownloadFileDestination) -> Request {
+        var downloadTask: NSURLSessionDownloadTask!
+        
+        switch downloadable {
+        case .Request(let request):
+            dispatch_sync(queue) {
+                downloadTask = self.session.downloadTaskWithRequest(request)
+            }
+        case .ResumeData(let resumeData):
+            dispatch_sync(queue) {
+                downloadTask = self.session.downloadTaskWithResumeData(resumeData)
+            }
+        }
+        
+        let request = Request(session: session, task: downloadTask)
+        if let downloadDelegate = request.delegate as? Request.DownloadTaskDelegate {
+            downloadDelegate.downloadTaskDidFinishDownloadingToURL = { (session, downloadTask, URL) in
+                return destination(URL, downloadTask.response as! NSHTTPURLResponse)
+            }
+        }
+        delegate[request.delegate.task] = request.delegate
+        
+        if startRequestsImmediately {
+            request.resume()
+        }
+        
+        return request
+    }
+    
+    // MARK: Request
+    
+    /**
+        Creates a download request using the shared manager instance for the specified method and URL string.
+        
+        :param: method The HTTP method.
+        :param: URLString The URL string.
+        :param: destination The closure used to determine the destination of the downloaded file.
+        
+        :returns: The created download request.
+    */
+    public func download(method: Method, _ URLString: URLStringConvertible, destination: Request.DownloadFileDestination) -> Request {
+        return download(URLRequest(method, URLString), destination: destination)
+    }
+    
+    /**
+        Creates a request for downloading from the specified URL request.
+        
+        If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.
+        
+        :param: URLRequest The URL request
+        :param: destination The closure used to determine the destination of the downloaded file.
+        
+        :returns: The created download request.
+    */
+    public func download(URLRequest: URLRequestConvertible, destination: Request.DownloadFileDestination) -> Request {
+        return download(.Request(URLRequest.URLRequest), destination: destination)
+    }
+    
+    // MARK: Resume Data
+    
+    /**
+        Creates a request for downloading from the resume data produced from a previous request cancellation.
+        
+        If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.
+        
+        :param: resumeData The resume data. This is an opaque data blob produced by `NSURLSessionDownloadTask` when a task is cancelled. See `NSURLSession -downloadTaskWithResumeData:` for additional information.
+        :param: destination The closure used to determine the destination of the downloaded file.
+        
+        :returns: The created download request.
+    */
+    public func download(resumeData: NSData, destination: Request.DownloadFileDestination) -> Request {
+        return download(.ResumeData(resumeData), destination: destination)
+    }
+}
+
+extension Request {
+    /**
+        A closure executed once a request has successfully completed in order to determine where to move the temporary file written to during the download process. The closure takes two arguments: the temporary file URL and the URL response, and returns a single argument: the file URL where the temporary file should be moved.
+    */
+    public typealias DownloadFileDestination = (NSURL, NSHTTPURLResponse) -> (NSURL)
+    
+    /**
+        Creates a download file destination closure which uses the default file manager to move the temporary file to a file URL in the first available directory with the specified search path directory and search path domain mask.
+        
+        :param: directory The search path directory. `.DocumentDirectory` by default.
+        :param: domain The search path domain mask. `.UserDomainMask` by default.
+        
+        :returns: A download file destination closure.
+    */
+    public class func suggestedDownloadDestination(directory: NSSearchPathDirectory = .DocumentDirectory, domain: NSSearchPathDomainMask = .UserDomainMask) -> DownloadFileDestination {
+        
+        return { (temporaryURL, response) -> (NSURL) in
+            if let directoryURL = NSFileManager.defaultManager().URLsForDirectory(directory, inDomains: domain)[0] as? NSURL {
+                return directoryURL.URLByAppendingPathComponent(response.suggestedFilename!)
+            }
+            
+            return temporaryURL
+        }
+    }
+    
+    class DownloadTaskDelegate: TaskDelegate, NSURLSessionDownloadDelegate {
+        var downloadTask: NSURLSessionDownloadTask! { return task as! NSURLSessionDownloadTask }
+        var downloadProgress: ((Int64, Int64, Int64) -> Void)?
+        
+        var resumeData: NSData?
+        override var data: NSData? { return resumeData }
+        
+        var downloadTaskDidFinishDownloadingToURL: ((NSURLSession!, NSURLSessionDownloadTask!, NSURL) -> (NSURL))?
+        var downloadTaskDidWriteData: ((NSURLSession!, NSURLSessionDownloadTask!, Int64, Int64, Int64) -> Void)?
+        var downloadTaskDidResumeAtOffset: ((NSURLSession!, NSURLSessionDownloadTask!, Int64, Int64) -> Void)?
+        
+        // MARK: NSURLSessionDownloadDelegate
+        
+        func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
+            if downloadTaskDidFinishDownloadingToURL != nil {
+                let destination = downloadTaskDidFinishDownloadingToURL!(session, downloadTask, location)
+                var fileManagerError: NSError?
+                
+                NSFileManager.defaultManager().moveItemAtURL(location, toURL: destination, error: &fileManagerError)
+                if fileManagerError != nil {
+                    error = fileManagerError
+                }
+            }
+        }
+        
+        func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
+            progress.totalUnitCount = totalBytesExpectedToWrite
+            progress.completedUnitCount = totalBytesWritten
+            
+            downloadTaskDidWriteData?(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite)
+            
+            downloadProgress?(bytesWritten, totalBytesWritten, totalBytesExpectedToWrite)
+        }
+        
+        func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didResumeAtOffset fileOffset: Int64, expectedTotalBytes: Int64) {
+            progress.totalUnitCount = expectedTotalBytes
+            progress.completedUnitCount = fileOffset
+            
+            downloadTaskDidResumeAtOffset?(session, downloadTask, fileOffset, expectedTotalBytes)
+        }
+    }
+}