From 2ee96bf6d9e595eb078603c01c5edad226f842d3 Mon Sep 17 00:00:00 2001 From: "Suresh, Kamlesh" Date: Fri, 19 Feb 2021 20:58:47 -0500 Subject: [PATCH] QIP --- .../ActionHandling/MVMCoreActionHandler.h | 2 +- .../ActionHandling/MVMCoreActionHandler.m | 54 ++++++++++++++----- .../LoadHandling/MVMCoreRequestParameters.h | 2 + .../ClientParameterProtocol.swift | 2 +- .../ClientParameterRegistry.swift | 19 ++++--- .../MFHardCodedServerResponse.h | 2 +- 6 files changed, 56 insertions(+), 25 deletions(-) diff --git a/MVMCore/MVMCore/ActionHandling/MVMCoreActionHandler.h b/MVMCore/MVMCore/ActionHandling/MVMCoreActionHandler.h index 2f41e93..6e272d4 100644 --- a/MVMCore/MVMCore/ActionHandling/MVMCoreActionHandler.h +++ b/MVMCore/MVMCore/ActionHandling/MVMCoreActionHandler.h @@ -32,7 +32,7 @@ extern NSString * _Nonnull const KeyActionTypeOpen; - (void)synchronouslyHandleAction:(nullable NSString *)actionType actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject; /// Iterates through the clientParameters list. Gets values from the individual handlers and attaches the parameters to extraParameters. -- (void)setClientParameter:(nullable NSDictionary *)actionInformation completionHandler:(nonnull void (^)(NSDictionary * _Nullable jsonDictionary))completionHandler; +- (void)setClientParameter:(nullable NSDictionary *)clientParametersMap requestParameters:(nullable NSDictionary *)requestParameters isBackgroudRequest:(BOOL)isBackgroudRequest completionHandler:(nonnull void (^)(NSDictionary * _Nullable jsonDictionary))completionHandler; #pragma mark - Actions /// by default, returns the original RequestParameter that passed in. Can be overriden for some generic updates to the RequestParameter before handle open page action gets called. diff --git a/MVMCore/MVMCore/ActionHandling/MVMCoreActionHandler.m b/MVMCore/MVMCore/ActionHandling/MVMCoreActionHandler.m index ddb1fab..c7e3fc9 100644 --- a/MVMCore/MVMCore/ActionHandling/MVMCoreActionHandler.m +++ b/MVMCore/MVMCore/ActionHandling/MVMCoreActionHandler.m @@ -93,15 +93,15 @@ NSString * const KeyActionTypeOpen = @"openPage"; } } -- (void)setClientParameter:(nullable NSDictionary *)actionInformation completionHandler:(nonnull void (^)(NSDictionary * _Nullable jsonDictionary))completionHandler { +- (void)setClientParameter:(nullable NSDictionary *)clientParametersMap requestParameters:(nullable NSDictionary *)requestParameters isBackgroudRequest:(BOOL)isBackgroudRequest completionHandler:(nonnull void (^)(NSDictionary * _Nullable jsonDictionary))completionHandler { - NSDictionary *clientParametersMap = [actionInformation dict:KeyClientParameters]; + //NSDictionary *clientParametersMap = [actionInformation dict:KeyClientParameters]; if (!clientParametersMap) { - completionHandler(actionInformation); + completionHandler(nil); return; } - BOOL isBackgroudRequest = [actionInformation boolForKey:@"background"]; + // BOOL isBackgroudRequest = [actionInformation boolForKey:@"background"]; if (!isBackgroudRequest) { [[MVMCoreLoadingOverlayHandler sharedLoadingOverlay] startLoading]; @@ -116,27 +116,28 @@ NSString * const KeyActionTypeOpen = @"openPage"; NSError *error = nil; [MVMCoreLoggingHandler logDebugMessageWithDelegate:@"Fetching client parameters"]; [[[MVMCoreObject sharedInstance] clientParameterRegistry] getParametersWith:clientParametersMap + requestParameters:requestParameters error:&error completionHandler:^(NSDictionary * _Nullable clientParameters) { [MVMCoreLoggingHandler logDebugMessageWithDelegate:@"Finshed fetching client parameters"]; if (clientParameters) { - NSMutableDictionary *actionWithClientParameters = [actionInformation mutableCopy]; - NSMutableDictionary *extraParameters = [clientParameters mutableCopy]; - [extraParameters addEntriesFromDictionary:[actionWithClientParameters dictionaryForKey:KeyExtraParameters]]; - actionWithClientParameters[KeyExtraParameters] = extraParameters; + // NSMutableDictionary *actionWithClientParameters = [actionInformation mutableCopy]; + // NSMutableDictionary *extraParameters = [clientParameters mutableCopy]; + // [extraParameters addEntriesFromDictionary:[actionWithClientParameters dictionaryForKey:KeyExtraParameters]]; + // actionWithClientParameters[KeyExtraParameters] = extraParameters; stopLoadingOverlay(); - completionHandler(actionWithClientParameters); + completionHandler(clientParameters); } else { [MVMCoreLoggingHandler logDebugMessageWithDelegate:@"No client parameters"]; stopLoadingOverlay(); - completionHandler(actionInformation); + completionHandler(nil); } }]; if (error) { stopLoadingOverlay(); - completionHandler(actionInformation); + completionHandler(nil); [MVMCoreLoggingHandler addErrorToLog:[MVMCoreErrorObject createErrorObjectForNSError:error location:@"MVMCoreActionHandler->setClientParameter"]]; } } @@ -172,6 +173,8 @@ NSString * const KeyActionTypeOpen = @"openPage"; void (^performAction)(NSDictionary*) = ^(NSDictionary* actionMap) { MVMCoreRequestParameters *requestParameters = [[MVMCoreRequestParameters alloc] initWithActionMap:actionMap]; + requestParameters.clientParamters = [actionInformation dict:KeyClientParameters]; + [weakSelf updateRequestParametersBeforeHandleOpenPageAction:requestParameters callBack:^(MVMCoreRequestParameters * _Nonnull requestParameters) { if ([delegateObject.actionDelegate respondsToSelector:@selector(handleOpenPageForRequestParameters:actionInformation:additionalData:)]) { [delegateObject.actionDelegate handleOpenPageForRequestParameters:requestParameters actionInformation:actionInformation additionalData:additionalData]; @@ -181,7 +184,10 @@ NSString * const KeyActionTypeOpen = @"openPage"; }]; }; - [self setClientParameter:actionInformation completionHandler:performAction]; + // + //[self setClientParameter:actionInformation completionHandler:performAction]; + + performAction(actionInformation); } - (void)shareAction:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject { @@ -359,7 +365,11 @@ NSString * const KeyActionTypeOpen = @"openPage"; [weakSelf prepareLinkAwayWithURL:otherURL appURL:appURL actionInformation:actionMap additionalData:additionalData delegateObject:delegateObject]; }; - [self setClientParameter:actionInformation completionHandler:performAction]; + // [self setClientParameter:actionInformation completionHandler:performAction]; + [self setClientParameter:[actionInformation dict:KeyClientParameters] + requestParameters:nil + isBackgroudRequest:false + completionHandler:performAction]; } - (void)prepareLinkAwayWithURL:(nullable NSURL *)url appURL:(nullable NSURL *)appURL actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject { @@ -419,7 +429,23 @@ NSString * const KeyActionTypeOpen = @"openPage"; } + (void)defaultHandleOpenPageForRequestParameters:(nonnull MVMCoreRequestParameters *)requestParameters additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject { - [[MVMCoreLoadHandler sharedGlobal] loadRequest:requestParameters dataForPage:additionalData delegateObject:delegateObject]; + // + + void (^performRequest)(MVMCoreRequestParameters*) = ^(MVMCoreRequestParameters* requestParametersB) { + [[MVMCoreLoadHandler sharedGlobal] loadRequest:requestParametersB dataForPage:additionalData delegateObject:delegateObject]; + }; + + if (requestParameters.clientParamters) { + [[MVMCoreActionHandler sharedActionHandler] setClientParameter:requestParameters.clientParamters + requestParameters: requestParameters.parameters + isBackgroudRequest: NO + completionHandler: ^(NSDictionary * _Nullable jsonDictionary) { + [requestParameters addRequestParameters:jsonDictionary]; + performRequest(requestParameters); + }]; + } else { + performRequest(requestParameters); + } } + (void)defaultHandleUnknownActionType:(nullable NSString *)actionType actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject { diff --git a/MVMCore/MVMCore/LoadHandling/MVMCoreRequestParameters.h b/MVMCore/MVMCore/LoadHandling/MVMCoreRequestParameters.h index 2e52a05..705fc2b 100644 --- a/MVMCore/MVMCore/LoadHandling/MVMCoreRequestParameters.h +++ b/MVMCore/MVMCore/LoadHandling/MVMCoreRequestParameters.h @@ -89,6 +89,8 @@ typedef NS_ENUM(NSInteger, MFLoadStyle) { // If the request was created with an action map. @property (nullable, strong, nonatomic) NSDictionary *actionMap; +@property (nullable, strong, nonatomic) NSDictionary *clientParamters; + @property (nullable, strong, nonatomic) NSNumber *customTimeoutTime; // Will open support panel at the end of the load. diff --git a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterProtocol.swift b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterProtocol.swift index 2c689ec..62c543a 100644 --- a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterProtocol.swift +++ b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterProtocol.swift @@ -11,5 +11,5 @@ import Foundation public protocol ClientParameterProtocol { init() static var name: String { get } - func fetchClientParameters(for paramModel: ClientParameterModelProtocol, timingOutIn timeout: Double, completionHandler:@escaping (AnyHashable?) -> ()) + func fetchClientParameters(for paramModel: ClientParameterModelProtocol, requestParameters: [String: Any], timingOutIn timeout: Double, completionHandler:@escaping (AnyHashable?) -> ()) } diff --git a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterRegistry.swift b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterRegistry.swift index 1a4160d..4c774c7 100644 --- a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterRegistry.swift +++ b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterRegistry.swift @@ -47,14 +47,14 @@ import Foundation /// ] ///} /// completionHandler can return flat dictinary or a map. It depends on the paramters handler - open func getParameters(with clientParameters: [String: Any], completionHandler:@escaping ([String: Any]?) -> ()) throws { + open func getParameters(with clientParameters: [String: Any], requestParameters: [String: Any], completionHandler:@escaping ([String: Any]?) -> ()) throws { guard let clientParameterModel = try ClientParameterRegistry.getClientParameterModel(clientParameters) else { completionHandler(nil) return } - var parametersList: [String: Any] = [:] + var parametersList: [String: AnyHashable] = [:] let timeout = clientParameterModel.timeout ?? 30.0 let parametersWorkQueue = DispatchQueue(label: "com.mva.clientparameter") @@ -87,15 +87,18 @@ import Foundation parametersList[parameterModel.type] = ["error": defaultErrorString] group.enter() // Dispatch asynchronous injection. - self.getParameterFromHandler(parameterModel, before: timeout) { (receivedParameter) in + self.getParameterFromHandler(parameterModel, + requestParameters: requestParameters, + before: timeout) { (receivedParameter) in // Queue the results for merge. parametersWorkQueue.async { - if let receivedParameter = receivedParameter { - parametersList[parameterModel.type] = receivedParameter + if let receivedParameter = receivedParameter as? [String: AnyHashable] { + //parametersList[parameterModel.type] = receivedParameter + parametersList = parametersList.merging(receivedParameter) { (_, new) in new } } group.leave() // Leaving is only done after setup (barriered). } - } + } } // Callback when all parameters have been merged. @@ -103,11 +106,11 @@ import Foundation } } - func getParameterFromHandler( _ parameterModel: ClientParameterModelProtocol, before timeout: Double, completionHandler:@escaping (AnyHashable?) -> ()) { + func getParameterFromHandler( _ parameterModel: ClientParameterModelProtocol, requestParameters: [String: Any], before timeout: Double, completionHandler:@escaping (AnyHashable?) -> ()) { guard let parameterHandler = createParametersHandler(parameterModel.type) else { return completionHandler(nil) } - parameterHandler.fetchClientParameters(for: parameterModel, timingOutIn: timeout, completionHandler: completionHandler) + parameterHandler.fetchClientParameters(for: parameterModel, requestParameters: requestParameters, timingOutIn: timeout, completionHandler: completionHandler) } /// Add all registry here. diff --git a/MVMCore/MVMCore/Utility/HardCodedServerResponse/MFHardCodedServerResponse.h b/MVMCore/MVMCore/Utility/HardCodedServerResponse/MFHardCodedServerResponse.h index eb9fba9..efa33b6 100644 --- a/MVMCore/MVMCore/Utility/HardCodedServerResponse/MFHardCodedServerResponse.h +++ b/MVMCore/MVMCore/Utility/HardCodedServerResponse/MFHardCodedServerResponse.h @@ -9,7 +9,7 @@ #import #import "MVMCoreRequestParameters.h" -#define ENABLE_HARD_CODED_RESPONSE 0 && DEBUG +#define ENABLE_HARD_CODED_RESPONSE 1 && DEBUG #if ENABLE_HARD_CODED_RESPONSE