Updates.

Moved more of the request response handling to background threads.

Updated asset upload/download completion blocks to be more consistent with 
other completion blocks.

Updated ReadMe to reflect changes to asset upload completion blocks.

Added UsegridEntity.isEqualToEntity() function.

UsergridUser.reauthenticate() now functions properly when the entity 
isEqualTo() the UsergridClient.currentUser.


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/9f53f585
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/9f53f585
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/9f53f585

Branch: refs/heads/master
Commit: 9f53f585ad29361405a5ce3091e25fb6bd355778
Parents: f2a4a10
Author: Robert Walsh <rjwalsh1...@gmail.com>
Authored: Tue Feb 16 15:58:52 2016 -0600
Committer: Robert Walsh <rjwalsh1...@gmail.com>
Committed: Tue Feb 16 15:58:52 2016 -0600

----------------------------------------------------------------------
 sdks/swift/README.md                           |  2 +-
 sdks/swift/Source/UsergridAsset.swift          |  4 +-
 sdks/swift/Source/UsergridClient.swift         |  8 +--
 sdks/swift/Source/UsergridEntity.swift         | 18 +++++++
 sdks/swift/Source/UsergridRequestManager.swift | 60 ++++++++++++++-------
 sdks/swift/Source/UsergridUser.swift           |  2 +-
 6 files changed, 66 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/9f53f585/sdks/swift/README.md
----------------------------------------------------------------------
diff --git a/sdks/swift/README.md b/sdks/swift/README.md
index be8b6f6..14f93ea 100644
--- a/sdks/swift/README.md
+++ b/sdks/swift/README.md
@@ -742,7 +742,7 @@ Usergrid.uploadAsset(entity,
                      progress: { bytesFinished, bytesExpected in
                         // Monitor the upload progress
                      },
-                     completion: { response, asset, error in
+                     completion: { asset, response in
                         // The asset is now uploaded to Usergrid and 
entity.asset == asset
 })
 ```

http://git-wip-us.apache.org/repos/asf/usergrid/blob/9f53f585/sdks/swift/Source/UsergridAsset.swift
----------------------------------------------------------------------
diff --git a/sdks/swift/Source/UsergridAsset.swift 
b/sdks/swift/Source/UsergridAsset.swift
index 85f9ab6..73f0bd3 100644
--- a/sdks/swift/Source/UsergridAsset.swift
+++ b/sdks/swift/Source/UsergridAsset.swift
@@ -35,10 +35,10 @@ import MobileCoreServices
 public typealias UsergridAssetRequestProgress = (bytesFinished:Int64, 
bytesExpected: Int64) -> Void
 
 /// The completion block used in `UsergridAsset` are finished uploading.
-public typealias UsergridAssetUploadCompletion = 
(response:UsergridResponse,asset:UsergridAsset?, error: String?) -> Void
+public typealias UsergridAssetUploadCompletion = (asset:UsergridAsset?, 
response: UsergridResponse) -> Void
 
 /// The completion block used in `UsergridAsset` are finished downloading.
-public typealias UsergridAssetDownloadCompletion = (asset:UsergridAsset?, 
error: String?) -> Void
+public typealias UsergridAssetDownloadCompletion = (asset:UsergridAsset?, 
error: UsergridResponseError?) -> Void
 
 /**
 As Usergrid supports storing binary assets, the SDKs are designed to make 
uploading assets easier and more robust. Attaching, uploading, and downloading 
assets is handled by the `UsergridEntity` class.

http://git-wip-us.apache.org/repos/asf/usergrid/blob/9f53f585/sdks/swift/Source/UsergridClient.swift
----------------------------------------------------------------------
diff --git a/sdks/swift/Source/UsergridClient.swift 
b/sdks/swift/Source/UsergridClient.swift
index a0306a3..46310c6 100644
--- a/sdks/swift/Source/UsergridClient.swift
+++ b/sdks/swift/Source/UsergridClient.swift
@@ -872,9 +872,9 @@ public class UsergridClient: NSObject, NSCoding {
                                                       auth: 
self.authForRequests(),
                                                       asset: asset)
 
-        _requestManager.performAssetUpload(assetRequest, progress: progress) { 
[weak entity] (response, asset, error) -> Void in
-            entity?.asset = asset
-            completion?(response: response, asset: asset, error: error)
+        _requestManager.performAssetUpload(assetRequest, progress: progress) { 
asset, response in
+            entity.asset = asset
+            completion?(asset: asset, response: response)
         }
     }
 
@@ -889,7 +889,7 @@ public class UsergridClient: NSObject, NSCoding {
     public func downloadAsset(entity:UsergridEntity, contentType:String, 
progress:UsergridAssetRequestProgress? = nil, 
completion:UsergridAssetDownloadCompletion? = nil) {
         guard entity.hasAsset
         else {
-            completion?(asset: nil, error: "Entity does not have an asset 
attached.")
+            completion?(asset: nil, error: UsergridResponseError(errorName: 
"Download asset failed.", errorDescription: "Entity does not have an asset 
attached."))
             return
         }
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/9f53f585/sdks/swift/Source/UsergridEntity.swift
----------------------------------------------------------------------
diff --git a/sdks/swift/Source/UsergridEntity.swift 
b/sdks/swift/Source/UsergridEntity.swift
index 4e15683..322ef29 100644
--- a/sdks/swift/Source/UsergridEntity.swift
+++ b/sdks/swift/Source/UsergridEntity.swift
@@ -608,4 +608,22 @@ public class UsergridEntity: NSObject, NSCoding {
     public func getConnections(client:UsergridClient, 
direction:UsergridDirection, relationship:String, query:UsergridQuery? = nil, 
completion:UsergridResponseCompletion? = nil) {
         client.getConnections(direction, entity: self, relationship: 
relationship, query:query, completion: completion)
     }
+
+    // MARK: - Helper methods -
+
+    /**
+     Determines if the two `UsergridEntity` objects are equal.  i.e. they have 
the same non nil uuidOrName.
+
+     - parameter entity: The entity to check.
+
+     - returns: If the two `UsergridEntity` objects are equal.  i.e. they have 
the same non nil uuidOrName.
+     */
+    public func isEqualToEntity(entity: UsergridEntity?) -> Bool {
+        guard let selfUUID = self.uuidOrName,
+              let entityUUID = entity?.uuidOrName
+            else {
+                return false
+        }
+        return selfUUID == entityUUID
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/usergrid/blob/9f53f585/sdks/swift/Source/UsergridRequestManager.swift
----------------------------------------------------------------------
diff --git a/sdks/swift/Source/UsergridRequestManager.swift 
b/sdks/swift/Source/UsergridRequestManager.swift
index ccd41e5..65fde19 100644
--- a/sdks/swift/Source/UsergridRequestManager.swift
+++ b/sdks/swift/Source/UsergridRequestManager.swift
@@ -53,7 +53,7 @@ final class UsergridRequestManager {
 
         self.session = NSURLSession(configuration:  config,
                                     delegate:       UsergridSessionDelegate(),
-                                    delegateQueue:  
NSOperationQueue.mainQueue())
+                                    delegateQueue:  nil)
     }
 
     deinit {
@@ -62,7 +62,10 @@ final class UsergridRequestManager {
 
     func performRequest(request:UsergridRequest, 
completion:UsergridResponseCompletion?) {
         session.dataTaskWithRequest(request.buildNSURLRequest()) { [weak self] 
(data, response, error) -> Void in
-            completion?(response: UsergridResponse(client:self?.client, data: 
data, response: response as? NSHTTPURLResponse, error: error))
+            let response = UsergridResponse(client:self?.client, data: data, 
response: response as? NSHTTPURLResponse, error: error)
+            dispatch_async(dispatch_get_main_queue()) {
+                completion?(response: response)
+            }
         }.resume()
     }
 }
@@ -87,27 +90,30 @@ extension UsergridRequestManager {
     func performUserAuthRequest(userAuth:UsergridUserAuth, 
request:UsergridRequest, completion:UsergridUserAuthCompletionBlock?) {
         session.dataTaskWithRequest(request.buildNSURLRequest()) { (data, 
response, error) -> Void in
             let dataAsJSON = try! 
NSJSONSerialization.JSONObjectWithData(data!, options: 
NSJSONReadingOptions.MutableContainers)
+
+            var createdUser: UsergridUser? = nil
+            var responseError: UsergridResponseError? = nil
+
             if let jsonDict = dataAsJSON as? [String:AnyObject] {
                 let tokenAndExpiry = 
UsergridRequestManager.getTokenAndExpiryFromResponseJSON(jsonDict)
                 userAuth.accessToken = tokenAndExpiry.0
                 userAuth.expiry = tokenAndExpiry.1
 
-                var user: UsergridUser?
                 if let userDict = jsonDict[UsergridUser.USER_ENTITY_TYPE] as? 
[String:AnyObject] {
-                    if let createdUser = UsergridEntity.entity(jsonDict: 
userDict) as? UsergridUser {
-                        createdUser.auth = userAuth
-                        user = createdUser
+                    if let newUser = UsergridEntity.entity(jsonDict: userDict) 
as? UsergridUser {
+                        newUser.auth = userAuth
+                        createdUser = newUser
                     }
                 }
-                if let createdUser = user {
-                    completion?(auth: userAuth, user:createdUser, error: nil)
-                } else {
-                    let error = UsergridResponseError(jsonDictionary: 
jsonDict) ?? UsergridResponseError(errorName: "Auth Failed.", errorDescription: 
"Error Description: \(error?.localizedDescription).")
-                    completion?(auth: userAuth, user:nil, error:error)
+                if createdUser == nil {
+                    responseError = UsergridResponseError(jsonDictionary: 
jsonDict) ?? UsergridResponseError(errorName: "Auth Failed.", errorDescription: 
"Error Description: \(error?.localizedDescription).")
                 }
             } else {
-                let error = UsergridResponseError(errorName: "Auth Failed.", 
errorDescription: "Error Description: \(error?.localizedDescription).")
-                completion?(auth: userAuth, user:nil, error: error)
+                responseError = UsergridResponseError(errorName: "Auth 
Failed.", errorDescription: "Error Description: 
\(error?.localizedDescription).")
+            }
+
+            dispatch_async(dispatch_get_main_queue()) {
+                completion?(auth: userAuth, user: createdUser, error: 
responseError)
             }
         }.resume()
     }
@@ -115,14 +121,19 @@ extension UsergridRequestManager {
     func performAppAuthRequest(appAuth: UsergridAppAuth, request: 
UsergridRequest, completion: UsergridAppAuthCompletionBlock?) {
         session.dataTaskWithRequest(request.buildNSURLRequest()) { (data, 
response, error) -> Void in
             let dataAsJSON = try! 
NSJSONSerialization.JSONObjectWithData(data!, options: 
NSJSONReadingOptions.MutableContainers)
+
+            var responseError: UsergridResponseError? = nil
+
             if let jsonDict = dataAsJSON as? [String:AnyObject] {
                 let tokenAndExpiry = 
UsergridRequestManager.getTokenAndExpiryFromResponseJSON(jsonDict)
                 appAuth.accessToken = tokenAndExpiry.0
                 appAuth.expiry = tokenAndExpiry.1
-                completion?(auth: appAuth, error: nil)
             } else {
-                let error = UsergridResponseError(errorName: "Auth Failed.", 
errorDescription: "Error Description: \(error?.localizedDescription).")
-                completion?(auth: nil, error: error)
+                responseError = UsergridResponseError(errorName: "Auth 
Failed.", errorDescription: "Error Description: 
\(error?.localizedDescription).")
+            }
+
+            dispatch_async(dispatch_get_main_queue()) {
+                completion?(auth: appAuth, error: responseError)
             }
         }.resume()
     }
@@ -134,11 +145,17 @@ extension UsergridRequestManager {
     func performAssetDownload(contentType:String, 
usergridRequest:UsergridRequest, progress: UsergridAssetRequestProgress? = nil, 
completion:UsergridAssetDownloadCompletion? = nil) {
         let downloadTask = 
session.downloadTaskWithRequest(usergridRequest.buildNSURLRequest())
         let requestWrapper = UsergridAssetRequestWrapper(session: 
self.session, sessionTask: downloadTask, progress: progress)  { (request) -> 
Void in
+            var asset: UsergridAsset? = nil
+            var responseError: UsergridResponseError? = nil
+
             if let assetData = request.responseData where assetData.length > 0 
{
-                let asset = UsergridAsset(data: assetData, contentType: 
contentType)
-                completion?(asset: asset, error:nil)
+                asset = UsergridAsset(data: assetData, contentType: 
contentType)
             } else {
-                completion?(asset: nil, error: "Downloading asset failed.  No 
data was recieved.")
+                responseError = UsergridResponseError(errorName: "Download 
Failed.", errorDescription: "Downloading asset failed.  No data was recieved.")
+            }
+
+            dispatch_async(dispatch_get_main_queue()) {
+                completion?(asset: asset, error: responseError)
             }
         }
         self.sessionDelegate.addRequestDelegate(requestWrapper.sessionTask, 
requestWrapper:requestWrapper)
@@ -148,7 +165,10 @@ extension UsergridRequestManager {
     func performAssetUpload(usergridRequest:UsergridAssetUploadRequest, 
progress:UsergridAssetRequestProgress? = nil, completion: 
UsergridAssetUploadCompletion? = nil) {
         let uploadTask = 
session.uploadTaskWithRequest(usergridRequest.buildNSURLRequest(), fromData: 
usergridRequest.multiPartHTTPBody)
         let requestWrapper = UsergridAssetRequestWrapper(session: 
self.session, sessionTask: uploadTask, progress: progress)  { [weak self] 
(request) -> Void in
-            completion?(response: UsergridResponse(client: self?.client, data: 
request.responseData, response: request.response as? NSHTTPURLResponse, error: 
request.error),asset:usergridRequest.asset,error:nil)
+            let response = UsergridResponse(client: self?.client, data: 
request.responseData, response: request.response as? NSHTTPURLResponse, error: 
request.error)
+            dispatch_async(dispatch_get_main_queue()) {
+                completion?(asset: usergridRequest.asset, response: response)
+            }
         }
         self.sessionDelegate.addRequestDelegate(requestWrapper.sessionTask, 
requestWrapper:requestWrapper)
         requestWrapper.sessionTask.resume()

http://git-wip-us.apache.org/repos/asf/usergrid/blob/9f53f585/sdks/swift/Source/UsergridUser.swift
----------------------------------------------------------------------
diff --git a/sdks/swift/Source/UsergridUser.swift 
b/sdks/swift/Source/UsergridUser.swift
index 7c70142..17415ba 100644
--- a/sdks/swift/Source/UsergridUser.swift
+++ b/sdks/swift/Source/UsergridUser.swift
@@ -375,7 +375,7 @@ public class UsergridUser : UsergridEntity {
                 return
         }
 
-        client.authenticateUser(userAuth, setAsCurrentUser:(self == 
client.currentUser), completion: completion)
+        client.authenticateUser(userAuth, 
setAsCurrentUser:self.isEqualToEntity(client.currentUser), completion: 
completion)
     }
 
     /**

Reply via email to