private void OnPeerDataUpdated()
{
var peers = SignaledPeerData.Peers;
ObservableCollection<ConversationViewModel> copyConversations = new ObservableCollection<ConversationViewModel>(Conversations);
foreach (var contact in copyConversations)
{
if (peers.All(p => p.UserId != contact.UserId))
{
Conversations.Remove(contact);
}
}
foreach (var peer in peers)
{
var contact = Conversations.SingleOrDefault(s => s.UserId == peer.UserId);
if (contact == null)
{
contact = _contactFactory();
contact.Name = peer.Name;
contact.UserId = peer.UserId;
contact.ProfileSource = new BitmapImage(new Uri(AvatarLink.EmbeddedLinkFor(peer.Avatar)));
contact.OnCloseConversation += Contact_OnCloseConversation;
contact.OnIsInCallMode += Contact_OnIsInCallMode;
var sortList = Conversations.ToList();
sortList.Add(contact);
sortList = sortList.OrderBy(s => s.Name).ToList();
Conversations.Insert(sortList.IndexOf(contact), contact);
contact.Initialize();
}
contact.IsOnline = peer.IsOnline;
}
UpdateSelection();
}