Example #1
0
        public static int CountUnreadMessages()
        {
            ConversationPreviewsModel model = MessageController.GetConversationPreviews();
            int unreadMessages = 0;

            foreach (ConversationPreviewModel m in model.Conversations)
            {
                if (m.LastMessage.Receiver.Id == System.Web.HttpContext.Current.User.Identity.GetUserId() && !m.LastMessage.isRead)
                {
                    unreadMessages++;
                }
            }
            return(unreadMessages);
        }
Example #2
0
        public static ConversationPreviewsModel GetConversationPreviews()
        {
            var                       context     = new AppDbContext();
            Message                   lastMessage = null;
            List <Message>            tempList    = new List <Message>();
            AppUser                   currentUser = context.Users.Find(System.Web.HttpContext.Current.User.Identity.GetUserId());
            ConversationPreviewsModel model       = new ConversationPreviewsModel()
            {
                Conversations = new List <ConversationPreviewModel>()
            };
            HashSet <string> interlocutorsIds = new HashSet <string>();

            //create a list of interlocutors
            foreach (Message message in currentUser.SentMessages.Concat(currentUser.ReceivedMessages))
            {
                if (message.ReceiverId == currentUser.Id)
                {
                    interlocutorsIds.Add(message.SenderId);
                }
                else
                {
                    interlocutorsIds.Add(message.ReceiverId);
                }
            }
            //find last sent or received message in conversation
            foreach (string interlocutorId in interlocutorsIds)
            {
                tempList    = currentUser.SentMessages.Concat(currentUser.ReceivedMessages).Where(x => x.ReceiverId == interlocutorId || x.SenderId == interlocutorId).OrderBy(x => x.SendDate).ToList();
                lastMessage = tempList.Last();
                model.Conversations.Add(new ConversationPreviewModel()
                {
                    Interlocutor = context.Users.Find(interlocutorId),
                    LastMessage  = lastMessage
                });
            }
            return(model);
        }