public int RecountReplies() { var query = from message in DbContext.Messages where message.ParentId == 0 select message.Id; var recordCount = query.Count(); var take = SettingsRepository.TopicsPerPage(true); var totalSteps = (int)Math.Ceiling(1D * recordCount / take); return(totalSteps); }
public void RecountRepliesContinue(InputModels.Continue input) { input.ThrowIfNull(nameof(input)); var parentMessageQuery = from message in DbContext.Messages where message.ParentId == 0 orderby message.Id descending select message; var take = SettingsRepository.TopicsPerPage(true); var skip = input.CurrentStep * take; var parents = parentMessageQuery.Skip(skip).Take(take).ToList(); foreach (var parent in parents) { RecountRepliesForTopic(parent); } }
public List <int> GetIndexIds(int boardId, int page, int unreadFilter, DateTime historyTimeLimit, List <DataModels.Participant> participation, List <DataModels.ViewLog> viewLogs) { var take = SettingsRepository.TopicsPerPage(); var skip = (page - 1) * take; var forbiddenBoardIdsQuery = from role in RoleRepository.SiteRoles join board in RoleRepository.BoardRoles on role.Id equals board.RoleId where !UserContext.Roles.Contains(role.Id) select board.BoardId; var forbiddenBoardIds = forbiddenBoardIdsQuery.ToList(); var messageQuery = from message in DbContext.Messages where message.ParentId == 0 select new { message.Id, message.LastReplyPosted }; if (boardId > 0) { messageQuery = from message in DbContext.Messages join messageBoard in DbContext.MessageBoards on message.Id equals messageBoard.MessageId where message.ParentId == 0 where messageBoard.BoardId == boardId select new { message.Id, message.LastReplyPosted }; } if (unreadFilter > 0) { messageQuery = messageQuery.Where(m => m.LastReplyPosted > historyTimeLimit); } var pinnedTopicIds = PinRepository.Select(item => item.MessageId).ToList(); var sortedMessageQuery = from message in messageQuery let pinned = pinnedTopicIds.Contains(message.Id) orderby message.LastReplyPosted descending orderby pinned descending select new { message.Id, message.LastReplyPosted }; var messageIds = new List <int>(); var attempts = 0; var skipped = 0; foreach (var message in sortedMessageQuery) { if (IsAccessDenied(message.Id, forbiddenBoardIds)) { if (attempts++ > 100) { break; } continue; } var unreadLevel = unreadFilter == 0 ? 0 : GetUnreadLevel(message.Id, message.LastReplyPosted, participation, viewLogs); if (unreadLevel < unreadFilter) { if (attempts++ > 100) { break; } continue; } if (skipped++ < skip) { continue; } messageIds.Add(message.Id); if (messageIds.Count == take) { break; } } return(messageIds); }