2023-02-19 11:26:49 +00:00
|
|
|
using System;
|
2023-06-18 09:59:59 +00:00
|
|
|
using System.Linq;
|
2023-02-19 11:26:49 +00:00
|
|
|
using Jackett.Common.Utils.Clients;
|
|
|
|
|
|
|
|
namespace Jackett.Common.Exceptions
|
|
|
|
{
|
|
|
|
public class TooManyRequestsException : Exception
|
|
|
|
{
|
|
|
|
public TimeSpan RetryAfter { get; private set; }
|
|
|
|
|
|
|
|
public TooManyRequestsException(string message, TimeSpan retryWait)
|
2023-03-07 18:21:46 +00:00
|
|
|
: base(message)
|
|
|
|
{
|
|
|
|
RetryAfter = retryWait;
|
|
|
|
}
|
2023-02-19 11:26:49 +00:00
|
|
|
|
|
|
|
public TooManyRequestsException(string message, WebResult response)
|
|
|
|
: base(message)
|
|
|
|
{
|
2023-06-18 10:08:31 +00:00
|
|
|
if (response.Headers.TryGetValue("Retry-After", out var header) && header.FirstOrDefault() is { } retryAfter)
|
2023-02-19 11:26:49 +00:00
|
|
|
{
|
|
|
|
if (int.TryParse(retryAfter, out var seconds))
|
2023-06-18 09:59:59 +00:00
|
|
|
{
|
2023-02-19 11:26:49 +00:00
|
|
|
RetryAfter = TimeSpan.FromSeconds(seconds);
|
2023-06-18 09:59:59 +00:00
|
|
|
}
|
2023-02-19 11:26:49 +00:00
|
|
|
else if (DateTime.TryParse(retryAfter, out var date))
|
2023-06-18 09:59:59 +00:00
|
|
|
{
|
2023-02-19 11:26:49 +00:00
|
|
|
RetryAfter = date.ToUniversalTime() - DateTime.UtcNow;
|
2023-06-18 09:59:59 +00:00
|
|
|
}
|
2023-02-19 11:26:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|