Skip to content

Commit 2d321fc

Browse files
committed
[nits] refactor code for reuse
* Refactor and reuse `setNewInternalUser` and `createDefaultPushSubscription` in `createUserFromLegacyPlayer` * Make a helper method `isCurrentUser` to wrap checking if a user is the current one.
1 parent 8dab0f7 commit 2d321fc

File tree

2 files changed

+21
-31
lines changed

2 files changed

+21
-31
lines changed

iOS_SDK/OneSignalSDK/OneSignalUser/Source/OSUserRequests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ class OSUserExecutor {
320320
// If this user already exists and we logged into an external_id, fetch the user data
321321
// TODO: Only do this if response code is 200 or 202
322322
// Fetch the user only if its the current user
323-
if let _ = OneSignalUserManagerImpl.sharedInstance.identityModelStore.getModel(modelId: request.identityModel.modelId),
323+
if OneSignalUserManagerImpl.sharedInstance.isCurrentUser(request.identityModel),
324324
let identity = request.parameters?["identity"] as? [String: String],
325325
let externalId = identity[OS_EXTERNAL_ID] {
326326
fetchUser(aliasLabel: OS_EXTERNAL_ID, aliasId: externalId, identityModel: request.identityModel)
@@ -368,7 +368,7 @@ class OSUserExecutor {
368368
request.identityModel.hydrate(identityObject)
369369

370370
// Fetch this user's data if it is the current user
371-
guard OneSignalUserManagerImpl.sharedInstance.identityModelStore.getModel(modelId: request.identityModel.modelId) != nil
371+
guard OneSignalUserManagerImpl.sharedInstance.isCurrentUser(request.identityModel)
372372
else {
373373
executePendingRequests()
374374
return
@@ -421,7 +421,7 @@ class OSUserExecutor {
421421

422422
// the anonymous user has been identified, still need to Fetch User as we cleared local data
423423
// Fetch the user only if its the current user
424-
if let _ = OneSignalUserManagerImpl.sharedInstance.identityModelStore.getModel(modelId: request.identityModelToUpdate.modelId) {
424+
if OneSignalUserManagerImpl.sharedInstance.isCurrentUser(request.identityModelToUpdate) {
425425
fetchUser(aliasLabel: OS_EXTERNAL_ID, aliasId: request.aliasId, identityModel: request.identityModelToUpdate)
426426
} else {
427427
executePendingRequests()
@@ -435,7 +435,7 @@ class OSUserExecutor {
435435

436436
removeFromQueue(request)
437437
// Fetch the user only if its the current user
438-
if let _ = OneSignalUserManagerImpl.sharedInstance.identityModelStore.getModel(modelId: request.identityModelToUpdate.modelId) {
438+
if OneSignalUserManagerImpl.sharedInstance.isCurrentUser(request.identityModelToUpdate) {
439439
fetchUser(aliasLabel: OS_EXTERNAL_ID, aliasId: request.aliasId, identityModel: request.identityModelToUpdate)
440440
// TODO: Link ^ to the new user... what was this todo for?
441441
}

iOS_SDK/OneSignalSDK/OneSignalUser/Source/OneSignalUserManagerImpl.swift

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -248,32 +248,12 @@ public class OneSignalUserManagerImpl: NSObject, OneSignalUserManager {
248248
*/
249249
private func createUserFromLegacyPlayer(_ playerId: String) {
250250
// 1. Create the Push Subscription Model
251-
let sharedUserDefaults = OneSignalUserDefaults.initShared()
252-
let reachable = OSNotificationsManager.currentPermissionState.reachable
253-
let pushToken = sharedUserDefaults.getSavedString(forKey: OSUD_PUSH_TOKEN, defaultValue: nil)
254-
let pushSubscriptionModel = OSSubscriptionModel(
255-
type: .push,
256-
address: pushToken,
257-
subscriptionId: playerId,
258-
reachable: reachable,
259-
isDisabled: false, // TODO: Get from cache or something if there?
260-
changeNotifier: OSEventProducer())
261-
262-
// 2. Add pushSubscription to store
263-
pushSubscriptionModelStore.add(id: OS_PUSH_SUBSCRIPTION_MODEL_KEY, model: pushSubscriptionModel, hydrating: false)
264-
265-
// 3. Set the internal user
266-
267-
let identityModel = OSIdentityModel(aliases: nil, changeNotifier: OSEventProducer())
268-
self.identityModelStore.add(id: OS_IDENTITY_MODEL_KEY, model: identityModel, hydrating: false)
251+
let pushSubscriptionModel = createDefaultPushSubscription(subscriptionId: playerId)
269252

270-
let propertiesModel = OSPropertiesModel(changeNotifier: OSEventProducer())
271-
self.propertiesModelStore.add(id: OS_PROPERTIES_MODEL_KEY, model: propertiesModel, hydrating: false)
253+
// 2. Set the internal user
254+
let newUser = setNewInternalUser(externalId: nil, pushSubscriptionModel: pushSubscriptionModel)
272255

273-
let newUser = OSUserInternalImpl(identityModel: identityModel, propertiesModel: propertiesModel, pushSubscriptionModel: pushSubscriptionModel)
274-
_user = newUser
275-
276-
// 4. Do the request
256+
// 3. Make the request
277257
OSUserExecutor.fetchIdentityBySubscription(newUser)
278258
}
279259

@@ -331,6 +311,13 @@ public class OneSignalUserManagerImpl: NSObject, OneSignalUserManager {
331311
)
332312
}
333313

314+
/**
315+
Returns if the OSIdentityModel passed in belongs to the current user. This method is used in deciding whether or not to hydrate via a server response, for example.
316+
*/
317+
func isCurrentUser(_ identityModel: OSIdentityModel) -> Bool {
318+
return self.identityModelStore.getModel(modelId: identityModel.modelId) != nil
319+
}
320+
334321
/**
335322
Clears the existing user's data in preparation for hydration via a fetch user call.
336323
*/
@@ -420,7 +407,7 @@ public class OneSignalUserManagerImpl: NSObject, OneSignalUserManager {
420407

421408
// TODO: We will have to save subscription_id and push_token to user defaults when we get them
422409

423-
let pushSubscription = pushSubscriptionModel ?? createDefaultPushSubscription()
410+
let pushSubscription = pushSubscriptionModel ?? createDefaultPushSubscription(subscriptionId: nil)
424411

425412
// Add pushSubscription to store if not present
426413
if !pushSubscriptionModelStore.getModels().keys.contains(OS_PUSH_SUBSCRIPTION_MODEL_KEY) {
@@ -431,11 +418,14 @@ public class OneSignalUserManagerImpl: NSObject, OneSignalUserManager {
431418
return self.user
432419
}
433420

434-
func createDefaultPushSubscription() -> OSSubscriptionModel {
421+
/**
422+
Creates a default Push Subscription Model using the optionally passed in subscriptionId. An scenario where the subscriptionId will be passed in is when we are converting a legacy player's information from 3.x into a Push Subscription Model.
423+
*/
424+
func createDefaultPushSubscription(subscriptionId: String?) -> OSSubscriptionModel {
435425
let sharedUserDefaults = OneSignalUserDefaults.initShared()
436426
let reachable = OSNotificationsManager.currentPermissionState.reachable
437427
let token = sharedUserDefaults.getSavedString(forKey: OSUD_PUSH_TOKEN, defaultValue: nil)
438-
let subscriptionId = sharedUserDefaults.getSavedString(forKey: OSUD_PUSH_SUBSCRIPTION_ID, defaultValue: nil)
428+
let subscriptionId = subscriptionId ?? sharedUserDefaults.getSavedString(forKey: OSUD_PUSH_SUBSCRIPTION_ID, defaultValue: nil)
439429

440430
return OSSubscriptionModel(type: .push,
441431
address: token,

0 commit comments

Comments
 (0)