Merge pull request #1553 from famedly/nico/handle-send-event-ratelimits

fix: Wait for rate limit to pass while sending messages
This commit is contained in:
Nicolas Werner 2023-09-22 10:28:20 +02:00 committed by GitHub
commit 8b6bc1212e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 14 additions and 3 deletions

View File

@ -1100,7 +1100,16 @@ class Room {
txid: messageID,
);
} catch (e, s) {
if (e is MatrixException || DateTime.now().isAfter(timeoutDate)) {
if (e is MatrixException &&
e.retryAfterMs != null &&
!DateTime.now()
.add(Duration(milliseconds: e.retryAfterMs!))
.isAfter(timeoutDate)) {
Logs().w(
'Ratelimited while sending message, waiting for ${e.retryAfterMs}ms');
await Future.delayed(Duration(milliseconds: e.retryAfterMs!));
} else if (e is MatrixException ||
DateTime.now().isAfter(timeoutDate)) {
Logs().w('Problem while sending message', e, s);
syncUpdate.rooms!.join!.values.first.timeline!.events!.first
.unsigned![messageSendingStatusKey] = EventStatus.error.intValue;
@ -1108,9 +1117,11 @@ class Room {
completer.complete();
_sendingQueue.remove(completer);
return null;
} else {
Logs()
.w('Problem while sending message: $e Try again in 1 seconds...');
await Future.delayed(Duration(seconds: 1));
}
Logs().w('Problem while sending message: $e Try again in 1 seconds...');
await Future.delayed(Duration(seconds: 1));
}
}
syncUpdate.rooms!.join!.values.first.timeline!.events!.first