/// <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); }
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)); }