Skip to content

Commit d09d464

Browse files
author
Rodrigo Gomez Palacio
committed
Update executors to set offsets on consistency manager
Motivation: executors make the update or create requests and get back an offset which is saved in the consistency manager
1 parent 9ac1053 commit d09d464

File tree

3 files changed

+65
-4
lines changed

3 files changed

+65
-4
lines changed

iOS_SDK/OneSignalSDK/OneSignalUser/Source/Executors/OSPropertyOperationExecutor.swift

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ class OSPropertyOperationExecutor: OSOperationExecutor {
245245
OSBackgroundTaskManager.beginBackgroundTask(backgroundTaskIdentifier)
246246
}
247247

248-
OneSignalCoreImpl.sharedClient().execute(request) { _ in
248+
OneSignalCoreImpl.sharedClient().execute(request) { response in
249249
// On success, remove request from cache, and we do need to hydrate
250250
// TODO: We need to hydrate after all ? What why ?
251251
self.dispatchQueue.async {
@@ -255,6 +255,21 @@ class OSPropertyOperationExecutor: OSOperationExecutor {
255255
OSBackgroundTaskManager.endBackgroundTask(backgroundTaskIdentifier)
256256
}
257257
}
258+
if let onesignalId = request.identityModel.onesignalId {
259+
if let rywToken = response?["ryw_token"] as? String
260+
{
261+
let rywDelay = response?["ryw_delay"] as? NSNumber
262+
263+
OSConsistencyManager.shared.setRywTokenAndDelay(
264+
id: onesignalId,
265+
key: OSIamFetchOffsetKey.userUpdate,
266+
value: OSReadYourWriteData(rywToken: rywToken, rywDelay: rywDelay)
267+
)
268+
} else {
269+
// handle a potential regression where ryw_token is no longer returned by API
270+
OSConsistencyManager.shared.resolveConditionsWithID(id: OSIamFetchReadyCondition.CONDITIONID)
271+
}
272+
}
258273
} onFailure: { error in
259274
OneSignalLog.onesignalLog(.LL_ERROR, message: "OSPropertyOperationExecutor update properties request failed with error: \(error.debugDescription)")
260275
self.dispatchQueue.async {

iOS_SDK/OneSignalSDK/OneSignalUser/Source/Executors/OSSubscriptionOperationExecutor.swift

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -284,19 +284,35 @@ class OSSubscriptionOperationExecutor: OSOperationExecutor {
284284
}
285285

286286
OneSignalLog.onesignalLog(.LL_VERBOSE, message: "OSSubscriptionOperationExecutor: executeCreateSubscriptionRequest making request: \(request)")
287-
OneSignalCoreImpl.sharedClient().execute(request) { result in
287+
OneSignalCoreImpl.sharedClient().execute(request) { response in
288288
// On success, remove request from cache (even if not hydrating model), and hydrate model
289289
self.dispatchQueue.async {
290290
self.addRequestQueue.removeAll(where: { $0 == request})
291291
OneSignalUserDefaults.initShared().saveCodeableData(forKey: OS_SUBSCRIPTION_EXECUTOR_ADD_REQUEST_QUEUE_KEY, withValue: self.addRequestQueue)
292292

293-
guard let response = result?["subscription"] as? [String: Any] else {
293+
guard let response = response?["subscription"] as? [String: Any] else {
294294
OneSignalLog.onesignalLog(.LL_ERROR, message: "Unabled to parse response to create subscription request")
295295
if inBackground {
296296
OSBackgroundTaskManager.endBackgroundTask(backgroundTaskIdentifier)
297297
}
298298
return
299299
}
300+
301+
if let onesignalId = request.identityModel.onesignalId {
302+
if let rywToken = response["ryw_token"] as? String
303+
{
304+
let rywDelay = response["ryw_delay"] as? NSNumber
305+
OSConsistencyManager.shared.setRywTokenAndDelay(
306+
id: onesignalId,
307+
key: OSIamFetchOffsetKey.subscriptionUpdate,
308+
value: OSReadYourWriteData(rywToken: rywToken, rywDelay: rywDelay)
309+
)
310+
} else {
311+
// handle a potential regression where ryw_token is no longer returned by API
312+
OSConsistencyManager.shared.resolveConditionsWithID(id: OSIamFetchReadyCondition.CONDITIONID)
313+
}
314+
}
315+
300316
request.subscriptionModel.hydrate(response)
301317
if inBackground {
302318
OSBackgroundTaskManager.endBackgroundTask(backgroundTaskIdentifier)
@@ -393,7 +409,7 @@ class OSSubscriptionOperationExecutor: OSOperationExecutor {
393409
OSBackgroundTaskManager.beginBackgroundTask(backgroundTaskIdentifier)
394410
}
395411

396-
OneSignalCoreImpl.sharedClient().execute(request) { _ in
412+
OneSignalCoreImpl.sharedClient().execute(request) { response in
397413
// On success, remove request from cache. No model hydration occurs.
398414
// For example, if app restarts and we read in operations between sending this off and getting the response
399415
self.dispatchQueue.async {
@@ -403,6 +419,21 @@ class OSSubscriptionOperationExecutor: OSOperationExecutor {
403419
OSBackgroundTaskManager.endBackgroundTask(backgroundTaskIdentifier)
404420
}
405421
}
422+
423+
if let onesignalId = OneSignalUserManagerImpl.sharedInstance.onesignalId {
424+
if let rywToken = response?["ryw_token"] as? String
425+
{
426+
let rywDelay = response?["ryw_delay"] as? NSNumber
427+
OSConsistencyManager.shared.setRywTokenAndDelay(
428+
id: onesignalId,
429+
key: OSIamFetchOffsetKey.subscriptionUpdate,
430+
value: OSReadYourWriteData(rywToken: rywToken, rywDelay: rywDelay)
431+
)
432+
} else {
433+
// handle a potential regression where ryw_token is no longer returned by API
434+
OSConsistencyManager.shared.resolveConditionsWithID(id: OSIamFetchReadyCondition.CONDITIONID)
435+
}
436+
}
406437
} onFailure: { error in
407438
OneSignalLog.onesignalLog(.LL_ERROR, message: "OSSubscriptionOperationExecutor update subscription request failed with error: \(error.debugDescription)")
408439
self.dispatchQueue.async {

iOS_SDK/OneSignalSDK/OneSignalUser/Source/Executors/OSUserExecutor.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,21 @@ extension OSUserExecutor {
258258
} else {
259259
self.executePendingRequests()
260260
}
261+
262+
if let onesignalId = request.identityModel.onesignalId {
263+
if let rywToken = response["ryw_token"] as? String
264+
{
265+
let rywDelay = response["ryw_delay"] as? NSNumber
266+
OSConsistencyManager.shared.setRywTokenAndDelay(
267+
id: onesignalId,
268+
key: OSIamFetchOffsetKey.userCreate,
269+
value: OSReadYourWriteData(rywToken: rywToken, rywDelay: rywDelay)
270+
)
271+
} else {
272+
// handle a potential regression where ryw_token is no longer returned by API
273+
OSConsistencyManager.shared.resolveConditionsWithID(id: OSIamFetchReadyCondition.CONDITIONID)
274+
}
275+
}
261276
}
262277
OSOperationRepo.sharedInstance.paused = false
263278
} onFailure: { error in

0 commit comments

Comments
 (0)