ResourceRequestProcessor<TResource>
abstract class ResourceRequestProcessor<TResource> : BaseRequestProcessor where TResource : IResourceInfo
using AngleSharp.Extensions;
using AngleSharp.Services;
using AngleSharp.Services.Media;
using System.Threading.Tasks;
namespace AngleSharp.Network.RequestProcessors
{
internal abstract class ResourceRequestProcessor<TResource> : BaseRequestProcessor where TResource : IResourceInfo
{
private readonly IConfiguration _options;
private TResource _resource;
public string Source {
get {
if (_resource == null)
return string.Empty;
return _resource.Source.Href;
}
}
public bool IsReady => _resource != null;
public TResource Resource {
get {
return _resource;
}
protected set {
_resource = value;
}
}
public ResourceRequestProcessor(IConfiguration options, IResourceLoader loader)
: base(loader)
{
_options = options;
}
public override Task ProcessAsync(ResourceRequest request)
{
if (IsDifferentToCurrentResourceUrl(request.Target))
return base.ProcessAsync(request);
return null;
}
protected IResourceService<TResource> GetService(IResponse response)
{
MimeType contentType = response.GetContentType();
return AngleSharp.Extensions.ConfigurationExtensions.GetResourceService<TResource>(_options, contentType.Content);
}
private bool IsDifferentToCurrentResourceUrl(Url target)
{
if (_resource != null)
return !target.Equals(_resource.Source);
return true;
}
}
}