Exemplo n.º 1
0
        public ActionResult Conversation(int id)
        {
            var model = new Messenger();

            // get conversation
            model.Conversation = ConversationService.Get(id);
            if (model.Conversation == null)
            {
                ThrowResponseException(HttpStatusCode.NotFound, $"Conversation with id {id} not found");
            }

            // mark conversation as read (if needed)
            if (model.Conversation.ReadAt == null)
            {
                model.Conversation = ConversationService.SetRead(id, DateTime.UtcNow);
            }
            else if (model.Conversation.LastMessage != null && model.Conversation.ReadAt < model.Conversation.LastMessage.CreatedAt)
            {
                // NOTE: do not assign the read conversation to model.Conversation since that will prevent rendering of the "New messages" separator
                ConversationService.SetRead(model.Conversation.Id, DateTime.UtcNow);
            }

            // get first page of messages (and reverse them for easier rendering in correct order)
            model.Messages = ConversationService.GetMessages(id, new QueryOptions {
                Top = MAX_PAGE_SIZE
            });
            model.Messages.Reverse();

            return(View(model));
        }
Exemplo n.º 2
0
        public PartialViewResult PartialMessages(int id, QueryOptions opts)
        {
            // limit page size to 25
            opts.Top = Math.Min(opts.Top ?? MAX_PAGE_SIZE, MAX_PAGE_SIZE);

            var model = new Messenger();

            model.Conversation = ConversationService.Get(id);
            model.Messages     = ConversationService.GetMessages(model.Conversation.Id, opts);
            model.Messages.Reverse();
            return(PartialView("_Messages", model));
        }
        public IHttpActionResult GetMessages(int id, QueryOptions opts)
        {
            var conversation = ConversationService.Get(id);

            if (conversation == null)
            {
                ThrowResponseException(HttpStatusCode.NotFound, "Conversation with id " + id + " not found");
            }
            var messages = ConversationService.GetMessages(id, opts);

            messages.Reverse();
            return(Ok(new ScrollableList <Message>(messages, Request.RequestUri)));
        }
Exemplo n.º 4
0
        public async Task <IActionResult> GetMessages(int id)
        {
            UserConversation conversation = _conversationService.GetUserConversation(id);

            if (conversation == null)
            {
                return(Forbid());
            }

            IEnumerable <Message> messages = await _conversationService.GetMessages(id);

            return(Ok(_mapper.Map <IEnumerable <MessageDto> >(messages.Reverse())));
        }
Exemplo n.º 5
0
        public IHttpActionResult GetMessages(int id, QueryOptions opts)
        {
            var messagesOut  = new List <MessageOutModel>();
            var conversation = GetConversation(id);
            var messages     = ConversationService.GetMessages(id, opts);

            foreach (var m in messages)
            {
                var seenBy     = GetSeenBy(m, messages, conversation.Members);
                var messageOut = GetMessageOut(m, seenBy);
                messagesOut.Add(messageOut);
            }
            messagesOut.Reverse();

            return(Ok(new ScrollableList <MessageOutModel>(messagesOut, null, null, null, Request.RequestUri)));
        }
Exemplo n.º 6
0
        public ActionResult Messenger(int?id, QueryOptions opts)
        {
            // limit page size to 25
            opts.Top = Math.Min(opts.Top ?? MAX_PAGE_SIZE, MAX_PAGE_SIZE);

            var model = new Messenger {
                ConversationId = id
            };

            if (model.ConversationId != null)
            {
                // get selected conversation
                model.Conversation = ConversationService.Get(model.ConversationId.Value);
                if (model.Conversation == null)
                {
                    ThrowResponseException(HttpStatusCode.NotFound, $"Conversation with id {model.ConversationId.Value} not found");
                }
            }
            else
            {
                // get most recent conversation
                model.Conversation = ConversationService.Search(new ConversationQuery {
                    OrderBy = "PinnedAt DESC, LastMessageAt DESC", Top = 1
                }).FirstOrDefault();
            }

            if (model.Conversation != null)
            {
                if (model.ConversationId != null)
                {
                    // mark conversation as read (if needed)
                    if (model.Conversation.ReadAt == null)
                    {
                        model.Conversation = ConversationService.SetRead(model.Conversation.Id, DateTime.UtcNow);
                    }
                    else if (model.Conversation.ReadAt < model.Conversation.LastMessage?.CreatedAt)
                    {
                        // NOTE: do not assign the read conversation to model.Conversation since that will prevent rendering of the "New messages" separator
                        ConversationService.SetRead(model.Conversation.Id, DateTime.UtcNow);
                    }
                }

                // get first page of messages (and reverse them for easier rendering in correct order)
                model.Messages = ConversationService.GetMessages(model.Conversation.Id, new QueryOptions {
                    Top = MAX_PAGE_SIZE
                });
                model.Messages.Reverse();
            }

            // Meetings
            model.ZoomEnabled  = ConfigurationService.ZoomMeetings;
            model.TeamsEnabled = ConfigurationService.TeamsMeetings;

            // NOTE: we load conversations last so that selected conversation does not appear unread in the list
            var query = new ConversationQuery(opts);

            query.UserId        = User.Id;
            query.OrderBy       = "PinnedAt DESC, LastMessageAt DESC";
            model.Conversations = ConversationService.Search(query);

            // make sure selected conversation is visible in conversations list
            while (model.Conversation != null && !model.Conversations.Any(x => x.Id == model.Conversation.Id))
            {
                query.Top          += PageSizes.First();
                model.Conversations = ConversationService.Search(query);
            }

            return(View(nameof(Messenger), model));
        }