コード例 #1
0
        public async Task <IActionResult> Index(string username, string group)
        {
            var currentUser = await this.userManager.GetUserAsync(this.User);

            bool isAvailableToChat = await this.privateChatService.IsUserAbleToChat(username, group, currentUser);

            if (!isAvailableToChat)
            {
                this.TempData["Error"] = ErrorMessages.NotAbleToChat;
                return(this.RedirectToAction("Index", "Profile", new { username }));
            }

            var model = new PrivateChatViewModel
            {
                FromUser            = await this.userManager.GetUserAsync(this.HttpContext.User),
                ToUser              = await this.userManager.FindByNameAsync(username),
                ChatMessages        = await this.privateChatService.ExtractAllMessages(group),
                GroupName           = group,
                Emojis              = this.privateChatService.GetAllEmojis(),
                AllChatThemes       = this.privateChatService.GetAllThemes(),
                ChatThemeViewModel  = this.privateChatService.GetGroupTheme(group),
                AllStickers         = this.privateChatService.GetAllStickers(currentUser),
                AllQuickChatReplies = this.privateChatService.GetAllQuickReplies(currentUser),
            };

            return(this.View(model));
        }
コード例 #2
0
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            if (isLoading)
            {
                return;
            }

            isLoading = true;

            var parameter = (string)e.Parameter;

            vm = new PrivateChatViewModel(parameter);
            this.DataContext = vm;
            vm.OnAppearing();
        }
コード例 #3
0
        public async Task <IActionResult> Index(string username, string group)
        {
            var currentUser = await this.userManager.GetUserAsync(this.User);

            bool isAbaleToChat = await this.privateChatService.IsUserAbleToChat(username, group, currentUser);

            if (!isAbaleToChat)
            {
                this.TempData["Error"] = ErrorMessages.NotAbleToChat;
                return(this.RedirectToAction("Index", "Profile", new { username }));
            }

            var model = new PrivateChatViewModel
            {
                FromUser     = await this.userManager.GetUserAsync(this.HttpContext.User),
                ToUser       = this.db.Users.FirstOrDefault(x => x.UserName == username),
                ChatMessages = await this.privateChatService.ExtractAllMessages(group),
                GroupName    = group,
            };

            return(this.View(model));
        }
コード例 #4
0
        // Refference: opening a chat in the nav bar (LoginPartial / Съобщения)
        public async Task <IActionResult> Index(string receiverId)
        {
            var user = await this.userManager.GetUserAsync(this.User);

            var receiver = await this.userManager.FindByIdAsync(receiverId);

            if (user.Id.Equals(receiver.Id))
            {
                return(this.Redirect(GlobalConstants.HomePageRedirect));
            }

            var conversationId = await this.privateChatService.GetConversationBySenderAndReceiverIdsAsync(user.Id, receiver.Id);

            if (conversationId == null)
            {
                return(this.CustomNotFound());
            }

            var conversationMessages = await this.privateChatService.GetAllConversationMessagesAsync <MessageViewModel>(conversationId);

            await this.privateChatService.MarkAllMessagesOfTheCurrentUserAsSeenAsync(conversationId, user.Id);

            foreach (var message in conversationMessages)
            {
                message.Content = new HtmlSanitizer().Sanitize(message.Content);
            }

            var model = new PrivateChatViewModel
            {
                Sender         = user,
                Receiver       = receiver,
                ConversationId = conversationId,
                ChatMessages   = conversationMessages,
            };

            return(this.View(model));
        }
コード例 #5
0
        public async Task <IActionResult> PrivateChat(string friendId, string friendEmail)
        {
            var owner = await Owner();

            var friend  = _userManager.Users.FirstOrDefault(u => u.Id == friendId);
            var ownerId = owner.Id;

            var isUserOnline = await IsOnline(friendId);

            var model = new PrivateChatViewModel
            {
                Friend = new User {
                    Id                = friendId,
                    Email             = friendEmail,
                    IsOnline          = isUserOnline,
                    Avatar            = friend.Avatar,
                    AvatarContentType = friend.AvatarContentType
                },
            };

            _messagesRepository.MarkHistoryAsRead(ownerId, friendId);

            return(View(model));
        }
コード例 #6
0
 public PrivateChatPage(Chat chat)
 {
     InitializeComponent();
     BindingContext = new PrivateChatViewModel(chat, slMessage);
 }