Ejemplo n.º 1
0
        void ProcessDbGroupState(DbGroupState record)
        {
            var          eventCollector = new YamsterModelEventCollector();
            YamsterGroup group          = this.FetchGroupById(record.GroupId, eventCollector);

            group.SetDbGroupState(record, eventCollector);
            eventCollector.FireEvents();
        }
Ejemplo n.º 2
0
        public static YamsterNewMessage CreateNewThread(YamsterGroup group)
        {
            if (group == null)
            {
                throw new ArgumentNullException("group");
            }
            var newMessage = new YamsterNewMessage();

            newMessage.Group = group;
            return(newMessage);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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
            };
        }
Ejemplo n.º 5
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);
        }
Ejemplo n.º 6
0
 public YamsterGroupChangedEventArgs(YamsterGroup group, YamsterModelChangeType changeType)
     : base(changeType)
 {
     this.Group = group;
 }
Ejemplo n.º 7
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);
        }