public void AddToBlackList(User user) { _blackList.Add(user); // Где-то не происходит уведомление вовремя. Поэтому приходится обновлять ручками. _whiteList.Updated(); _ForRandom.Updated(); }
public ConnectionManager(int channel_id) { _channelId = channel_id; #region List initializations _users = new ObservableCollection <User>(); _messages = new ObservableCollection <Message>(); // Чёрный список _blackList.CollectionChanged += _blackList_CollectionChanged; // Группа пользователей для отбора для розыгрыша _whiteList = new FilteredList <User>(_users); _whiteList.Observe(_blackList); //_whiteList.AddDeselector(new Selectors.BlackListSelector(_blackList)); ChatActive = new ObservableCollection <User>(); // Составляем список людей для розыгрыша _ForRandom = new FilteredList <User>(_users); _ForRandom.Observe(_blackList); _ForRandom.Observe(_whiteList); _ForRandom.AddSelector(new Selectors.WhiteListSelector(_whiteList)); _ForRandom.AddDeselector(new Selectors.InChatDeselector(ChatActive)); #endregion _gg = new GG(); #region GG API Callbacks _gg.OnGetWelcome += (sender, welcome) => { _gg.GetUsersList(channel_id); _gg.Join(channel_id); }; _gg.OnGetUsersList += (sender, usersList) => { if (_users.Count == 0) { foreach (var u in usersList.users) { _users.Add(u); } } else { foreach (var u in usersList.users) { if (!_users.Contains(u, new UserEqualityComparer())) { _users.Add(u); } } } _whiteList.Updated(); }; _gg.OnMessageRecieved += (sender, message) => { _messages.Add(message); var user = new User { id = message.user_id, name = message.user_name }; if (!_blackList.Any(U => U.id == user.id)) { //if (!_forRandom.Any(U => U.id == user.id)) { // _forRandom.Add(user); //} if (!ChatActive.Any(U => U.id == user.id)) { ChatActive.Add(user); } } _whiteList.Updated(); }; #endregion _gg.Connect(); }