From 88fb7d6f08aaca14fc798a473d78df4161e5957b Mon Sep 17 00:00:00 2001 From: Benjamin Stauffer Date: Fri, 11 Jun 2021 10:59:26 -0500 Subject: [PATCH] Fix issue with syncing previously empty tiles Handle nil lastModifiedAfter values from SDK. No changes to the SDK. --- .../ActiveCaptainAPIClient.swift | 20 +++++++++++++++---- .../ActiveCaptainManager.swift | 12 ++--------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/ActiveCaptainSample/ActiveCaptainSample/ActiveCaptainAPIClient.swift b/ActiveCaptainSample/ActiveCaptainSample/ActiveCaptainAPIClient.swift index 5dcc1a7..0548b14 100644 --- a/ActiveCaptainSample/ActiveCaptainSample/ActiveCaptainAPIClient.swift +++ b/ActiveCaptainSample/ActiveCaptainSample/ActiveCaptainAPIClient.swift @@ -91,10 +91,16 @@ class ActiveCaptainAPIClient { sendRequest(.post, components) } - func syncMarkers(tileX:Int, tileY:Int, lastModifiedAfter:String) -> Promise { + func syncMarkers(tileX:Int, tileY:Int, lastModifiedAfter:String?) -> Promise { var components = URLComponents(string:ActiveCaptainConfiguration.apiBaseURL)! components.path += "/api/v2/points-of-interest/sync" - components.queryItems = [URLQueryItem(name:"tileX", value:String(tileX)), URLQueryItem(name:"tileY", value:String(tileY)), URLQueryItem(name:"lastModifiedAfter", value:lastModifiedAfter)] + var queryItems = [URLQueryItem(name:"tileX", value:String(tileX)), URLQueryItem(name:"tileY", value:String(tileY))] + + if let lastModifiedAfter = lastModifiedAfter { + queryItems.append(URLQueryItem(name:"lastModifiedAfter", value:lastModifiedAfter)) + } + + components.queryItems = queryItems return firstly { sendRequest(.get, components) @@ -103,10 +109,16 @@ class ActiveCaptainAPIClient { } } - func syncReviews(tileX:Int, tileY:Int, lastModifiedAfter:String) -> Promise { + func syncReviews(tileX:Int, tileY:Int, lastModifiedAfter:String?) -> Promise { var components = URLComponents(string:ActiveCaptainConfiguration.apiBaseURL)! components.path += "/api/v2/reviews/sync" - components.queryItems = [URLQueryItem(name:"tileX", value:String(tileX)), URLQueryItem(name:"tileY", value:String(tileY)), URLQueryItem(name:"lastModifiedAfter", value:lastModifiedAfter)] + var queryItems = [URLQueryItem(name:"tileX", value:String(tileX)), URLQueryItem(name:"tileY", value:String(tileY))] + + if let lastModifiedAfter = lastModifiedAfter { + queryItems.append(URLQueryItem(name:"lastModifiedAfter", value:lastModifiedAfter)) + } + + components.queryItems = queryItems return firstly { sendRequest(.get, components) diff --git a/ActiveCaptainSample/ActiveCaptainSample/ActiveCaptainManager.swift b/ActiveCaptainSample/ActiveCaptainSample/ActiveCaptainManager.swift index 706193b..3b9b1c0 100644 --- a/ActiveCaptainSample/ActiveCaptainSample/ActiveCaptainManager.swift +++ b/ActiveCaptainSample/ActiveCaptainSample/ActiveCaptainManager.swift @@ -333,14 +333,10 @@ final class ActiveCaptainManager { var lastModifiedAfter = lastModifiedAfter if lastModifiedAfter == nil { lastModifiedAfter = database.getTileLastModified(withTileX: Int32(tileCoordinate.tileX), tileY: Int32(tileCoordinate.tileY))?.markerLastUpdate - - if lastModifiedAfter == nil { - return Promise.value(SyncResult.fail) - } } return firstly { - ActiveCaptainAPIClient().syncMarkers(tileX: tileCoordinate.tileX, tileY: tileCoordinate.tileY, lastModifiedAfter: lastModifiedAfter!) + ActiveCaptainAPIClient().syncMarkers(tileX: tileCoordinate.tileX, tileY: tileCoordinate.tileY, lastModifiedAfter: lastModifiedAfter) }.then { (syncResponse: String) -> Promise in let resultCount = Int(self.database.processSyncMarkersResponse(withJson: syncResponse, tileX: Int32(tileCoordinate.tileX), tileY: Int32(tileCoordinate.tileY))) @@ -374,14 +370,10 @@ final class ActiveCaptainManager { var lastModifiedAfter = lastModifiedAfter if lastModifiedAfter == nil { lastModifiedAfter = database.getTileLastModified(withTileX: Int32(tileCoordinate.tileX), tileY: Int32(tileCoordinate.tileY))?.reviewLastUpdate - - if lastModifiedAfter == nil { - return Promise.value(SyncResult.fail) - } } return firstly { - ActiveCaptainAPIClient().syncReviews(tileX: tileCoordinate.tileX, tileY: tileCoordinate.tileY, lastModifiedAfter: lastModifiedAfter!) + ActiveCaptainAPIClient().syncReviews(tileX: tileCoordinate.tileX, tileY: tileCoordinate.tileY, lastModifiedAfter: lastModifiedAfter) }.then { (syncResponse: String) -> Promise in let resultCount = Int(self.database.processSyncReviewsResponse(withJson: syncResponse, tileX: Int32(tileCoordinate.tileX), tileY: Int32(tileCoordinate.tileY)))