Ejemplo n.º 1
0
        public async Task NewMessage(string senderId, string recipientId, int chatId,
                                     string content)
        {
            AppUser sender = userManager.Users
                             .FirstOrDefault(u => u.Id == senderId);
            string senderPhoto = (sender.ProfilePhotoUrl != null) ?
                                 $"/UsersData/{sender.ProfilePhotoUrl}" : "/defaultAvatar.png";
            string senderName = (sender.FirstName == null && sender.LastName == null) ?
                                sender.UserName : $"{sender.FirstName} {sender.LastName}";

            AppUser recipient = userManager.Users
                                .FirstOrDefault(u => u.Id == recipientId);
            string recipientPhoto = (recipient.ProfilePhotoUrl != null) ?
                                    $"/UsersData/{recipient.ProfilePhotoUrl}" : "/defaultAvatar.png";
            string recipientName = (recipient.FirstName == null && recipient.LastName == null) ?
                                   recipient.UserName : $"{recipient.FirstName} {recipient.LastName}";

            string date = DateTime.Now.ToString("HH:mm");
            int    msgId;
            Chat   chat;

            if (chatId == 0)
            {
                chat = new Chat
                {
                    User1Id         = senderId,
                    User2Id         = recipientId,
                    User1Checkpoint = DateTime.Now,
                    User2Checkpoint = DateTime.Now
                };
                repository.NewChat(chat);

                chat = repository.Chats
                       .FirstOrDefault(c => c.User1Id == senderId && c.User2Id == recipientId);

                ChatMessage msg = new ChatMessage
                {
                    UserId         = senderId,
                    DateAdded      = DateTime.Now,
                    MessageType    = "Txt",
                    MessageContent = content,
                    Seen           = false
                };
                repository.NewChatMessage(msg, chat);

                msgId = repository.Chats
                        .FirstOrDefault(c => c.ChatId == chat.ChatId)
                        .Messages.LastOrDefault(m => m.UserId == senderId).Id;
            }
            else
            {
                chat = repository.Chats
                       .FirstOrDefault(c => c.ChatId == chatId);

                ChatMessage msg = new ChatMessage
                {
                    UserId         = senderId,
                    DateAdded      = DateTime.Now,
                    MessageType    = "Txt",
                    MessageContent = content,
                    Seen           = false
                };
                repository.NewChatMessage(msg, chat);

                msgId = repository.Chats
                        .FirstOrDefault(c => c.ChatId == chatId)
                        .Messages.LastOrDefault(m => m.UserId == senderId).Id;
            }

            await Clients.All.SendAsync("PostNewMessage", msgId, recipientId,
                                        senderId, senderName, date, content);

            await Clients.All.SendAsync("ChatIndexNewMsg", senderId, recipientId,
                                        chat.ChatId, senderName, date, content,
                                        chat.Messages.Where(m => m.Seen == false).Count(), senderPhoto);

            await Clients.All.SendAsync("UserHeaderNewMsg", senderId, recipientId,
                                        chat.ChatId, senderName, date, content,
                                        chat.Messages.Where(m => m.Seen == false).Count(), senderPhoto,
                                        recipientPhoto, recipientName);
        }