public static async Task <Conversation> AddConversation(ConversationViewModel model) { await UserService.AddUsers(model.Participants); if (!string.IsNullOrEmpty(model.Creator)) { await UserService.AddUsers(model.Creator); } if (!string.IsNullOrEmpty(model.Owner)) { await UserService.AddUsers(model.Owner); } var conversation = new Conversation { Id = model.Id, Type = model.Type, Creator = UserService.GetUser(model.Creator), Owner = UserService.GetUser(model.Owner), Participants = UserService.Users.Where(u => model.Participants.Contains(u.Nickname)).ToArray() }; switch (model.Type) { case ConversationType.Passive: PassiveConversationService.Conversations.Add(conversation); break; case ConversationType.Active: break; } return(conversation); }
public static async Task <Conversation> AddConversation(ConversationType type, params string[] participants) { await UserService.AddUsers(participants); var conversation = new Conversation { Id = Guid.Empty, Type = type, Creator = null, Owner = null, Participants = UserService.Users.Where(u => participants.Contains(u.Nickname)).ToArray() }; switch (type) { case ConversationType.Passive: PassiveConversationService.Conversations.Add(conversation); break; case ConversationType.Active: break; } return(conversation); }
private void SelectConversationByActive(Conversation conversation) { var controls = ConversationList.Items.OfType <ConversationControl>(); var control = controls.FirstOrDefault(c => c.ActiveConversation.Participants.SequenceEqual(conversation.Participants)); if (control == null) { return; } ConversationList.SelectedItem = control; }
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 void SendPassiveMessage(Conversation conversation, TextMessage message) { if (CurrentMessageDisplay == null) { return; } foreach (var participant in conversation.Participants.Where(p => p.Nickname != UserService.LoggedUser.Nickname)) { ClientService.Client.Send(new Message().DirectText(participant.Nickname, message.Content)); } conversation.Messages.Add(message); CurrentMessageDisplay.AddMessageControl(message); }
private void DisplayInfo(Conversation conversation) { var user = conversation.Participants.FirstOrDefault(u => u.Nickname != UserService.LoggedUser.Nickname); if (user == null) { return; } var userInfo = new UserInfoControl(user); userInfo.Called += OnUserCall; CurrentUserInfo = userInfo; UserInfoGrid.Children.Clear(); UserInfoGrid.Children.Add(userInfo); }
private void DisplayActiveConversationView(Conversation activeConversation) { if (CurrentActiveConversationView == null) { CurrentActiveConversationView = new ActiveConversationViewControl(activeConversation); CurrentActiveConversationView.MicrophoneToggled += OnMicrophoneToggle; CurrentActiveConversationView.SpeakerToggled += OnSpeakerToggle; CurrentActiveConversationView.HangedUp += OnHangedUp; } else if (CurrentActiveConversationView?.Conversation != activeConversation) { throw new InvalidOperationException("Cannot show new conversation when there is already one in progress."); } ActiveConversationGrid.Children.Clear(); ActiveConversationGrid.Children.Add(CurrentActiveConversationView); ActiveConversationRow.Height = new GridLength(2, GridUnitType.Star); }
private void Call(User user) { ClientService.Client.Call(user.Nickname); var conversation = new Conversation { Type = ConversationType.Active, Creator = UserService.LoggedUser, Owner = UserService.LoggedUser, Participants = ClientService.Client.Conversation.Participants.Select(p => UserService.GetUser(p.Nickname)).ToArray() }; ActiveConversationService.CurrentActiveConversation = conversation; SelectedConversationControl.ActiveConversation = conversation; StartConversation(); }
public static async Task GetMoreMessages(this Conversation conversation, int page = 0, int count = 100) { var filter = Filter.CreateNew.Set("ConversationId", conversation.Id); HttpResponse response; if (conversation.Messages.Any()) { var earliestMessage = conversation.Messages.MinBy(m => m.Timestamp); response = await RestService.MessageApi.Get(RestService.CurrentToken, filter, earliestMessage.Id, page, count); } else { response = await RestService.MessageApi.Get(RestService.CurrentToken, filter, page, count); } if (response.Error != null) { throw new RestErrorException(response.Error); } var messages = response.GetModel <MessageViewModel[]>(); conversation.Messages.AddRange(messages.Select(m => new TextMessage(m.Id, m.Content, m.Timestamp, UserService.Users.FirstOrDefault(u => u.Nickname == m.Sender)))); }
private void SendActiveMessage(Conversation conversation, TextMessage message) { //ClientService.Client.Conversation.SendToAll(Message.CreateNew.Text(message.Content)); throw new InvalidOperationException("Deprecated"); }