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))));
 }
Пример #2
0
        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));
        }