Exemple #1
0
        /// <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(SwrveSDK sdk, SwrveConversationCampaign campaign, Dictionary <string, object> conversationData)
        {
            SwrveConversation conversation = new SwrveConversation(sdk, 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];
                List <object> contents           = (List <object>)page ["content"];
                for (int j = 0; j < contents.Count; j++)
                {
                    Dictionary <string, object> content = (Dictionary <string, object>)contents[j];
                    if ("image" == (string)content ["type"])
                    {
                        conversation.ConversationAssets.Add((string)content ["value"]);
                    }
                }
            }
            conversation.Conversation = Json.Serialize(conversationData);
            if (conversationData.ContainsKey("priority"))
            {
                conversation.Priority = MiniJsonHelper.GetInt(conversationData, "priority");
            }

            return(conversation);
        }
        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);
        }
Exemple #3
0
        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);
        }
        new public static SwrveConversationCampaign LoadFromJSON(SwrveSDK sdk, Dictionary <string, object> campaignData, int campaignId, DateTime initialisedTime)
        {
            SwrveConversationCampaign campaign = new SwrveConversationCampaign(initialisedTime);

            campaign.Conversation = SwrveConversation.LoadFromJSON(sdk, campaign, (Dictionary <string, object>)campaignData ["conversation"]);
            return(campaign);
        }
        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);
        }
 protected void LogAndAddReason(string reason, bool displayed, List <SwrveQaUserCampaignInfo> qaCampaignInfoList)
 {
     if (SwrveQaUser.Instance.loggingEnabled && qaCampaignInfoList != null)
     {
         SwrveQaUserCampaignInfo campaignInfo = null;
         if (this is SwrveConversationCampaign)
         {
             SwrveConversationCampaign conversationCampaign = (SwrveConversationCampaign)this;
             campaignInfo = new SwrveQaUserCampaignInfo(Id, conversationCampaign.Conversation.Id, conversationCampaign.GetCampaignType(), displayed, reason);
         }
         else if (this is SwrveInAppCampaign)
         {
             SwrveInAppCampaign inAppCampaign = (SwrveInAppCampaign)this;
             campaignInfo = new SwrveQaUserCampaignInfo(Id, inAppCampaign.Messages[0].Id, inAppCampaign.GetCampaignType(), displayed, reason);
         }
         else if (this is SwrveEmbeddedCampaign)
         {
             SwrveEmbeddedCampaign embeddedCampaign = (SwrveEmbeddedCampaign)this;
             campaignInfo = new SwrveQaUserCampaignInfo(Id, embeddedCampaign.Message.Id, embeddedCampaign.GetCampaignType(), displayed, reason);
         }
         if (campaignInfo != null)
         {
             qaCampaignInfoList.Add(campaignInfo);
         }
     }
     SwrveLog.Log(string.Format("{0} {1}", this, reason));
 }
Exemple #7
0
        /// <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(SwrveSDK sdk, Dictionary <string, object> campaignData, DateTime initialisedTime, SwrveQAUser qaUser)
        {
            int id = MiniJsonHelper.GetInt(campaignData, ID_KEY);
            SwrveBaseCampaign campaign = null;

            if (campaignData.ContainsKey(CONVERSATION_KEY))
            {
                campaign = SwrveConversationCampaign.LoadFromJSON(sdk, campaignData, id, initialisedTime);
            }
            else if (campaignData.ContainsKey(MESSAGES_KEY))
            {
                campaign = SwrveMessagesCampaign.LoadFromJSON(sdk, campaignData, id, initialisedTime, qaUser);
            }

            if (campaign == null)
            {
                return(null);
            }
            campaign.Id = id;

            AssignCampaignTriggers(campaign, campaignData);
            campaign.MessageCenter = campaignData.ContainsKey(MESSAGE_CENTER_KEY) && (bool)campaignData[MESSAGE_CENTER_KEY];

            if ((!campaign.MessageCenter) && (campaign.GetTriggers().Count == 0))
            {
                campaign.LogAndAddReason("Campaign [" + campaign.Id + "], has no triggers. Skipping this campaign.", qaUser);
                return(null);
            }

            AssignCampaignRules(campaign, campaignData);
            AssignCampaignDates(campaign, campaignData);
            campaign.Subject = campaignData.ContainsKey(SUBJECT_KEY) ? (string)campaignData[SUBJECT_KEY] : "";

            if (campaign.MessageCenter)
            {
                SwrveLog.Log(string.Format("message center campaign: {0}, {1}", campaign.GetType(), campaign.subject));
            }

            return(campaign);
        }
Exemple #8
0
 private SwrveConversation(ISwrveAssetController assetController, SwrveConversationCampaign campaign)
 {
     this.assetController    = assetController;
     this.Campaign           = campaign;
     this.ConversationAssets = new List <string> ();
 }
        /// <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);
        }
 private SwrveConversation(ISwrveAssetsManager swrveAssetsManager, SwrveConversationCampaign campaign)
 {
     this.SwrveAssetsManager = swrveAssetsManager;
     this.Campaign           = campaign;
     this.ConversationAssets = new HashSet <SwrveAssetsQueueItem> ();
 }
        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];
                    switch ((string)dictionary2["type"])
                    {
                    case "image":
                        swrveConversation.queueImageAsset(dictionary2);
                        break;

                    case "html-fragment":
                    case "star-rating":
                        swrveConversation.queueFontAsset(dictionary2);
                        break;

                    case "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);
                        }
                        break;
                    }
                    }
                }
                List <object> list4 = (List <object>)dictionary["controls"];
                for (int j = 0; j < list4.Count; j++)
                {
                    Dictionary <string, object> content2 = (Dictionary <string, object>)list4[j];
                    swrveConversation.queueFontAsset(content2);
                }
            }
            swrveConversation.Conversation = Json.Serialize(conversationData);
            if (conversationData.ContainsKey("priority"))
            {
                swrveConversation.Priority = MiniJsonHelper.GetInt(conversationData, "priority");
            }
            return(swrveConversation);
        }