public static SwrveBaseCampaign LoadFromJSONWithNoValidation(ISwrveAssetsManager swrveAssetsManager, Dictionary <string, object> campaignData, DateTime initialisedTime, UnityEngine.Color?defaultBackgroundColor, List <SwrveQaUserCampaignInfo> qaUserCampaignInfoList = null) { int id = MiniJsonHelper.GetInt(campaignData, ID_KEY); SwrveBaseCampaign campaign = null; if (campaignData.ContainsKey(CONVERSATION_KEY)) { campaign = SwrveConversationCampaign.LoadFromJSON(swrveAssetsManager, campaignData, id, initialisedTime); } else if (campaignData.ContainsKey(MESSAGES_KEY)) { campaign = SwrveInAppCampaign.LoadFromJSON(swrveAssetsManager, campaignData, id, initialisedTime, defaultBackgroundColor, qaUserCampaignInfoList); } else if (campaignData.ContainsKey(EMBEDDED_MESSAGE_KEY)) { campaign = SwrveEmbeddedCampaign.LoadFromJSON(campaignData, initialisedTime, qaUserCampaignInfoList); } if (campaign == null) { return(null); } campaign.Id = id; return(campaign); }
public static SwrveBaseCampaign LoadFromJSON(ISwrveAssetsManager swrveAssetsManager, Dictionary <string, object> campaignData, DateTime initialisedTime, SwrveQAUser qaUser, Color?defaultBackgroundColor) { int @int = MiniJsonHelper.GetInt(campaignData, "id"); SwrveBaseCampaign swrveBaseCampaign = null; if (campaignData.ContainsKey("conversation")) { swrveBaseCampaign = SwrveConversationCampaign.LoadFromJSON(swrveAssetsManager, campaignData, @int, initialisedTime); } else if (campaignData.ContainsKey("messages")) { swrveBaseCampaign = SwrveMessagesCampaign.LoadFromJSON(swrveAssetsManager, campaignData, @int, initialisedTime, qaUser, defaultBackgroundColor); } if (swrveBaseCampaign == null) { return(null); } swrveBaseCampaign.Id = @int; AssignCampaignTriggers(swrveBaseCampaign, campaignData); swrveBaseCampaign.MessageCenter = campaignData.ContainsKey("message_center") && (bool)campaignData["message_center"]; if (!swrveBaseCampaign.MessageCenter && swrveBaseCampaign.GetTriggers().Count == 0) { swrveBaseCampaign.LogAndAddReason("Campaign [" + swrveBaseCampaign.Id + "], has no triggers. Skipping this campaign.", qaUser); return(null); } AssignCampaignRules(swrveBaseCampaign, campaignData); AssignCampaignDates(swrveBaseCampaign, campaignData); swrveBaseCampaign.Subject = (campaignData.ContainsKey("subject") ? ((string)campaignData["subject"]) : ""); if (swrveBaseCampaign.MessageCenter) { SwrveLog.Log($"message center campaign: {swrveBaseCampaign.GetType()}, {swrveBaseCampaign.subject}"); } return(swrveBaseCampaign); }
public static SwrveConversationCampaign LoadFromJSON(ISwrveAssetsManager swrveAssetsManager, Dictionary <string, object> campaignData, int campaignId, DateTime initialisedTime) { SwrveConversationCampaign swrveConversationCampaign = new SwrveConversationCampaign(initialisedTime); swrveConversationCampaign.Conversation = SwrveConversation.LoadFromJSON(swrveAssetsManager, swrveConversationCampaign, (Dictionary <string, object>)campaignData["conversation"]); return(swrveConversationCampaign); }
/// <summary> /// Load an in-app campaign from a JSON response. /// </summary> /// <param name="campaignData"> /// JSON object with the individual campaign data. /// </param> /// <param name="initialisedTime"> /// Time that the SDK was initialised. Used for rules checking. /// </param> /// <param name="assetPath"> /// Path to the folder that will store all the assets. /// </param> /// <returns> /// Parsed in-app campaign. /// </returns> public static SwrveBaseCampaign LoadFromJSON(ISwrveAssetsManager swrveAssetsManager, Dictionary <string, object> campaignData, DateTime initialisedTime, UnityEngine.Color?defaultBackgroundColor, List <SwrveQaUserCampaignInfo> qaUserCampaignInfoList) { SwrveBaseCampaign campaign = LoadFromJSONWithNoValidation(swrveAssetsManager, campaignData, initialisedTime, defaultBackgroundColor, qaUserCampaignInfoList); if (campaign == null) { return(null); } AssignCampaignTriggers(campaign, campaignData); campaign.MessageCenter = campaignData.ContainsKey(MESSAGE_CENTER_KEY) && (bool)campaignData[MESSAGE_CENTER_KEY]; if (!campaign.MessageCenter && (campaign.GetTriggers().Count == 0)) { string reason = "Campaign [" + campaign.Id + "], has no triggers. Skipping this campaign."; campaign.LogAndAddReason(reason, false, qaUserCampaignInfoList); return(null); } AssignCampaignRules(campaign, campaignData); AssignCampaignDates(campaign, campaignData); campaign.Subject = campaignData.ContainsKey(SUBJECT_KEY) ? (string)campaignData[SUBJECT_KEY] : ""; return(campaign); }
/// <summary> /// Load a conversation from a JSON response. /// </summary> /// <param name="campaign"> /// Parent in-app campaign. /// </param> /// <param name="conversationData"> /// JSON object with the conversation data. /// </param> /// <returns> /// Parsed conversation wrapper for native layer. /// </returns> public static SwrveConversation LoadFromJSON(ISwrveAssetsManager swrveAssetsManager, SwrveConversationCampaign campaign, Dictionary <string, object> conversationData) { SwrveConversation conversation = new SwrveConversation(swrveAssetsManager, campaign); conversation.Id = MiniJsonHelper.GetInt(conversationData, "id"); List <object> pages = (List <object>)conversationData ["pages"]; for (int i = 0; i < pages.Count; i++) { Dictionary <string, object> page = (Dictionary <string, object>)pages [i]; // Add image and font assets to queue from content List <object> contents = (List <object>)page ["content"]; for (int j = 0; j < contents.Count; j++) { Dictionary <string, object> content = (Dictionary <string, object>)contents[j]; string contentType = (string)content ["type"]; switch (contentType) { case "image": conversation.queueImageAsset(content); break; case "html-fragment": case "star-rating": conversation.queueFontAsset(content); break; case "multi-value-input": conversation.queueFontAsset(content); // iterate through options List <object> jsonOptions = (List <object>)content ["values"]; for (int k = 0; k < jsonOptions.Count; k++) { Dictionary <string, object> optionData = (Dictionary <string, object>)jsonOptions [k]; conversation.queueFontAsset(optionData); } break; } } // Add font assets to queue from button control List <object> controls = (List <object>)page ["controls"]; for (int j = 0; j < controls.Count; j++) { Dictionary <string, object> buttonData = (Dictionary <string, object>)controls [j]; conversation.queueFontAsset(buttonData); } } conversation.Conversation = Json.Serialize(conversationData); if (conversationData.ContainsKey("priority")) { conversation.Priority = MiniJsonHelper.GetInt(conversationData, "priority"); } return(conversation); }
public static SwrveMessageFormat LoadFromJSON(ISwrveAssetsManager swrveAssetsManager, SwrveMessage message, Dictionary <string, object> messageFormatData, Color?defaultBackgroundColor) { SwrveMessageFormat swrveMessageFormat = new SwrveMessageFormat(message); swrveMessageFormat.Name = (string)messageFormatData["name"]; swrveMessageFormat.Language = (string)messageFormatData["language"]; if (messageFormatData.ContainsKey("scale")) { swrveMessageFormat.Scale = MiniJsonHelper.GetFloat(messageFormatData, "scale", 1f); } if (messageFormatData.ContainsKey("orientation")) { swrveMessageFormat.Orientation = SwrveOrientationHelper.Parse((string)messageFormatData["orientation"]); } swrveMessageFormat.BackgroundColor = defaultBackgroundColor; if (messageFormatData.ContainsKey("color")) { string text = (string)messageFormatData["color"]; Color? backgroundColor = swrveMessageFormat.BackgroundColor; if (text.Length == 8) { byte a = byte.Parse(text.Substring(0, 2), NumberStyles.HexNumber); byte r = byte.Parse(text.Substring(2, 2), NumberStyles.HexNumber); byte g = byte.Parse(text.Substring(4, 2), NumberStyles.HexNumber); byte b = byte.Parse(text.Substring(6, 2), NumberStyles.HexNumber); backgroundColor = new Color32(r, g, b, a); } else if (text.Length == 6) { byte r = byte.Parse(text.Substring(0, 2), NumberStyles.HexNumber); byte g = byte.Parse(text.Substring(2, 2), NumberStyles.HexNumber); byte b = byte.Parse(text.Substring(4, 2), NumberStyles.HexNumber); backgroundColor = new Color32(r, g, b, byte.MaxValue); } swrveMessageFormat.BackgroundColor = backgroundColor; } Dictionary <string, object> dictionary = (Dictionary <string, object>)messageFormatData["size"]; swrveMessageFormat.Size.X = MiniJsonHelper.GetInt((Dictionary <string, object>)dictionary["w"], "value"); swrveMessageFormat.Size.Y = MiniJsonHelper.GetInt((Dictionary <string, object>)dictionary["h"], "value"); IList <object> list = (List <object>)messageFormatData["buttons"]; int i = 0; for (int count = list.Count; i < count; i++) { SwrveButton item = LoadButtonFromJSON(message, (Dictionary <string, object>)list[i]); swrveMessageFormat.Buttons.Add(item); } IList <object> list2 = (List <object>)messageFormatData["images"]; int j = 0; for (int count2 = list2.Count; j < count2; j++) { SwrveImage item2 = LoadImageFromJSON(message, (Dictionary <string, object>)list2[j]); swrveMessageFormat.Images.Add(item2); } return(swrveMessageFormat); }
public static SwrveConversation LoadFromJSON(ISwrveAssetsManager swrveAssetsManager, SwrveConversationCampaign campaign, Dictionary <string, object> conversationData) { SwrveConversation swrveConversation = new SwrveConversation(swrveAssetsManager, campaign); swrveConversation.Id = MiniJsonHelper.GetInt(conversationData, "id"); List <object> list = (List <object>)conversationData["pages"]; for (int i = 0; i < list.Count; i++) { Dictionary <string, object> dictionary = (Dictionary <string, object>)list[i]; List <object> list2 = (List <object>)dictionary["content"]; for (int j = 0; j < list2.Count; j++) { Dictionary <string, object> dictionary2 = (Dictionary <string, object>)list2[j]; string text = (string)dictionary2["type"]; if (text != null) { if (!(text == "image")) { if (!(text == "html-fragment") && !(text == "star-rating")) { if (text == "multi-value-input") { swrveConversation.queueFontAsset(dictionary2); List <object> list3 = (List <object>)dictionary2["values"]; for (int k = 0; k < list3.Count; k++) { Dictionary <string, object> content = (Dictionary <string, object>)list3[k]; swrveConversation.queueFontAsset(content); } } } else { swrveConversation.queueFontAsset(dictionary2); } } else { swrveConversation.queueImageAsset(dictionary2); } } } List <object> list4 = (List <object>)dictionary["controls"]; for (int l = 0; l < list4.Count; l++) { Dictionary <string, object> content2 = (Dictionary <string, object>)list4[l]; swrveConversation.queueFontAsset(content2); } } swrveConversation.Conversation = Json.Serialize(conversationData); if (conversationData.ContainsKey("priority")) { swrveConversation.Priority = MiniJsonHelper.GetInt(conversationData, "priority"); } return(swrveConversation); }
protected virtual void ProcessCampaignJSON(Dictionary <string, object> campaignData) { HashSet <SwrveAssetsQueueItem> assetsQueue = new HashSet <SwrveAssetsQueueItem>(); ISwrveAssetsManager assetsManager = this.sdk.GetSwrveAssetsManager(); try { // Stop if we got an empty json if (campaignData != null) { SwrveBaseCampaign campaign = SwrveBaseCampaign.LoadFromJSONWithNoValidation(assetsManager, campaignData, this.sdk.GetInitialisedTime(), this.sdk.config.DefaultBackgroundColor); if (campaign == null) { throw new Exception("Campaign was not in a format that could be parsed"); } // For embedded Camapign we just trigger the callback, there is not assets do download. if (campaign is SwrveEmbeddedCampaign) { if (sdk.config.EmbeddedMessageConfig.EmbeddedMessageListener != null) { SwrveEmbeddedMessage embeddedMessage = ((SwrveEmbeddedCampaign)campaign).Message; sdk.config.EmbeddedMessageConfig.EmbeddedMessageListener.OnMessage(embeddedMessage); } else { SwrveLog.LogError("Could not find a valid EmbeddedMessageListener defined as part of the EmbeddedMessageConfig, be sure that you did set it as parf of the SDK initialisation"); } } else { if (campaign is SwrveConversationCampaign) { SwrveConversationCampaign conversationCampaign = (SwrveConversationCampaign)campaign; assetsQueue.UnionWith(conversationCampaign.Conversation.ConversationAssets); } else if (campaign is SwrveInAppCampaign) { SwrveInAppCampaign messageCampaign = (SwrveInAppCampaign)campaign; assetsQueue.UnionWith(messageCampaign.GetImageAssets()); } assetsManager.StartTask("SwrveAssetsManager.DownloadAssets", assetsManager.DownloadAssets(assetsQueue, AddCampaignToQueue, campaign)); } } } catch (Exception exp) { SwrveLog.LogError("Could not process ad journey campaign: " + exp.ToString()); } }
public static SwrveMessagesCampaign LoadFromJSON(ISwrveAssetsManager swrveAssetsManager, Dictionary <string, object> campaignData, int id, DateTime initialisedTime, SwrveQAUser qaUser, Color?defaultBackgroundColor) { SwrveMessagesCampaign swrveMessagesCampaign = new SwrveMessagesCampaign(initialisedTime); object obj = null; campaignData.TryGetValue("messages", out obj); IList <object> list = null; try { list = (IList <object>)obj; } catch (Exception ex) { swrveMessagesCampaign.LogAndAddReason(string.Concat(new object[] { "Campaign [", id, "] invalid messages found, skipping. Error: ", ex }), qaUser); } if (list == null) { swrveMessagesCampaign.LogAndAddReason("Campaign [" + id + "] JSON messages are null, skipping.", qaUser); return(null); } int i = 0; int count = list.Count; while (i < count) { Dictionary <string, object> messageData = (Dictionary <string, object>)list[i]; SwrveMessage swrveMessage = SwrveMessage.LoadFromJSON(swrveAssetsManager, swrveMessagesCampaign, messageData, defaultBackgroundColor); if (swrveMessage.Formats.Count > 0) { swrveMessagesCampaign.AddMessage(swrveMessage); } i++; } if (swrveMessagesCampaign.Messages.Count == 0) { swrveMessagesCampaign.LogAndAddReason("Campaign [" + id + "] no messages found, skipping.", qaUser); } return(swrveMessagesCampaign); }
public static SwrveInAppCampaign LoadFromJSON(ISwrveAssetsManager swrveAssetsManager, Dictionary <string, object> campaignData, int id, DateTime initialisedTime, Color?defaultBackgroundColor, List <SwrveQaUserCampaignInfo> qaUserCampaignInfoList) { SwrveInAppCampaign campaign = new SwrveInAppCampaign(initialisedTime); object _messages = null; campaignData.TryGetValue("messages", out _messages); IList <object> messages = null; try { messages = (IList <object>)_messages; } catch (Exception e) { string reason = "Campaign [" + id + "] invalid messages found, skipping. Error: " + e; campaign.LogAndAddReason(reason, false, qaUserCampaignInfoList); } if (messages == null) { string reason = "Campaign [" + id + "] JSON messages are null, skipping."; campaign.LogAndAddReason(reason, false, qaUserCampaignInfoList); return(null); } for (int k = 0, t = messages.Count; k < t; k++) { Dictionary <string, object> messageData = (Dictionary <string, object>)messages [k]; SwrveMessage message = SwrveMessage.LoadFromJSON(swrveAssetsManager, campaign, messageData, defaultBackgroundColor); if (message.Formats.Count > 0) { campaign.AddMessage(message); } } if (campaign.Messages.Count == 0) { string reason = "Campaign [" + id + "] no messages found, skipping."; campaign.LogAndAddReason(reason, false, qaUserCampaignInfoList); } return(campaign); }
public static SwrveMessage LoadFromJSON(ISwrveAssetsManager swrveAssetsManager, SwrveMessagesCampaign campaign, Dictionary <string, object> messageData, Color?defaultBackgroundColor) { SwrveMessage swrveMessage = new SwrveMessage(swrveAssetsManager, campaign); swrveMessage.Id = MiniJsonHelper.GetInt(messageData, "id"); swrveMessage.Name = (string)messageData["name"]; if (messageData.ContainsKey("priority")) { swrveMessage.Priority = MiniJsonHelper.GetInt(messageData, "priority"); } Dictionary <string, object> dictionary = (Dictionary <string, object>)messageData["template"]; IList <object> list = (List <object>)dictionary["formats"]; int i = 0; for (int count = list.Count; i < count; i++) { Dictionary <string, object> messageFormatData = (Dictionary <string, object>)list[i]; SwrveMessageFormat item = SwrveMessageFormat.LoadFromJSON(swrveAssetsManager, swrveMessage, messageFormatData, defaultBackgroundColor); swrveMessage.Formats.Add(item); } return(swrveMessage); }
/// <summary> /// Load an in-app message from a JSON response. /// </summary> /// <param name="campaign"> /// Parent in-app campaign. /// </param> /// <param name="messageData"> /// JSON object with the individual message data. /// </param> /// <returns> /// Parsed in-app message. /// </returns> public static SwrveMessage LoadFromJSON(ISwrveAssetsManager swrveAssetsManager, SwrveInAppCampaign campaign, Dictionary <string, object> messageData, Color?defaultBackgroundColor) { SwrveMessage message = new SwrveMessage(swrveAssetsManager, campaign); message.Id = MiniJsonHelper.GetInt(messageData, "id"); message.Name = (string)messageData ["name"]; if (messageData.ContainsKey("priority")) { message.Priority = MiniJsonHelper.GetInt(messageData, "priority"); } Dictionary <string, object> template = (Dictionary <string, object>)messageData ["template"]; IList <object> jsonFormats = (List <object>)template ["formats"]; for (int i = 0, j = jsonFormats.Count; i < j; i++) { Dictionary <string, object> messageFormatData = (Dictionary <string, object>)jsonFormats [i]; SwrveMessageFormat messageFormat = SwrveMessageFormat.LoadFromJSON(swrveAssetsManager, message, messageFormatData, defaultBackgroundColor); message.Formats.Add(messageFormat); } return(message); }
private SwrveMessage(ISwrveAssetsManager swrveAssetsManager, SwrveMessagesCampaign campaign) { this.SwrveAssetsManager = swrveAssetsManager; this.Campaign = campaign; this.Formats = new List <SwrveMessageFormat>(); }
private SwrveConversation(ISwrveAssetsManager swrveAssetsManager, SwrveConversationCampaign campaign) { this.SwrveAssetsManager = swrveAssetsManager; this.Campaign = campaign; this.ConversationAssets = new HashSet <SwrveAssetsQueueItem> (); }
/// <summary> /// Load an in-app message format from a JSON response. /// </summary> /// <param name="message"> /// Parent in-app message. /// </param> /// <param name="messageFormatData"> /// JSON object with the individual message format data. /// </param> /// <returns> /// Parsed in-app message format. /// </returns> public static SwrveMessageFormat LoadFromJSON(ISwrveAssetsManager swrveAssetsManager, SwrveMessage message, Dictionary <string, object> messageFormatData, Color?defaultBackgroundColor) { SwrveMessageFormat messageFormat = new SwrveMessageFormat(message); messageFormat.Name = (string)messageFormatData ["name"]; messageFormat.Language = (string)messageFormatData ["language"]; if (messageFormatData.ContainsKey("scale")) { messageFormat.Scale = MiniJsonHelper.GetFloat(messageFormatData, "scale", 1); } if (messageFormatData.ContainsKey("orientation")) { messageFormat.Orientation = SwrveOrientationHelper.Parse((string)messageFormatData ["orientation"]); } messageFormat.BackgroundColor = defaultBackgroundColor; if (messageFormatData.ContainsKey("color")) { string strColor = (string)messageFormatData ["color"]; Color? c = messageFormat.BackgroundColor; if (strColor.Length == 8) { // RRGGBB byte a = byte.Parse(strColor.Substring(0, 2), System.Globalization.NumberStyles.HexNumber); byte r = byte.Parse(strColor.Substring(2, 2), System.Globalization.NumberStyles.HexNumber); byte g = byte.Parse(strColor.Substring(4, 2), System.Globalization.NumberStyles.HexNumber); byte b = byte.Parse(strColor.Substring(6, 2), System.Globalization.NumberStyles.HexNumber); c = new Color32(r, g, b, a); } else if (strColor.Length == 6) { // AARRGGBB byte r = byte.Parse(strColor.Substring(0, 2), System.Globalization.NumberStyles.HexNumber); byte g = byte.Parse(strColor.Substring(2, 2), System.Globalization.NumberStyles.HexNumber); byte b = byte.Parse(strColor.Substring(4, 2), System.Globalization.NumberStyles.HexNumber); c = new Color32(r, g, b, 255); } messageFormat.BackgroundColor = c; } Dictionary <string, object> sizeJson = (Dictionary <string, object>)messageFormatData ["size"]; messageFormat.Size.X = MiniJsonHelper.GetInt(((Dictionary <string, object>)sizeJson ["w"]), "value"); messageFormat.Size.Y = MiniJsonHelper.GetInt(((Dictionary <string, object>)sizeJson ["h"]), "value"); IList <object> jsonButtons = (List <object>)messageFormatData ["buttons"]; for (int i = 0, j = jsonButtons.Count; i < j; i++) { SwrveButton button = LoadButtonFromJSON(message, (Dictionary <string, object>)jsonButtons [i]); messageFormat.Buttons.Add(button); } IList <object> jsonImages = (List <object>)messageFormatData ["images"]; for (int ii = 0, ji = jsonImages.Count; ii < ji; ii++) { SwrveImage image = LoadImageFromJSON(message, (Dictionary <string, object>)jsonImages [ii]); messageFormat.Images.Add(image); } return(messageFormat); }