public async Task <IActionResult> DisplayPartial(int id, long latest) { var latestTime = new DateTime(latest); var topic = DbContext.Topics.Find(id); if (topic is null || topic.Deleted) { throw new HttpNotFoundError(); } await BoardRepository.GetTopicBoards(id); var messageIds = MessageRepository.GetMessageIds(id, latestTime); var messages = await MessageRepository.GetMessages(messageIds); var latestMessageTime = messages.Max(r => r.RecordTime); await TopicRepository.MarkRead(id, latestMessageTime, messageIds); var viewModel = new ViewModels.Topics.TopicDisplayPartialPage { Latest = DateTime.Now.Ticks, Messages = messages }; return(await ForumViewResult.ViewResult(this, "DisplayPartial", viewModel)); }
public async Task <IActionResult> Display(int id) { var message = DbContext.Messages.Find(id); if (message is null || message.Deleted) { throw new HttpNotFoundError(); } var topicId = message.TopicId; await BoardRepository.GetTopicBoards(topicId); var messageIds = new List <int> { id }; var messages = await MessageRepository.GetMessages(messageIds); var viewModel = new ViewModels.Topics.TopicDisplayPartialPage { Latest = DateTime.Now.Ticks, Messages = messages }; return(await ForumViewResult.ViewResult(this, "../Topics/DisplayPartial", viewModel)); }
public async Task <IActionResult> Display(int id, int page = 1, int target = -1) { var topic = await DbContext.Topics.FindAsync(id); if (topic is null || topic.Deleted) { throw new HttpNotFoundError(); } if (page < 1) { var redirectUrl = Url.Action(nameof(Display), new { id, page = 1, target }); return(Redirect(redirectUrl)); } var messageIds = MessageRepository.GetMessageIds(topic.Id); if (target >= 0) { var targetPage = MessageRepository.GetPageNumber(target, messageIds); if (targetPage != page) { return(Redirect(GetRedirectPath(id, targetPage, target))); } } var take = CurrentUser.ApplicationUser.MessagesPerPage; var skip = take * (page - 1); var totalPages = Convert.ToInt32(Math.Ceiling(1.0 * messageIds.Count / take)); var pageMessageIds = messageIds.Skip(skip).Take(take).ToList(); var viewModel = new ViewModels.Topics.TopicDisplayPage { Id = topic.Id, FirstMessageId = topic.FirstMessageId, Subject = string.IsNullOrEmpty(topic.FirstMessageShortPreview) ? "No subject" : topic.FirstMessageShortPreview, AssignedBoards = new List <ViewModels.Boards.IndexBoard>(), IsAuthenticated = CurrentUser.IsAuthenticated, IsOwner = topic.FirstMessagePostedById == CurrentUser.Id, IsAdmin = CurrentUser.IsAdmin, IsPinned = topic.Pinned, ShowFavicons = CurrentUser.ApplicationUser.ShowFavicons, TotalPages = totalPages, ReplyCount = topic.ReplyCount, ViewCount = topic.ViewCount, CurrentPage = page, ReplyForm = new ViewModels.Messages.ReplyForm { Id = "0", TopicId = topic.Id.ToString(), ElementId = "topic-reply" } }; await isBookmarked(); await loadMessages(); await loadCategories(); await loadTopicBoards(); await loadSmileyViewData(); return(await ForumViewResult.ViewResult(this, viewModel)); async Task isBookmarked() { viewModel.IsBookmarked = await BookmarkRepository.IsBookmarked(topic.Id); } async Task loadMessages() { viewModel.Messages = await MessageRepository.GetMessages(pageMessageIds); var latestMessageTime = viewModel.Messages.Max(r => r.RecordTime); await TopicRepository.MarkRead(topic.Id, latestMessageTime, pageMessageIds); topic.ViewCount++; DbContext.Update(topic); await DbContext.SaveChangesAsync(); } async Task loadCategories() { viewModel.Categories = await BoardRepository.CategoryIndex(); } async Task loadTopicBoards() { var topicBoards = await BoardRepository.GetTopicBoards(topic.Id); foreach (var topicBoard in topicBoards) { var indexBoard = await BoardRepository.GetIndexBoard(topicBoard); viewModel.AssignedBoards.Add(indexBoard); } } async Task loadSmileyViewData() { ViewData[Constants.InternalKeys.SmileyViewData] = await SmileyRepository.GetSelectorList(); } }