Пример #1
0
        /// <summary>
        /// Builds the whole index by indexing all the items in the specified
        /// repository.
        /// </summary>
        /// <param name="repository">The repository.</param>
        /// <param name="filter">The optional item filter; paging information
        /// will be overwritten.</param>
        /// <param name="cancel">The cancellation token.</param>
        /// <param name="progress">The optional progress reporter.</param>
        public void Build(
            ICadmusRepository repository,
            ItemFilter filter,
            CancellationToken cancel,
            IProgress <ProgressReport> progress = null)
        {
            if (filter == null)
            {
                filter = new ItemFilter();
            }
            filter.PageNumber = 1;
            filter.PageSize   = 100;

            // first page
            DataPage <ItemInfo> page = repository.GetItems(filter);

            if (page.Total == 0)
            {
                return;
            }

            ProgressReport report = progress != null
                ? new ProgressReport()
                : null;

            do
            {
                // index all the items in page
                foreach (ItemInfo info in page.Items)
                {
                    IItem item = repository.GetItem(info.Id);
                    if (item == null)
                    {
                        continue;
                    }
                    _writer.Write(item);
                }

                // handle cancel and progress
                if (cancel.IsCancellationRequested)
                {
                    break;
                }

                if (progress != null)
                {
                    report.Count  += page.Items.Count;
                    report.Percent = report.Count * 100 / page.Total;
                    progress.Report(report);
                }

                // next page
                if (++filter.PageNumber > page.PageCount)
                {
                    break;
                }
                page = repository.GetItems(filter);
            } while (page.Items.Count != 0);
        }
Пример #2
0
        public ActionResult <DataPage <ItemInfo> > GetItems(
            [FromRoute] string database,
            [FromQuery] ItemFilterModel filter)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            ICadmusRepository repository =
                _repositoryProvider.CreateRepository(database);
            DataPage <ItemInfo> page = repository.GetItems(new ItemFilter
            {
                PageNumber  = filter.PageNumber,
                PageSize    = filter.PageSize,
                Title       = filter.Title,
                Description = filter.Description,
                FacetId     = filter.FacetId,
                GroupId     = filter.GroupId,
                Flags       = filter.Flags,
                MinModified = filter.MinModified,
                MaxModified = filter.MaxModified,
                UserId      = filter.UserId
            });

            return(Ok(page));
        }