Exemple #1
0
        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);
        }