public Task <IEnumerable <Uri> > Handle(FilterLinksByHostRequest request, CancellationToken cancellationToken) { return(Task.FromResult(request.Links.Where(link => link.StartsWith("about:///")). Select(link => new Uri(request.Url, link.Replace("about://", ""))).Concat(request.Links. Where(link => link.StartsWith("http")).Select(link => new Uri(link)). Where(link => link.Host == request.Url.Host)))); }
public async Task <PageResult> Handle(ParseWebSiteRequest request, CancellationToken cancellationToken) { var download = new WebSiteDownloadRequest(request.Url); var response = await _mediator.Send(download, cancellationToken); var validateResponse = new ValidateResponseRequest(response, request.Options); var isValid = await _mediator.Send(validateResponse, cancellationToken); if (!isValid) { return(new PageResult(request.Url.ToString())); } var parseHtml = new ParseHtmlRequest(await response.Content.ReadAsStringAsync()); var parsed = await _mediator.Send(parseHtml, cancellationToken); var getLinks = new GetLinksRequest(parsed, request.Options.ParsingRules); var links = (await _mediator.Send(getLinks, cancellationToken)).ToList(); var filterLinksRequest = new FilterLinksByHostRequest(links, request.Url); var filteredLinks = await _mediator.Send(filterLinksRequest, cancellationToken); var children = --request.MaxDepth <= 0 ? null : await Task.WhenAll(filteredLinks.Select(link => _mediator.Send(new ParseWebSiteRequest(link, request.MaxDepth, request.Options), cancellationToken))); return(new PageResult(request.Url.ToString(), links, children)); }