/// <summary> /// Resets the user list visually and internally. Must be called on UI thread. /// </summary> private void ResetUserList(User[] fullList, User[] filteredList) { lock (resestLocker) { //Add all users that should exist foreach (var u in fullList) { if (this.UserListItems.All(x => x.User != u)) UserListItems.Add(new ChatUserListItem(this.Room, u)); } // remove any users that aren't on the fullList foreach (var u in UserListItems.ToArray()) { if (!fullList.Contains(u.User)) { UserListItems.Remove(u); u.Dispose(); } } // Remove and re add subbed users foreach (var u in UserListItems.Where(x => x.User.IsSubbed).ToArray()) { var u2 = new ChatUserListItem(Room, u.User); UserListItems.Remove(u); u.Dispose(); UserListItems.Add(u2); } // Show all users that should be shown for (var i = 0; i < UserListItems.Count; i++) { if (!filteredList.Contains(UserListItems[i].User)) { //UserListItems[i].Visibility = Visibility.Collapsed; UserListItems[i].Hide(); } else { //UserListItems[i].Visibility = Visibility.Visible; UserListItems[i].Show(); } } foreach (var u in UserListItems) { if (u.ContextMenu == null) u.ContextMenu = UserContextMenu; } OnPropertyChanged("IsAdmin"); OnPropertyChanged("IsModerator"); OnPropertyChanged("BanMenuVisible"); } }
/// <summary> /// Resets the user list visually and internally. Must be called on UI thread. /// </summary> private void ResetUserList(User[] fullList, User[] filteredList) { lock (resestLocker) { //Add all users that should exist foreach (var u in fullList) { if (this.UserListItems.All(x => x.User != u)) UserListItems.Add(new ChatUserListItem(this.Room, u)); } // remove any users that aren't on the fullList foreach (var u in UserListItems.ToArray()) { if (!fullList.Contains(u.User)) { UserListItems.Remove(u); u.Dispose(); } } // Remove and re add subbed users var tlist = new OrderedObservableCollection<ChatUserListItem>(); foreach(var i in UserListItems) tlist.Add(i); foreach (var u in UserListItems.Where(x => x.User.IsSubbed).ToArray()) { var u2 = new ChatUserListItem(Room, u.User); tlist.Remove(u); tlist.Add(u2); if (tlist.IndexOf(u2) == UserListItems.IndexOf(u)) continue; UserListItems.Remove(u); u.Dispose(); UserListItems.Add(u2); } foreach(var u in tlist) u.Dispose(); tlist.Clear(); // Show all users that should be shown for (var i = 0; i < UserListItems.Count; i++) { if (!filteredList.Contains(UserListItems[i].User)) { //UserListItems[i].Visibility = Visibility.Collapsed; UserListItems[i].Hide(); } else { //UserListItems[i].Visibility = Visibility.Visible; UserListItems[i].Show(); } } this.needsRefresh = false; } }