Custom Request Limits #109
This commit is contained in:
parent
e49db9a4cb
commit
31a4e693e0
@ -15,6 +15,14 @@ internal abstract class DownloadClient : GlobalBase
|
|||||||
foreach (KeyValuePair<byte, int> limit in rateLimitRequestsPerMinute)
|
foreach (KeyValuePair<byte, int> limit in rateLimitRequestsPerMinute)
|
||||||
_rateLimit.Add(limit.Key, TimeSpan.FromMinutes(1).Divide(limit.Value));
|
_rateLimit.Add(limit.Key, TimeSpan.FromMinutes(1).Divide(limit.Value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal void SetCustomRequestLimit(byte requestType, int limit)
|
||||||
|
{
|
||||||
|
if (_rateLimit.ContainsKey(requestType))
|
||||||
|
_rateLimit[requestType] = TimeSpan.FromMinutes(1).Divide(limit);
|
||||||
|
else
|
||||||
|
_rateLimit.Add(requestType, TimeSpan.FromMinutes(1).Divide(limit));
|
||||||
|
}
|
||||||
|
|
||||||
public RequestResult MakeRequest(string url, byte requestType, string? referrer = null, string? clickButton = null)
|
public RequestResult MakeRequest(string url, byte requestType, string? referrer = null, string? clickButton = null)
|
||||||
{
|
{
|
||||||
|
@ -8,20 +8,16 @@ internal class HttpDownloadClient : DownloadClient
|
|||||||
{
|
{
|
||||||
private static readonly HttpClient Client = new()
|
private static readonly HttpClient Client = new()
|
||||||
{
|
{
|
||||||
Timeout = TimeSpan.FromSeconds(60),
|
Timeout = TimeSpan.FromSeconds(10)
|
||||||
DefaultRequestHeaders =
|
|
||||||
{
|
|
||||||
UserAgent =
|
|
||||||
{
|
|
||||||
new ProductInfoHeaderValue("Tranga", "0.1")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
public HttpDownloadClient(GlobalBase clone, Dictionary<byte, int> rateLimitRequestsPerMinute) : base(clone, rateLimitRequestsPerMinute)
|
public HttpDownloadClient(GlobalBase clone, Dictionary<byte, int> rateLimitRequestsPerMinute) : base(clone, rateLimitRequestsPerMinute)
|
||||||
{
|
{
|
||||||
|
if (settings.customUserAgent is null || settings.customUserAgent.Length < 1)
|
||||||
|
Client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("Tranga", "1.0"));
|
||||||
|
else
|
||||||
|
Client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", settings.customUserAgent);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override RequestResult MakeRequestInternal(string url, string? referrer = null, string? clickButton = null)
|
protected override RequestResult MakeRequestInternal(string url, string? referrer = null, string? clickButton = null)
|
||||||
|
@ -384,6 +384,29 @@ public class Server : GlobalBase
|
|||||||
settings.UpdateWorkingDirectory(workingDirectory);
|
settings.UpdateWorkingDirectory(workingDirectory);
|
||||||
SendResponse(HttpStatusCode.Accepted, response);
|
SendResponse(HttpStatusCode.Accepted, response);
|
||||||
break;*/
|
break;*/
|
||||||
|
case "Settings/customUserAgent":
|
||||||
|
if(!requestVariables.TryGetValue("userAgent", out string? customUserAgent))
|
||||||
|
{
|
||||||
|
SendResponse(HttpStatusCode.BadRequest, response);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
settings.customUserAgent = customUserAgent;
|
||||||
|
SendResponse(HttpStatusCode.Accepted, response);
|
||||||
|
break;
|
||||||
|
case "Settings/customRequestLimit":
|
||||||
|
if (!requestVariables.TryGetValue("requestType", out string? requestTypeStr) ||
|
||||||
|
!requestVariables.TryGetValue("requestsPerMinute", out string? requestsPerMinuteStr) ||
|
||||||
|
!requestVariables.TryGetValue("connector", out connectorName) ||
|
||||||
|
!byte.TryParse(requestTypeStr, out byte requestType) ||
|
||||||
|
!int.TryParse(requestsPerMinuteStr, out int requestsPerMinute) ||
|
||||||
|
!_parent.TryGetConnector(connectorName, out connector))
|
||||||
|
{
|
||||||
|
SendResponse(HttpStatusCode.BadRequest, response);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
connector!.downloadClient.SetCustomRequestLimit(requestType, requestsPerMinute);
|
||||||
|
SendResponse(HttpStatusCode.Accepted, response);
|
||||||
|
break;
|
||||||
case "NotificationConnectors/Update":
|
case "NotificationConnectors/Update":
|
||||||
if (!requestVariables.TryGetValue("notificationConnector", out string? notificationConnectorStr) ||
|
if (!requestVariables.TryGetValue("notificationConnector", out string? notificationConnectorStr) ||
|
||||||
!Enum.TryParse(notificationConnectorStr, out NotificationConnector.NotificationConnectorType notificationConnectorType))
|
!Enum.TryParse(notificationConnectorStr, out NotificationConnector.NotificationConnectorType notificationConnectorType))
|
||||||
|
@ -12,6 +12,7 @@ public class TrangaSettings
|
|||||||
public string workingDirectory { get; private set; }
|
public string workingDirectory { get; private set; }
|
||||||
public int apiPortNumber { get; init; }
|
public int apiPortNumber { get; init; }
|
||||||
public string styleSheet { get; private set; }
|
public string styleSheet { get; private set; }
|
||||||
|
public string? customUserAgent { get; set; } = null;
|
||||||
[JsonIgnore] public string settingsFilePath => Path.Join(workingDirectory, "settings.json");
|
[JsonIgnore] public string settingsFilePath => Path.Join(workingDirectory, "settings.json");
|
||||||
[JsonIgnore] public string libraryConnectorsFilePath => Path.Join(workingDirectory, "libraryConnectors.json");
|
[JsonIgnore] public string libraryConnectorsFilePath => Path.Join(workingDirectory, "libraryConnectors.json");
|
||||||
[JsonIgnore] public string notificationConnectorsFilePath => Path.Join(workingDirectory, "notificationConnectors.json");
|
[JsonIgnore] public string notificationConnectorsFilePath => Path.Join(workingDirectory, "notificationConnectors.json");
|
||||||
|
Loading…
Reference in New Issue
Block a user