Ejemplo n.º 1
0
        public List<Message> GetAllMessagesForUser(DataAccessLayer.User user, DateTime? syncTime)
        {
            DateTime now = DateTime.UtcNow;
            DateTime nonNullSyncTime = syncTime ?? DateTime.UtcNow - new TimeSpan(7, 0, 0, 0);
            List<SortCriteria> sorts = new List<SortCriteria>();
            sorts.Add(new SortCriteria() { Column= MessageTable.LastUpdateTimeUtcTicksColumn, SortOrder = SortOrder.Descending });

            // Create a filter to say Select * from MessageTable where (Sender = @userId OR Recipient = @userId OR Recipient = @groupThatUserIsAMemberOf) AND LastUpdateTime > @syncTime
            QueryFilter filter = new SelectFilter(
                MessageTable.Instance,
                new AndFilter(
                    MessageStore.CreateUserFilter(user),
                    new ComparisonFilter(MessageTable.LastUpdateTimeUtcTicksColumn, nonNullSyncTime.Ticks, ComparisonOperator.Greater)),
                sorts);

            List<ITableRow> rows = MessageTable.Instance.QueryRows(filter);
            List<Message> messages = new List<Message>();
            if (rows != null)
            {
                for (int i = 0; i < rows.Count; i++)
                {
                    messages.Add(DataContractToTableRowConverter.ConvertToMessage(MessageTable.Instance, rows[i]));
                }
            }

            DataAccessLayer.UserService.UpdateUserLastSyncTime(user.Id, now);

            return messages;
        }
Ejemplo n.º 2
0
        public List<Message> GetConversationMessages(Guid conversationId)
        {
            // Create a filter to say Select * from MessageTable where ConversationId = @conversationId AND MessageId = @messageId
            QueryFilter filter = new SelectFilter(
                MessageTable.Instance,
                new ComparisonFilter(MessageTable.ConversationIdColumn, conversationId, ComparisonOperator.Equal),
                null);

            List<ITableRow> rows = MessageTable.Instance.QueryRows(filter);
            List<Message> messages = new List<Message>();
            if (rows != null)
            {
                for (int i = 0; i < rows.Count; i++)
                {
                    messages.Add(DataContractToTableRowConverter.ConvertToMessage(MessageTable.Instance, rows[i]));
                }
            }

            return messages;
        }
Ejemplo n.º 3
0
        public Message GetMessage(Guid conversationId, Guid messageId)
        {
            // Create a filter to say Select * from MessageTable where ConversationId = @conversationId AND MessageId = @messageId
            QueryFilter filter = new SelectFilter(
                MessageTable.Instance,
                new AndFilter(
                    new ComparisonFilter(MessageTable.ConversationIdColumn, conversationId, ComparisonOperator.Equal),
                    new ComparisonFilter(MessageTable.MessageIdColumn, messageId, ComparisonOperator.Equal)),
                null);

            List<ITableRow> rows = MessageTable.Instance.QueryRows(filter);
            if (rows.Count != 1)
            {
                return null;
            }

            return DataContractToTableRowConverter.ConvertToMessage(MessageTable.Instance, rows[0]);
        }
Ejemplo n.º 4
0
        public int GetUnseenMessageCount(DataAccessLayer.User user, DateTime lastSeenTime)
        {
            // Create a filter to say Select * from MessageTable where (Sender = @userId OR Recipient = @userId OR Recipient = @groupThatUserIsAMemberOf) AND LastUpdateTime > @syncTime
            QueryFilter filter = new SelectFilter(
                MessageTable.Instance,
                new AndFilter(
                    MessageStore.CreateUserFilterForCount(user),
                    new ComparisonFilter(MessageTable.LastUpdateTimeUtcTicksColumn, lastSeenTime.Ticks, ComparisonOperator.Greater)),
                null,
                true/*count*/);

            return MessageTable.Instance.GetRowCount(filter);
        }