From 5197c614748cecd3b705d9f7fde551e0bce2cba7 Mon Sep 17 00:00:00 2001 From: Frank Stack <294698533+FrankBStack@users.noreply.github.com> Date: Sun, 6 Sep 2026 01:35:46 -0400 Subject: [PATCH] Don't mark received messages as failed on receipt errors Delivered and read receipts reuse the UUID of the message they're acknowledging, so when a receipt is rejected the error comes back keyed to a message we didn't send. That was flagging incoming messages with a send failure. Ignore errors for messages that aren't from us. --- lib/services/rustpush/rustpush_service.dart | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/services/rustpush/rustpush_service.dart b/lib/services/rustpush/rustpush_service.dart index 6deb3c1e42..b9806ccbd8 100644 --- a/lib/services/rustpush/rustpush_service.dart +++ b/lib/services/rustpush/rustpush_service.dart @@ -3558,8 +3558,14 @@ class RustPushService extends GetxService { if (myMsg.message is api.Message_Error) { var message = myMsg.message as api.Message_Error; var mistakeFor = Message.findOne(guid: message.field0.forUuid); - // if we've been delivered, well :shrug: probably some stray device complaining + // if we've been delivered, well :shrug: probably some stray device complaining if (mistakeFor == null || mistakeFor.isDelivered) return; // multiple errors will likely come in, at which point guid will be bad. + // delivered/read receipts reuse the original message's UUID (see markCertified/markRead), so an error + // for a message we didn't author is a rejected receipt, not a send failure. Don't flag the received message. + if (mistakeFor.isFromMe != true) { + Logger.debug("Ignoring error ${message.field0.statusStr} for receipt on ${message.field0.forUuid}"); + return; + } // do not flag 300 error messages for self handles var myHandles = (await api.getHandles(state: pushService.state!.client)); if (!myHandles.contains(myMsg.sender)) return;