Skip to content

Commit 8983211

Browse files
author
Alexis Oyama
committed
fix(request): Send response json at event index instead of last one
There can be a corner case when the last response is not the response we are looking for. This is highly unlikely because you need to have more than 10k eevents beforehand and need to have events rights after you call start/forceContentUpdate, but this commit will fix it.
1 parent fa6a260 commit 8983211

File tree

6 files changed

+30
-27
lines changed

6 files changed

+30
-27
lines changed

Leanplum-SDK/Classes/LPActionManager.m

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -363,15 +363,14 @@ - (void)requireMessageContent:(NSString *)messageId
363363
LP_PARAM_INCLUDE_DEFAULTS: @(NO),
364364
LP_PARAM_INCLUDE_MESSAGE_ID: messageId
365365
}];
366-
[req onResponse:^(id<LPNetworkOperationProtocol> operation, id json) {
366+
[req onResponse:^(id<LPNetworkOperationProtocol> operation, NSDictionary *response) {
367367
LP_TRY
368-
NSDictionary *getVariablesResponse = [LPResponse getLastResponse:json];
369-
NSDictionary *values = getVariablesResponse[LP_KEY_VARS];
370-
NSDictionary *messages = getVariablesResponse[LP_KEY_MESSAGES];
371-
NSArray *updateRules = getVariablesResponse[LP_KEY_UPDATE_RULES];
372-
NSArray *eventRules = getVariablesResponse[LP_KEY_EVENT_RULES];
373-
NSArray *variants = getVariablesResponse[LP_KEY_VARIANTS];
374-
NSDictionary *regions = getVariablesResponse[LP_KEY_REGIONS];
368+
NSDictionary *values = response[LP_KEY_VARS];
369+
NSDictionary *messages = response[LP_KEY_MESSAGES];
370+
NSArray *updateRules = response[LP_KEY_UPDATE_RULES];
371+
NSArray *eventRules = response[LP_KEY_EVENT_RULES];
372+
NSArray *variants = response[LP_KEY_VARIANTS];
373+
NSDictionary *regions = response[LP_KEY_REGIONS];
375374
if (![LPConstantsState sharedState].canDownloadContentMidSessionInProduction ||
376375
[values isEqualToDictionary:LPVarCache.diffs]) {
377376
values = nil;

Leanplum-SDK/Classes/LPInbox.m

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -409,9 +409,8 @@ - (void)downloadMessages
409409
RETURN_IF_NOOP;
410410
LP_TRY
411411
LeanplumRequest *req = [LeanplumRequest post:LP_METHOD_GET_INBOX_MESSAGES params:nil];
412-
[req onResponse:^(id<LPNetworkOperationProtocol> operation, id json) {
412+
[req onResponse:^(id<LPNetworkOperationProtocol> operation, NSDictionary *response) {
413413
LP_TRY
414-
NSDictionary *response = [LPResponse getLastResponse:json];
415414
NSDictionary *messagesDict = response[LP_KEY_INBOX_MESSAGES];
416415
NSUInteger unreadCount = 0;
417416
NSMutableDictionary *messages = [[NSMutableDictionary alloc] init];

Leanplum-SDK/Classes/LPRegisterDevice.m

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,13 @@ - (void)registerDevice:(NSString *)email
4646
{
4747
LeanplumRequest *request = [LeanplumRequest post:LP_METHOD_REGISTER_FOR_DEVELOPMENT
4848
params:@{ LP_PARAM_EMAIL: email }];
49-
[request onResponse:^(id<LPNetworkOperationProtocol> operation, id json) {
49+
[request onResponse:^(id<LPNetworkOperationProtocol> operation, NSDictionary *response) {
5050
LP_TRY
51-
NSDictionary* registerResponse = [LPResponse getLastResponse:json];
52-
BOOL isSuccess = [LPResponse isResponseSuccess:registerResponse];
51+
BOOL isSuccess = [LPResponse isResponseSuccess:response];
5352
if (isSuccess) {
5453
self->callback(YES);
5554
} else {
56-
[self showError:[LPResponse getResponseError:registerResponse]];
55+
[self showError:[LPResponse getResponseError:response]];
5756
}
5857
LP_END_TRY
5958
}];

Leanplum-SDK/Classes/Leanplum.m

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -881,11 +881,10 @@ + (void)startWithUserId:(NSString *)userId
881881

882882
// Issue start API call.
883883
LeanplumRequest *req = [LeanplumRequest post:LP_METHOD_START params:params];
884-
[req onResponse:^(id<LPNetworkOperationProtocol> operation, id json) {
884+
[req onResponse:^(id<LPNetworkOperationProtocol> operation, NSDictionary *response) {
885885
LP_TRY
886886
state.hasStarted = YES;
887887
state.startSuccessful = YES;
888-
NSDictionary *response = [LPResponse getLastResponse:json];
889888
NSDictionary *values = response[LP_KEY_VARS];
890889
NSString *token = response[LP_KEY_TOKEN];
891890
NSDictionary *messages = response[LP_KEY_MESSAGES];
@@ -2182,15 +2181,14 @@ + (void)forceContentUpdate:(LeanplumVariablesChangedBlock)block
21822181
LeanplumRequest* req = [LeanplumRequest
21832182
post:LP_METHOD_GET_VARS
21842183
params:params];
2185-
[req onResponse:^(id<LPNetworkOperationProtocol> operation, id json) {
2184+
[req onResponse:^(id<LPNetworkOperationProtocol> operation, NSDictionary *response) {
21862185
LP_TRY
2187-
NSDictionary *getVariablesResponse = [LPResponse getLastResponse:json];
2188-
NSDictionary *values = getVariablesResponse[LP_KEY_VARS];
2189-
NSDictionary *messages = getVariablesResponse[LP_KEY_MESSAGES];
2190-
NSArray *updateRules = getVariablesResponse[LP_KEY_UPDATE_RULES];
2191-
NSArray *eventRules = getVariablesResponse[LP_KEY_EVENT_RULES];
2192-
NSArray *variants = getVariablesResponse[LP_KEY_VARIANTS];
2193-
NSDictionary *regions = getVariablesResponse[LP_KEY_REGIONS];
2186+
NSDictionary *values = response[LP_KEY_VARS];
2187+
NSDictionary *messages = response[LP_KEY_MESSAGES];
2188+
NSArray *updateRules = response[LP_KEY_UPDATE_RULES];
2189+
NSArray *eventRules = response[LP_KEY_EVENT_RULES];
2190+
NSArray *variants = response[LP_KEY_VARIANTS];
2191+
NSDictionary *regions = response[LP_KEY_REGIONS];
21942192
if (![values isEqualToDictionary:LPVarCache.diffs] ||
21952193
![messages isEqualToDictionary:LPVarCache.messageDiffs] ||
21962194
![updateRules isEqualToArray:LPVarCache.updateRulesDiffs] ||
@@ -2204,7 +2202,7 @@ + (void)forceContentUpdate:(LeanplumVariablesChangedBlock)block
22042202
regions:regions];
22052203

22062204
}
2207-
if ([getVariablesResponse[LP_KEY_SYNC_INBOX] boolValue]) {
2205+
if ([response[LP_KEY_SYNC_INBOX] boolValue]) {
22082206
[[self inbox] downloadMessages];
22092207
}
22102208
LP_END_TRY

Leanplum-SDK/Classes/LeanplumRequest.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
LPNetworkResponseBlock _response;
3535
LPNetworkErrorBlock _error;
3636
BOOL _sent;
37+
NSInteger _eventIndex;
3738
}
3839

3940
+ (void)setAppId:(NSString *)appId withAccessKey:(NSString *)accessKey;

Leanplum-SDK/Classes/LeanplumRequest.m

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ - (id)initWithHttpMethod:(NSString *)httpMethod
134134
_httpMethod = httpMethod;
135135
_apiMethod = apiMethod;
136136
_params = params;
137+
_eventIndex = -1;
137138
if (engine == nil) {
138139
if (!_requestHheaders) {
139140
_requestHheaders = [LeanplumRequest createHeaders];
@@ -301,6 +302,7 @@ - (void)sendNow:(BOOL)async
301302
}
302303

303304
[self sendEventually];
305+
_eventIndex = [LPEventDataManager count] - 1;
304306
[self sendRequests:async];
305307
}
306308

@@ -372,8 +374,11 @@ - (void)sendRequests:(BOOL)async
372374
dispatch_semaphore_signal(semaphore);
373375
LP_END_TRY
374376

375-
if (_response != nil) {
376-
_response(operation, json);
377+
if (_eventIndex >= requestsToSend.count) {
378+
_eventIndex -= requestsToSend.count;
379+
} else if (_response) {
380+
id response = [LPResponse getResponseAt:_eventIndex fromDictionary:json];
381+
_response(operation, response);
377382
}
378383

379384
} errorHandler:^(id<LPNetworkOperationProtocol> completedOperation, NSError *err) {
@@ -412,6 +417,7 @@ - (void)sendRequests:(BOOL)async
412417
if (_error != nil) {
413418
_error(err);
414419
}
420+
[sendNowQueue cancelAllOperations];
415421
dispatch_semaphore_signal(semaphore);
416422
LP_END_TRY
417423
}];
@@ -430,6 +436,7 @@ - (void)sendRequests:(BOOL)async
430436
_error([NSError errorWithDomain:@"Leanplum" code:1
431437
userInfo:@{NSLocalizedDescriptionKey: @"Request timed out"}]);
432438
}
439+
[sendNowQueue cancelAllOperations];
433440
LP_END_TRY
434441
}
435442
};

0 commit comments

Comments
 (0)