Пример #1
0
        public static IEnumerable <IssueData> SortIssues(IssueSortOrder sortOrder, IEnumerable <IssueData> issues)
        {
            switch (sortOrder)
            {
            case IssueSortOrder.Default:
                return(issues.OrderByDescending(x => x, new DefaultSortComparer()).ThenByDescending(x => x.Created));

            case IssueSortOrder.CreatedDescending:
                return(issues.OrderByDescending(x => x.Created));

            case IssueSortOrder.CreatedAscending:
                return(issues.OrderBy(x => x.Created));

            case IssueSortOrder.VotesAscending:
                return(issues.OrderBy(x => x.Votes).ThenByDescending(x => x.Created));

            case IssueSortOrder.VotesDescending:
                return(issues.OrderByDescending(x => x.Votes).ThenByDescending(x => x.Created));

            case IssueSortOrder.UserAscending:
                return(issues.OrderBy(x => x.User).ThenByDescending(x => x.Created));

            case IssueSortOrder.UserDescending:
                return(issues.OrderByDescending(x => x.User).ThenByDescending(x => x.Created));

            case IssueSortOrder.PriorityAscending:
                return(issues.OrderBy(x => x.Priority).ThenByDescending(x => x.Created));

            case IssueSortOrder.PriorityDescending:
                return(issues.OrderByDescending(x => x.Priority).ThenByDescending(x => x.Created));

            default:
                return(issues);
            }
        }
 public static Task <Issue[]> GetIssuesAsync(int skip, int take, IssueSortOrder sortOrder, IssueFilter filter)
 {
     return(Task.Run(() => {
         var issues = SortIssues(sortOrder, AllIssues.Value);
         if (filter != null)
         {
             issues = FilterIssues(filter, issues);
         }
         return issues.Skip(skip).Take(take).Select(x => x.Clone()).ToArray();
     }));
 }
Пример #3
0
        public async static Task <IssueData[]> GetIssuesAsync(int skip, int take, IssueSortOrder sortOrder, IssueFilter filter)
        {
            await Task.Delay(300).ConfigureAwait(false);

            var issues = SortIssues(sortOrder, AllIssues.Value);

            if (filter != null)
            {
                issues = FilterIssues(filter, issues);
            }
            return(issues.Skip(skip).Take(take).Select(x => x.Clone()).ToArray());
        }
Пример #4
0
        public IssueData[] GetIssues(int page, int pageSize, IssueSortOrder sortOrder, IssueFilter filter)
        {
            CheckAccess();
            Thread.Sleep(300);
            var issues = SortIssues(sortOrder, AllIssues.Value);

            if (filter != null)
            {
                issues = FilterIssues(filter, issues);
            }
            return(issues.Skip(page * pageSize).Take(pageSize).ToArray());
        }
Пример #5
0
        async Task <FetchRowsResult> FetchRowsAsync(FetchRowsAsyncEventArgs e)
        {
            IssueSortOrder sortOrder = IssuesHelper.GetIssueSortOrder(e);
            IssueFilter    filter    = IssuesHelper.MakeIssueFilter(e.Filter);
            const int      pageSize  = 30;
            var            issues    = await IssuesService.GetIssuesAsync(
                page : e.Skip / pageSize,
                pageSize : pageSize,
                sortOrder : sortOrder,
                filter : filter);

            return(new FetchRowsResult(issues, hasMoreRows: issues.Length == pageSize));
        }
Пример #6
0
        static async Task <FetchRowsResult> FetchRowsAsync(FetchPageAsyncEventArgs e)
        {
            IssueSortOrder sortOrder = GetIssueSortOrder(e);
            IssueFilter    filter    = MakeIssueFilter(e.Filter);

            var issues = await IssuesService.GetIssuesAsync(
                page : e.Skip / e.Take,
                pageSize : e.Take,
                sortOrder : sortOrder,
                filter : filter);

            return(new FetchRowsResult(issues, hasMoreRows: issues.Length == e.Take));
        }
        static async Task <FetchRowsResult> FetchRowsAsync(FetchRowsAsyncEventArgs e)
        {
            IssueSortOrder sortOrder = GetIssueSortOrder(e);
            IssueFilter    filter    = MakeIssueFilter(e.Filter);

            int take   = e.Take ?? 30;
            var issues = await IssuesService.GetIssuesAsync(
                skip : e.Skip,
                take : take,
                sortOrder : sortOrder,
                filter : filter);

            return(new FetchRowsResult(issues, hasMoreRows: issues.Length == take));
        }
Пример #8
0
        static async Task <FetchRowsResult> FetchRowsAsync(FetchPageAsyncEventArgs e)
        {
            IssueSortOrder sortOrder = GetIssueSortOrder(e);

            var issuesFetchResult = await IssuesService.GetIssuesAsync(
                skipToken : e.SkipToken,
                pageSize : e.Take,
                sortOrder : sortOrder);

            return(new FetchRowsResult(
                       issuesFetchResult.Issues,
                       hasMoreRows: issuesFetchResult.Issues.Length == e.Take,
                       nextSkipToken: issuesFetchResult.NextSkipToken));
        }
Пример #9
0
        static FetchRowsResult FetchRows(FetchPageEventArgs e)
        {
            IssueSortOrder sortOrder = GetIssueSortOrder(e);
            IssueFilter    filter    = MakeIssueFilter(e.Filter);

            var issuesContext = (IssuesContext)e.Source;

            const int pageSize = 30;
            var       issues   = issuesContext.GetIssues(
                page: e.Skip / pageSize,
                pageSize: pageSize,
                sortOrder: sortOrder,
                filter: filter);

            return(new FetchRowsResult(issues, hasMoreRows: issues.Length == pageSize));
        }
        static void CheckRestrictions(IssueSortOrder sortOrder, IssueFilter filter)
        {
            if (filter == null)
            {
                return;
            }
            if ((sortOrder == IssueSortOrder.Hot || sortOrder == IssueSortOrder.Week) &&
                (filter.CreatedFrom != null || filter.CreatedTo != null || filter.MaxVotes != null || filter.MinVotes != null))
            {
                throw new InvalidOperationException("Restrictions violation");
            }

            if ((filter.MaxVotes != null || filter.MinVotes != null) &&
                !(sortOrder == IssueSortOrder.VotesAscending || sortOrder == IssueSortOrder.VotesDescending))
            {
                throw new InvalidOperationException("Restrictions violation");
            }
        }
        static IEnumerable <Issue> SortIssues(IssueSortOrder sortOrder, IEnumerable <Issue> issues)
        {
            switch (sortOrder)
            {
            case IssueSortOrder.Default:
                return(issues);//.OrderByDescending(x => x, new DefaultSortComparer()).ThenByDescending(x => x.Created);

            case IssueSortOrder.CreatedDescending:
                return(issues.OrderByDescending(x => x.Created));

            case IssueSortOrder.VotesAscending:
                return(issues.OrderBy(x => x.Votes).ThenByDescending(x => x.Created));

            case IssueSortOrder.VotesDescending:
                return(issues.OrderByDescending(x => x.Votes).ThenByDescending(x => x.Created));

            default:
                throw new InvalidOperationException();
            }
        }
        static IEnumerable <IssueData> SortIssues(IssueSortOrder sortOrder, IEnumerable <IssueData> issues)
        {
            switch (sortOrder)
            {
            case IssueSortOrder.Default:
                return(issues
                       .Where(x => x.Created > DateTime.Today.AddDays(-2) && x.Votes > 70)
                       .OrderByDescending(x => x.Created));

            case IssueSortOrder.Hot:
                return(issues
                       .Where(x => x.Created > DateTime.Today.AddDays(-2) && x.Votes > 70)
                       .OrderByDescending(x => x.Votes)
                       .ThenByDescending(x => x.Created));

            case IssueSortOrder.Week:
                return(issues
                       .Where(x => x.Created > DateTime.Today.AddDays(-7) && x.Votes > 90)
                       .OrderByDescending(x => x.Votes)
                       .ThenByDescending(x => x.Created));

            case IssueSortOrder.CreatedAscending:
                return(issues.OrderBy(x => x.Created));

            case IssueSortOrder.CreatedDescending:
                return(issues.OrderByDescending(x => x.Created));

            case IssueSortOrder.VotesAscending:
                return(issues
                       .OrderBy(x => x.Votes)
                       .ThenByDescending(x => x.Created));

            case IssueSortOrder.VotesDescending:
                return(issues
                       .OrderByDescending(x => x.Votes)
                       .ThenByDescending(x => x.Created));

            default:
                throw new InvalidOperationException();
            }
        }
Пример #13
0
 public async static Task <IssueData[]> GetIssuesAsync(int page, int pageSize, IssueSortOrder sortOrder, IssueFilter filter)
 {
     return(await Task.Run(() => {
         var issues = IssuesHelper.SortIssues(sortOrder, AllIssues.Value);
         if (filter != null)
         {
             issues = IssuesHelper.FilterIssues(filter, issues);
         }
         issues = issues.Skip(page *pageSize).Take(pageSize);
         return issues.ToArray();
     }));
 }
Пример #14
0
        public async static Task <IssuesFetchResult> GetIssuesAsync(object skipToken, int pageSize, IssueSortOrder sortOrder)
        {
            await Task.Delay(300).ConfigureAwait(false);

            IEnumerable <IssueData> issues = AllIssues.Value;

            var createdValue = skipToken != null ? ((SkipToken)skipToken).CreatedValue : default(DateTime?);

            if (sortOrder == IssueSortOrder.CreatedAscending)
            {
                issues = issues
                         .OrderBy(x => x.Created)
                         .Where(x => createdValue != null ? x.Created > createdValue : true);
            }
            else
            {
                issues = issues
                         .OrderByDescending(x => x.Created)
                         .Where(x => createdValue != null ? x.Created < createdValue : true);
            }

            var rows          = issues.Take(pageSize).ToArray();
            var nextSkipToken = rows.Any() ? new SkipToken(rows.Last().Created) : null;

            return(new IssuesFetchResult(rows, nextSkipToken));
        }
Пример #15
0
        public async static Task <IssueData[]> GetIssuesAsync(int page, int pageSize, IssueSortOrder sortOrder, IssueFilter filter)
        {
            await Task.Delay(300);

            var issues = SortIssues(sortOrder, AllIssues.Value);

            if (filter != null)
            {
                issues = FilterIssues(filter, issues);
            }
            return(issues.Skip(page * pageSize).Take(pageSize).ToArray());
        }