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); }
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); }