/// <summary> /// Processes jsons with discussion messages sent in real time when traffic was captured /// </summary> /// <param name="parsedJsons">List with jsons in strings</param> /// <param name="exportObject">For referencing LideSnooperExport from Lide object</param> /// <param name="discussionMsgs">List where discussion messages are stored after parsing</param> /// <param name="photos">List where photos are stored after parsing</param> /// <param name="users">List where user info is stored after parsing</param> private static void GetLideRealTimeDiscussionMessage(List <string> parsedJsons, SnooperExportBase exportObject, List <LideDiscussionMessage> discussionMsgs, List <LidePhoto> photos, List <LideUser> users) { int tmpInt; foreach (var json in parsedJsons) { JObject o; try { o = JObject.Parse(json); } catch (Exception) { continue; } var message = new LideDiscussionMessage(exportObject) //Parse message { Title = o.SelectToken("$.event.discussion.contributions[0].title")?.ToString(), Text = o.SelectToken("$.event.discussion.contributions[0].content")?.ToString(), SourceId = o.SelectToken("$.event.discussion.contributions[0].user_id")?.ToString(), Timestamp = o.SelectToken("$.event.discussion.contributions[0].create_date")?.ToString(), Deleted = false, ThreadId = Int32.TryParse(o.SelectToken("$.event.discussion.contributions[0].thread_id")?.ToString(), out tmpInt) ? tmpInt : (int?)null, DiscussionId = Int32.TryParse(o.SelectToken("$.event.discussion.contributions[0].discussion_id")?.ToString(), out tmpInt) ? tmpInt : (int?)null }; if (message.Timestamp != null) { message.Timestamp = TimeStampToDateTime(UInt64.Parse(message.Timestamp)).ToString("dd.MM.yyyy HH:mm:ss"); } discussionMsgs.Add(message); if (string.IsNullOrEmpty(o.SelectToken("$.event.discussion.contributing_users")?.ToString())) //If Json does not contain informations about users { return; } var contributingUsers = o.SelectToken("$.event.discussion.contributing_users"); foreach (var user in contributingUsers.Children()) { if (!(user is JProperty)) { continue; } var usrProperty = (JProperty)user; var userId = usrProperty.Value.SelectToken("$.id")?.ToString(); //Find id of current user if (users.Any(i => i.UserId == userId)) //If user is already in list { continue; } GetLideUser(usrProperty.Value, users, exportObject); GetLidePhoto(usrProperty.Value, photos, users[users.Count - 1].Nickname, exportObject); } } parsedJsons.Clear(); }
/// <summary> /// Processes json with messages that were loaded when user joined discussion room /// </summary> /// <param name="tokenMessage">Token that represents json with messges</param> /// <param name="discussionMsgs">List where loaded discussion messages are stored after parsing</param> /// <param name="exportObject">For referencing LideSnooperExport from Lide object</param> private static void GetLideLoadedDiscussionMessage(JToken tokenMessage, List <LideDiscussionMessage> discussionMsgs, SnooperExportBase exportObject) { int tmpInt; bool tmpBool; var msgObject = new LideDiscussionMessage(exportObject) { Title = tokenMessage.SelectToken("$.title")?.ToString(), Text = tokenMessage.SelectToken("$.content")?.ToString(), SourceId = tokenMessage.SelectToken("$.user_id")?.ToString(), Timestamp = tokenMessage.SelectToken("$.create_date")?.ToString(), Deleted = Boolean.TryParse(tokenMessage.SelectToken("$.deleted")?.ToString(), out tmpBool) ? tmpBool : (bool?)null, ThreadId = Int32.TryParse(tokenMessage.SelectToken("$.thread_id")?.ToString(), out tmpInt) ? tmpInt : (int?)null, DiscussionId = Int32.TryParse(tokenMessage.SelectToken("$.discussion_id")?.ToString(), out tmpInt) ? tmpInt : (int?)null }; if (msgObject.Timestamp != null) { msgObject.Timestamp = TimeStampToDateTime(UInt64.Parse(msgObject.Timestamp)).ToString("dd.MM.yyyy HH:mm:ss"); } discussionMsgs.Add(msgObject); }