void ProcessDbGroupState(DbGroupState record) { var eventCollector = new YamsterModelEventCollector(); YamsterGroup group = this.FetchGroupById(record.GroupId, eventCollector); group.SetDbGroupState(record, eventCollector); eventCollector.FireEvents(); }
public static YamsterNewMessage CreateNewThread(YamsterGroup group) { if (group == null) { throw new ArgumentNullException("group"); } var newMessage = new YamsterNewMessage(); newMessage.Group = group; return(newMessage); }
internal YamsterGroup FetchGroupById(long groupId, YamsterModelEventCollector eventCollector) { YamsterGroup group = this.GetGroupById(groupId, nullIfMissing: true); if (group == null) { group = new YamsterGroup(groupId, this); this.groupsById.Add(groupId, group); eventCollector.NotifyAfterAdd(group); } return(group); }
internal YamsterThread(long threadId, YamsterGroup group, YamsterCache yamsterCache) : base(yamsterCache) { this.ThreadId = threadId; this.Group = group; this.participants = YamsterUserSet.EmptyUserSet; this.dbThreadState = new DbThreadState() { ThreadId = threadId, ChangeNumber = 0 }; }
public YamsterGroup GetGroupById(long groupId, bool nullIfMissing = false) { YamsterGroup group = null; if (!this.groupsById.TryGetValue(groupId, out group)) { if (!nullIfMissing) { throw new KeyNotFoundException("The group ID " + groupId + " was not found in Yamster's local database. (Has it been synced yet?)"); } } return(group); }
public YamsterGroupChangedEventArgs(YamsterGroup group, YamsterModelChangeType changeType) : base(changeType) { this.Group = group; }
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); }