diff --git a/MVMCore/MVMCore/LoadHandling/MVMCoreLoadRequestOperation.m b/MVMCore/MVMCore/LoadHandling/MVMCoreLoadRequestOperation.m index 75feac9..4d05abe 100644 --- a/MVMCore/MVMCore/LoadHandling/MVMCoreLoadRequestOperation.m +++ b/MVMCore/MVMCore/LoadHandling/MVMCoreLoadRequestOperation.m @@ -131,74 +131,71 @@ } else { // No provided load object, check the cache for data first.. -// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ + [MVMCoreLoadRequestOperation checkCacheForDataForRequest:self.requestParameters completionHandler:^(NSDictionary *pageFromCache, NSDictionary *modulesFromCache) { - [MVMCoreLoadRequestOperation checkCacheForDataForRequest:self.requestParameters completionHandler:^(NSDictionary *pageFromCache, NSDictionary *modulesFromCache) { + if ([self checkAndHandleForCancellation]) { + return; + } + + // Log if loaded from cache. + if (pageFromCache) { + MVMCoreLog(@"loaded from cache page %@",[MVMCoreActionUtility formatDictionaryAsJSONString:pageFromCache]); + } + if (modulesFromCache) { + MVMCoreLog(@"loaded from cache modules %@",[MVMCoreActionUtility formatDictionaryAsJSONString:modulesFromCache]); + } + + // Create a load object from any data we fetched. + MVMCoreLoadObject *loadObject = [self createLoadObjectWithPageFromCache:pageFromCache modulesFromCache:modulesFromCache]; + + // Check if we need to go to server for missing data. + MVMCoreRequestParameters *requestForMissingData = [MVMCoreLoadRequestOperation createRequestForDataWithLoadObject:loadObject]; + if (!requestForMissingData) { - if ([self checkAndHandleForCancellation]) { - return; + [[MVMCoreLoggingHandler sharedLoggingHandler] logPageLoadCompleteFor:loadObject.requestParameters.pageType serverProcessingTime:@"0" requestURL:loadObject.requestParameters.URL.absoluteString requestUUID:loadObject.identifier isFromCache:loadObject.pageDataFromCache]; + + // We have all the needed data, continue with the load. + [MVMCoreLoadRequestOperation handleLoadObject:loadObject error:nil]; + } else { + + if(!self.backgroundLoad && loadObject.requestParameters.pageType) { + [[MVMCoreLoggingHandler sharedLoggingHandler] logPageLoadStartedFor:loadObject.requestParameters.pageType requestUUID:loadObject.identifier requestURL:loadObject.requestParameters.URL.absoluteString]; } - // Log if loaded from cache. - if (pageFromCache) { - MVMCoreLog(@"loaded from cache page %@",[MVMCoreActionUtility formatDictionaryAsJSONString:pageFromCache]); - } - if (modulesFromCache) { - MVMCoreLog(@"loaded from cache modules %@",[MVMCoreActionUtility formatDictionaryAsJSONString:modulesFromCache]); - } - - // Create a load object from any data we fetched. - MVMCoreLoadObject *loadObject = [self createLoadObjectWithPageFromCache:pageFromCache modulesFromCache:modulesFromCache]; - - // Check if we need to go to server for missing data. - MVMCoreRequestParameters *requestForMissingData = [MVMCoreLoadRequestOperation createRequestForDataWithLoadObject:loadObject]; - if (!requestForMissingData) { + // Send a new request to the server. + [MVMCoreLoadRequestOperation sendRequest:requestForMissingData loadObject:loadObject completionHandler:^(NSDictionary * _Nullable json) { - [[MVMCoreLoggingHandler sharedLoggingHandler] logPageLoadCompleteFor:loadObject.requestParameters.pageType serverProcessingTime:@"0" requestURL:loadObject.requestParameters.URL.absoluteString requestUUID:loadObject.identifier isFromCache:loadObject.pageDataFromCache]; +#if ENABLE_HARD_CODED_RESPONSE + if ([[MVMCoreObject sharedInstance].globalLoadDelegate respondsToSelector:@selector(modifyJSON:)]) { + json = [[MVMCoreObject sharedInstance].globalLoadDelegate modifyJSON:json]; + } +#endif - // We have all the needed data, continue with the load. - [MVMCoreLoadRequestOperation handleLoadObject:loadObject error:nil]; - } else { + NSString *serverProcessTime = [(NSDictionary *)json objectChainOfKeysOrIndexes:@[@"ResponseInfo", @"timeStamp"]] ?: @"0"; - if(!self.backgroundLoad && loadObject.requestParameters.pageType) { - [[MVMCoreLoggingHandler sharedLoggingHandler] logPageLoadStartedFor:loadObject.requestParameters.pageType requestUUID:loadObject.identifier requestURL:loadObject.requestParameters.URL.absoluteString]; + if(!self.backgroundLoad && loadObject.requestParameters.pageType && serverProcessTime) { + [[MVMCoreLoggingHandler sharedLoggingHandler] logPageLoadCompleteFor:loadObject.requestParameters.pageType serverProcessingTime:serverProcessTime requestURL:loadObject.requestParameters.URL.absoluteString requestUUID:loadObject.identifier isFromCache:loadObject.pageDataFromCache]; } - // Send a new request to the server. - [MVMCoreLoadRequestOperation sendRequest:requestForMissingData loadObject:loadObject completionHandler:^(NSDictionary * _Nullable json) { + // Process the data retrieved from the server. + [MVMCoreLoadRequestOperation processJSONFromServer:json loadObject:loadObject completionHandler:^(MVMCoreLoadObject * _Nonnull loadObject, MVMCoreErrorObject * _Nullable error) { -#if ENABLE_HARD_CODED_RESPONSE - if ([[MVMCoreObject sharedInstance].globalLoadDelegate respondsToSelector:@selector(modifyJSON:)]) { - json = [[MVMCoreObject sharedInstance].globalLoadDelegate modifyJSON:json]; - } -#endif - - NSString *serverProcessTime = [(NSDictionary *)json objectChainOfKeysOrIndexes:@[@"ResponseInfo", @"timeStamp"]] ?: @"0"; - - if(!self.backgroundLoad && loadObject.requestParameters.pageType && serverProcessTime) { - [[MVMCoreLoggingHandler sharedLoggingHandler] logPageLoadCompleteFor:loadObject.requestParameters.pageType serverProcessingTime:serverProcessTime requestURL:loadObject.requestParameters.URL.absoluteString requestUUID:loadObject.identifier isFromCache:loadObject.pageDataFromCache]; + if ([loadObject.operation checkAndHandleForCancellation]) { + return; } - // Process the data retrieved from the server. - [MVMCoreLoadRequestOperation processJSONFromServer:json loadObject:loadObject completionHandler:^(MVMCoreLoadObject * _Nonnull loadObject, MVMCoreErrorObject * _Nullable error) { + if (loadObject.pageDataFromCache || loadObject.pageType) { - if ([loadObject.operation checkAndHandleForCancellation]) { - return; - } - - if (loadObject.pageDataFromCache || loadObject.pageType) { - - // Can continue loading with the page. - [MVMCoreLoadRequestOperation handleLoadObject:loadObject error:error]; - } else { - // Something to show, or nothing was expected to show, can finish. - [MVMCoreLoadRequestOperation loadFinished:loadObject loadedViewController:nil errorObject:error]; - } - }]; + // Can continue loading with the page. + [MVMCoreLoadRequestOperation handleLoadObject:loadObject error:error]; + } else { + // Something to show, or nothing was expected to show, can finish. + [MVMCoreLoadRequestOperation loadFinished:loadObject loadedViewController:nil errorObject:error]; + } }]; - } - }]; -// }); + }]; + } + }]; } }