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;
public string Source {
get {
TResource resource = Resource;
ref TResource reference = ref resource;
TResource val = default(TResource);
object obj;
if (val == null) {
val = reference;
ref reference = ref val;
if (val == null) {
obj = null;
goto IL_003d;
}
}
obj = reference.Source.Href;
goto IL_003d;
IL_003d:
if (obj == null)
obj = string.Empty;
return (string)obj;
}
}
public bool IsReady => Resource != null;
public TResource Resource { get; set; }
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)
{
TResource resource = Resource;
if (resource != null)
return !target.Equals(resource.Source);
return true;
}
}
}