void ProcessDbUser(DbUser record) { var eventCollector = new YamsterModelEventCollector(); YamsterUser user = this.FetchUserById(record.UserId, eventCollector); user.DbUser = record; eventCollector.NotifyAfterUpdate(user); eventCollector.FireEvents(); }
internal YamsterUser FetchUserById(long userId, YamsterModelEventCollector eventCollector) { YamsterUser user = this.GetUserById(userId, nullIfMissing: true); if (user == null) { user = new YamsterUser(userId, this); this.usersById.Add(userId, user); eventCollector.NotifyAfterAdd(user); } return(user); }
internal void AddUser(YamsterUser user) { int foundIndex = users.BinarySearch(user, userComparer); if (foundIndex >= 0) { return; // already in list } users.Insert(~foundIndex, user); hashCode = ((hashCode << 5) + hashCode) ^ user.UserId.GetHashCode(); cachedToString = null; }
public YamsterUser GetUserById(long userId, bool nullIfMissing = false) { YamsterUser user = null; if (!this.usersById.TryGetValue(userId, out user)) { if (!nullIfMissing) { throw new KeyNotFoundException("The user ID " + userId + " was not found"); } } return(user); }
public YamsterUserChangedEventArgs(YamsterUser user, YamsterModelChangeType changeType) : base(changeType) { this.User = user; }
public static YamsterNewMessage CreatePrivateConversation(YamsterCache yamsterCache, YamsterUser user) { return(CreatePrivateConversation(yamsterCache, new YamsterUser[] { user })); }
internal void SetDbMessage(DbMessage newValue, YamsterModelEventCollector eventCollector) { if (newValue == null) { throw new ArgumentNullException("DbMessage"); } if (newValue.MessageId != messageId) { throw new ArgumentException("Cannot change ID"); } var oldValue = this.dbMessage; this.dbMessage = newValue; this.cachedPreviewText = null; this.group = this.YamsterCache.FetchGroupById(this.dbMessage.GroupId, eventCollector); this.senderUser = this.YamsterCache.FetchUserById(this.dbMessage.SenderUserId, eventCollector); this.messageRepliedTo = null; if (this.dbMessage.MessageIdRepliedTo != 0 // The Yammer UI doesn't show "in reply to" when messageRepliedTo is the threadstarter. // TODO: What does it do if the threadstarter's MessageId != ThreadId? && this.dbMessage.MessageIdRepliedTo != this.dbMessage.ThreadId) { this.YamsterCache.ListenForMessageById( this.dbMessage.MessageIdRepliedTo, this, eventCollector, delegate(YamsterMessage listenedMessage, YamsterModelEventCollector ec) { if (listenedMessage.MessageId == this.dbMessage.MessageIdRepliedTo) { this.messageRepliedTo = listenedMessage; ec.NotifyAfterUpdate(this); } } ); } int oldlikingUsersCount = likingUsers.Count; likingUsers.Clear(); foreach (long userId in this.dbMessage.LikingUserIds) { var user = this.YamsterCache.FetchUserById(userId, eventCollector); likingUsers.AddUser(user); } if (this.thread != null) { int totalLikesCountDelta = newValue.LikesCount - oldValue.LikesCount; if (totalLikesCountDelta != 0) { this.thread.NotifyTotalLikesChanged(totalLikesCountDelta, eventCollector); } } notifiedUsers.Clear(); foreach (long userId in this.dbMessage.NotifiedUserIds) { var user = this.YamsterCache.FetchUserById(userId, eventCollector); notifiedUsers.AddUser(user); } UpdateLoadedStatus(); eventCollector.NotifyAfterUpdate(this); }