From 96daf84ffb1a32e376a616d9ffa2fd6412f5fbfa Mon Sep 17 00:00:00 2001 From: Rory& Date: Thu, 31 Jul 2025 13:25:42 +0200 Subject: Follow retry-after or fall back to 500ms on ratelimit exceeded errors --- LibMatrix/Extensions/MatrixHttpClient.Single.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'LibMatrix/Extensions') diff --git a/LibMatrix/Extensions/MatrixHttpClient.Single.cs b/LibMatrix/Extensions/MatrixHttpClient.Single.cs index d14e481..430a6e5 100644 --- a/LibMatrix/Extensions/MatrixHttpClient.Single.cs +++ b/LibMatrix/Extensions/MatrixHttpClient.Single.cs @@ -184,11 +184,14 @@ public class MatrixHttpClient { Debug.Assert(ex != null, nameof(ex) + " != null"); ex.RawContent = content; // Console.WriteLine($"Failed to send request: {ex}"); - if (ex.RetryAfterMs is null) throw ex!; - //we have a ratelimit error - await Task.Delay(ex.RetryAfterMs.Value, cancellationToken); - request.ResetSendStatus(); - return await SendAsync(request, cancellationToken); + if (ex.ErrorCode == MatrixException.ErrorCodes.M_LIMIT_EXCEEDED) { + // if (ex.RetryAfterMs is null) throw ex!; + //we have a ratelimit error + await Task.Delay(ex.RetryAfterMs ?? responseMessage.Headers.RetryAfter?.Delta?.Milliseconds ?? 500, cancellationToken); + request.ResetSendStatus(); + return await SendAsync(request, cancellationToken); + } + throw ex; } if (responseMessage.StatusCode == HttpStatusCode.BadGateway) { -- cgit 1.5.1