private void DisplayMessages(Conversation conversation) { var messageDisplay = MessageDisplays.FirstOrDefault(m => m.Conversation == conversation); if (messageDisplay == null) { messageDisplay = new MessageDisplayControl(conversation); MessageDisplays.Add(messageDisplay); } MessagesPanel.Children.Clear(); MessagesPanel.Children.Add(messageDisplay); CurrentMessageDisplay = messageDisplay; }
private async void HandleDirectText(Message message) { var sender = message.GetDirectTextNickname(); var content = message.GetDirectTextContent(); var conversation = PassiveConversationService.Conversations.FirstOrDefault(c => c.Participants.Select(p => p.Nickname).Contains(sender)) ?? await ConversationService.AddConversation(ConversationType.Passive, UserService.LoggedUser.Nickname, sender); var conversationControl = ConversationControls.FirstOrDefault(p => p.PassiveConversation == conversation); if (conversationControl == null) { conversationControl = new ConversationControl { PassiveConversation = conversation }; Dispatcher.Invoke(() => { ConversationList.Items.Add(conversationControl); }); } if (SelectedConversationControl.PassiveConversation != conversationControl.PassiveConversation) { conversationControl.Notify(); } var messageDisplay = MessageDisplays.FirstOrDefault(m => m.Conversation == conversation); if (messageDisplay == null) { messageDisplay = new MessageDisplayControl(conversation); Dispatcher.Invoke(() => { MessageDisplays.Add(messageDisplay); }); return; } Dispatcher.Invoke(() => { var msg = new TextMessage(content, DateTime.Now, UserService.GetUser(sender)); conversation.Messages.Add(msg); messageDisplay.AddMessageControl(msg); }); }