public ConversationViewModel(ChatClient client, Conversation convo) { this.client = client; sendChatCommand = new RelayCommand(_ => { Conversation.SendMessage(CurrentMessage, App.Current.ClientFont); CurrentMessage = ""; }, _ => CurrentMessage.Length > 0); App.Current.FontChanged += OnFontChanged; OnFontChanged(this, null); SetConversation(convo); }
public void SwitchToConversation(Conversation convo) { var convoVM = openTabs.Single(vm => { if (vm is ConversationViewModel) return (vm as ConversationViewModel).Conversation == convo; return false; }) as ConversationViewModel; OpenTabsView.MoveCurrentTo(convoVM); }
public void DeleteConversation(Conversation convo) { conversations.Remove(convo); conversationEventsMap.Remove(convo.Name); }
public NewConversationEventArgs(Conversation convo, bool clientStarted) { Conversation = convo; ClientStarted = clientStarted; }
Conversation CreateConversation(IContact who, bool clientStarted) { Conversation convo; var events = new ConversationEvents(); if (who is User) convo = new Conversation(client, who as User, events); else if (who is Group) convo = new Conversation(client, who as Group, events); else throw new ArgumentException("who is not a User or a Group"); conversations.Add(convo); conversationEventsMap[who.Name] = events; NewConversation.SafeInvoke(this, new NewConversationEventArgs(convo, clientStarted)); return convo; }
public void SetConversation(Conversation convo) { if (Conversation != null) { typingParticipants.Clear(); foreach (var participant in participants) participant.Dispose(); participants.Clear(); Conversation.Contact.Changed -= OnContactChanged; Conversation.UserAdded -= OnUserAdded; Conversation.UserChanged -= OnUserChanged; Conversation.UserRemoved -= OnUserRemoved; Conversation.NewMessage -= OnChatReceived; Conversation.UserTyping -= OnUserTyping; Conversation.Ended -= OnEnded; } Conversation = convo; var oldContact = Contact; if (convo != null) { convo.Contact.Changed += OnContactChanged; convo.UserAdded += OnUserAdded; convo.UserChanged += OnUserChanged; convo.UserRemoved += OnUserRemoved; convo.NewMessage += OnChatReceived; convo.UserTyping += OnUserTyping; convo.Ended += OnEnded; foreach (var participant in convo.Participants) participants.Add(new UserViewModel(client, participant.User)); Contact = ContactViewModel.Create(client, convo.Contact); } else Contact = null; if (oldContact != null) oldContact.Dispose(); }