Example #1
0
        public ConversationViewModel(ContactViewModel contactViewModel)
            : this()
        {
            _contactViewModel = contactViewModel;
            _contactViewModel.PropertyChanged += (sender, e) =>
            {
                if (e.PropertyName == "Name")
                {
                    Name = _contactViewModel.Name;
                }
                else if (e.PropertyName == "PresenceStatus")
                {
                    PresenceStatus = _contactViewModel.PresenceStatus;
                }
            };

            this.Name = contactViewModel.Name;
            this.PresenceStatus = contactViewModel.PresenceStatus;

            _typingTimer = new DispatcherTimer(DispatcherPriority.ContextIdle);
            _typingTimer.Interval = TimeSpan.FromMilliseconds(1000);
            _typingTimer.Tick += (sender, e) =>
            {
                if (_lastLocalChatStateChangeTicks > 0 &&
                    LocalChatState != ChatStateEvent.Paused &&
                    TimeSpan.FromTicks(DateTime.UtcNow.Ticks - _lastLocalChatStateChangeTicks) > TimeSpan.FromSeconds(2))
                {
                    LocalChatState = ChatStateEvent.Paused;
                }
            };

            _typingTimer.Start();   
        }
Example #2
0
        private void ProcessMessage(Message message)
        {
            if (message.From != null)
            {
                var contactViewModel = this.Contacts.FirstOrDefault(c => c.Contact.Identity.Equals(message.From.ToIdentity()));

                if (contactViewModel == null)
                {
                    // Received a message from someone not in the roster
                    contactViewModel = new ContactViewModel(
                        new Contact()
                    {
                        Identity = message.From.ToIdentity()
                    },
                        _clientChannel);

                    this.Contacts.Add(contactViewModel);
                }

                if (contactViewModel != null)
                {
                    contactViewModel.Conversation.ReceiveMessage(message);

                    // Don't focus/show the window if its a chat state message
                    if (!(message.Content is ChatState))
                    {
                        base.MessengerInstance.Send <OpenWindowMessage>(
                            new OpenWindowMessage()
                        {
                            WindowName  = "Conversation",
                            DataContext = contactViewModel.Conversation
                        });
                    }
                }
            }
        }
Example #3
0
        private void ProcessMessage(Message message)
        {
            if (message.From != null)
            {
                var contactViewModel = this.Contacts.FirstOrDefault(c => c.Contact.Identity.Equals(message.From.ToIdentity()));

                if (contactViewModel == null)
                {
                    // Received a message from someone not in the roster
                    contactViewModel = new ContactViewModel(
                        new Contact()
                        {
                            Identity = message.From.ToIdentity()
                        },
                        _clientChannel);
                    
                    this.Contacts.Add(contactViewModel);                    
                }

                if (contactViewModel != null)
                {
                    contactViewModel.Conversation.ReceiveMessage(message);

                    // Don't focus/show the window if its a chat state message
                    if (!(message.Content is ChatState))
                    {
                        base.MessengerInstance.Send<OpenWindowMessage>(
                            new OpenWindowMessage()
                            {
                                WindowName = "Conversation",
                                DataContext = contactViewModel.Conversation
                            });
                    }
                }
            }
        }