예제 #1
0
        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;
        }
예제 #2
0
        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);
            });
        }