Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 8 additions & 17 deletions Net/Net.swift
Original file line number Diff line number Diff line change
Expand Up @@ -165,12 +165,12 @@ class Net : NSObject, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate, NS
}

// UPLOAD
func upload(# absoluteUrl: String, data: NSData, startImmediately: Bool = true, progressHandler: ProgressHandler, completionHandler: (NSError?) -> ()) -> UploadTask? {
func upload(# absoluteUrl: String, data: NSData, startImmediately: Bool = true, successHandler: SuccessHandler? = nil, failureHandler: FailureHandler? = nil, progressHandler: ProgressHandler? = nil) -> UploadTask? {
if uploadSession == nil {
return nil
}

let uploader = UploadTask(session: uploadSession!, delegate: self, absoluteUrl: absoluteUrl, data: data, progressHandler: progressHandler, completionHandler: completionHandler)
let uploader = UploadTask(session: uploadSession!, delegate: self, absoluteUrl: absoluteUrl, data: data, progressHandler: progressHandler, successHandler: successHandler, failureHandler: failureHandler)

if startImmediately {
uploader.resume()
Expand All @@ -179,12 +179,12 @@ class Net : NSObject, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate, NS
return uploader
}

func upload(# absoluteUrl: String, params: NSDictionary, startImmediately: Bool = true, progressHandler: ProgressHandler, completionHandler: (NSError?) -> ()) -> UploadTask? {
func upload(# absoluteUrl: String, params: NSDictionary, startImmediately: Bool = true, successHandler: SuccessHandler? = nil, failureHandler: FailureHandler? = nil, progressHandler: ProgressHandler? = nil) -> UploadTask? {
if uploadSession == nil {
return nil
}

let uploader = UploadTask(session: uploadSession!, delegate: self, absoluteUrl: absoluteUrl, params: params, progressHandler: progressHandler, completionHandler: completionHandler)
let uploader = UploadTask(session: uploadSession!, delegate: self, absoluteUrl: absoluteUrl, params: params, progressHandler: progressHandler, successHandler: successHandler, failureHandler: failureHandler)

if startImmediately {
uploader.resume()
Expand All @@ -193,12 +193,12 @@ class Net : NSObject, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate, NS
return uploader
}

func upload(# absoluteUrl: String, fromFile: NSURL, startImmediately: Bool = true, progressHandler: ProgressHandler, completionHandler: (NSError?) -> ()) -> UploadTask? {
func upload(# absoluteUrl: String, fromFile: NSURL, startImmediately: Bool = true, successHandler: SuccessHandler? = nil, failureHandler: FailureHandler? = nil, progressHandler: ProgressHandler? = nil) -> UploadTask? {
if backgroundSession == nil {
return nil
}

let uploader = UploadTask(session: backgroundSession!, delegate: self, absoluteUrl: absoluteUrl, fromFile: fromFile, progressHandler: progressHandler, completionHandler: completionHandler)
let uploader = UploadTask(session: backgroundSession!, delegate: self, absoluteUrl: absoluteUrl, fromFile: fromFile, progressHandler: progressHandler, successHandler: successHandler, failureHandler: failureHandler)

if startImmediately {
uploader.resume()
Expand All @@ -223,19 +223,11 @@ class Net : NSObject, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate, NS
downloaders.removeValueForKey(downloadTask)
}
else if task is NSURLSessionUploadTask {
let uploadTask = task as NSURLSessionUploadTask
let uploader = uploaders[uploadTask]
uploader?.didComplete(error)
uploaders.removeValueForKey(uploadTask)
//handled in completionHandler of UploadTask
}
}
else {
if task is NSURLSessionUploadTask {
let uploadTask = task as NSURLSessionUploadTask
let uploader = uploaders[uploadTask]
uploader?.didComplete(nil)
uploaders.removeValueForKey(uploadTask)
}
//handled in completionHandler of UploadTask
}
}

Expand Down Expand Up @@ -303,7 +295,6 @@ class Net : NSObject, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate, NS
*/
private func httpRequest(method: HttpMethod, url: String, params: NSDictionary?, successHandler: SuccessHandler, failureHandler: FailureHandler, isAbsoluteUrl: Bool = false) -> NSURLSessionTask {
let urlString = isAbsoluteUrl ? url : "\(baseUrl.absoluteString!)\(url)"
NSLog(urlString)

let request = requestSerializer.requestWithMethod(method, urlString: urlString, params: params, error: nil)
let task = createSessionTaskWithRequest(request, successHandler: successHandler, failureHandler: failureHandler)
Expand Down
1 change: 0 additions & 1 deletion Net/NetRequestSerialization.swift
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ class RequestSerialization
// send with query params
let query = NetHelper.queryStringFromParams(params!)
let newUrlString = urlString.stringByAppendingString("?\(query)")
println(newUrlString)
request.URL = NSURL(string: newUrlString)
}
else {
Expand Down
44 changes: 28 additions & 16 deletions Net/NetUploadTask.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,59 +21,63 @@ class UploadTask

typealias ProgressHandler = (Float) -> ()
typealias CompletionHandler = (NSError?) -> ()
typealias SuccessHandler = (ResponseData) -> ()
typealias FailureHandler = (NSError!) -> ()

private var session: NSURLSession
private var delegate: UploadTaskDelegate
private var task: NSURLSessionUploadTask!
private var request: NSMutableURLRequest

private var progressHandler: ProgressHandler?
private var completionHandler: CompletionHandler
private var successHandler: SuccessHandler?
private var failureHandler: FailureHandler?


private var state: State = .Init

init(_ session: NSURLSession,_ delegate: UploadTaskDelegate,_ absoluteUrl: String,_ progressHandler: ProgressHandler?,_ completionHandler: CompletionHandler) {
init(_ session: NSURLSession,_ delegate: UploadTaskDelegate,_ absoluteUrl: String,_ progressHandler: ProgressHandler?, _ successHandler: SuccessHandler? = nil, _ failureHandler: FailureHandler? = nil) {
self.session = session
self.delegate = delegate
let url = NSURL(string: absoluteUrl)
self.request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = HttpMethod.POST.rawValue

self.progressHandler = progressHandler
self.completionHandler = completionHandler
self.successHandler = successHandler
self.failureHandler = failureHandler
}

convenience init(session: NSURLSession, delegate: UploadTaskDelegate, absoluteUrl: String, data: NSData, progressHandler: ProgressHandler?, completionHandler: CompletionHandler) {

self.init(session, delegate, absoluteUrl, progressHandler, completionHandler)
convenience init(session: NSURLSession, delegate: UploadTaskDelegate, absoluteUrl: String, data: NSData, progressHandler: ProgressHandler? = nil, successHandler: SuccessHandler? = nil, failureHandler: FailureHandler? = nil) {
self.init(session, delegate, absoluteUrl, progressHandler, successHandler, failureHandler)

// TODO: config for request
request.setValue("application/octet-stream", forHTTPHeaderField: "Content-Type")
task = session.uploadTaskWithRequest(request, fromData: data)
task = session.uploadTaskWithRequest(request, fromData: data){ self.didComplete($0, $1, $2) }

delegate.didCreateUploadTask(task, uploadTask: self)
}

convenience init(session: NSURLSession, delegate: UploadTaskDelegate, absoluteUrl: String, params: NSDictionary, progressHandler: ProgressHandler?, completionHandler: CompletionHandler) {
convenience init(session: NSURLSession, delegate: UploadTaskDelegate, absoluteUrl: String, params: NSDictionary, progressHandler: ProgressHandler? = nil, successHandler: SuccessHandler? = nil, failureHandler: FailureHandler? = nil) {

self.init(session, delegate, absoluteUrl, progressHandler, completionHandler)
self.init(session, delegate, absoluteUrl, progressHandler, successHandler, failureHandler)

let boundary = "NET-UPLOAD-boundary-\(arc4random())-\(arc4random())"
let paramsData = NetHelper.dataFromParamsWithBoundary(params, boundary: boundary)
let contentType = "multipart/form-data; boundary=\(boundary)"
request.setValue(contentType, forHTTPHeaderField: "Content-Type")
request.setValue("\(paramsData.length)", forHTTPHeaderField: "Content-Length")

task = session.uploadTaskWithRequest(request, fromData: paramsData)
task = session.uploadTaskWithRequest(request, fromData: paramsData){ self.didComplete($0, $1, $2) }

delegate.didCreateUploadTask(task, uploadTask: self)
}

convenience init(session: NSURLSession, delegate: UploadTaskDelegate, absoluteUrl: String, fromFile: NSURL, progressHandler: ProgressHandler?, completionHandler: CompletionHandler) {
convenience init(session: NSURLSession, delegate: UploadTaskDelegate, absoluteUrl: String, fromFile: NSURL, progressHandler: ProgressHandler?, successHandler: SuccessHandler? = nil, failureHandler: FailureHandler? = nil) {

self.init(session, delegate, absoluteUrl, progressHandler, completionHandler)
task = session.uploadTaskWithRequest(request, fromFile: fromFile)
self.init(session, delegate, absoluteUrl, progressHandler, successHandler, failureHandler)

task = session.uploadTaskWithRequest(request, fromFile: fromFile){ self.didComplete($0, $1, $2) }
delegate.didCreateUploadTask(task, uploadTask: self)
}

Expand Down Expand Up @@ -108,8 +112,16 @@ class UploadTask
self.progressHandler?(progress)
}

func didComplete(error: NSError?) {
func didComplete(_ data: NSData, _ response: NSURLResponse, _ error: NSError?) {
state = error != nil ? .Failed : .Completed
completionHandler(error)
if (error != nil) {
self.failureHandler?(error)
}
else {
let responseData = ResponseData(response: response, data: data)
self.successHandler?(responseData)
}

delegate.didRemoveUploadTask(task)
}
}