private async Task InsertNewMessage(int conversationId, Message message, string previousMessageId) { var conversation = _contacts.SingleOrDefault(t => t.ConversationId == conversationId); if (conversation == null) { _botLogger.LogDanger($"Comming new message from unknown conversation: '{conversationId}' but we can't find it in memory."); return; } if (Guid.Parse(previousMessageId) != Guid.Empty) // On server, has previous message.) { if (conversation.LatestMessage.Id != Guid.Parse(previousMessageId) || // Local latest message is not latest. conversation.Messages.All(t => t.Id != Guid.Parse(previousMessageId))) // Server side previous message do not exists locally. { // Some message was lost. _botLogger.LogWarning("Some message was lost. Trying to sync..."); var missedMessages = await _conversationService.GetMessagesAsync(conversationId, 15, message.Id.ToString()); foreach (var missedMessage in missedMessages.Items) { if (!conversation.Messages.Any(t => t.Id == missedMessage.Id)) { conversation.Messages.Add(missedMessage); } } } } conversation.LatestMessage = message; conversation.Messages.Add(message); }