From 7d6a87c825e307f032db001a8575918b7795ffac Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 20 Feb 2024 12:13:54 -0500 Subject: [PATCH] Attempt to fix missing session crash for resends. --- .../securesms/jobs/ResendMessageJob.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ResendMessageJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ResendMessageJob.java index d3e93b301d..a60d2ecbcd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ResendMessageJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ResendMessageJob.java @@ -131,6 +131,8 @@ public class ResendMessageJob extends BaseJob { ThreadUtil.sleep(10000); } + Log.i(TAG, "[" + sentTimestamp + " ] Resending message to " + recipientId + " (urgent: " + urgent + ", contentHint: " + contentHint.name() + ", groupId: " + groupId + ", distributionId: " + distributionId + ")"); + SignalServiceMessageSender messageSender = ApplicationDependencies.getSignalServiceMessageSender(); Recipient recipient = Recipient.resolved(recipientId); @@ -174,7 +176,20 @@ public class ResendMessageJob extends BaseJob { contentToSend = contentToSend.newBuilder().senderKeyDistributionMessage(distributionBytes).build(); } - SendMessageResult result = messageSender.resendContent(address, access, sentTimestamp, contentToSend, contentHint, Optional.ofNullable(groupId).map(GroupId::getDecodedId), urgent); + SendMessageResult result; + + try { + result = messageSender.resendContent(address, access, sentTimestamp, contentToSend, contentHint, Optional.ofNullable(groupId).map(GroupId::getDecodedId), urgent); + } catch (IllegalStateException e) { + Log.w(TAG, "Failed to resend content. Archiving session and trying again.", e); + ApplicationDependencies.getProtocolStore().aci().sessions().archiveSessions(recipientId, SignalServiceAddress.DEFAULT_DEVICE_ID); + ApplicationDependencies.getProtocolStore().aci().sessions().archiveSiblingSessions(recipient.requireServiceId().toProtocolAddress(SignalServiceAddress.DEFAULT_DEVICE_ID)); + ApplicationDependencies.getProtocolStore().pni().sessions().archiveSessions(recipientId, SignalServiceAddress.DEFAULT_DEVICE_ID); + ApplicationDependencies.getProtocolStore().pni().sessions().archiveSiblingSessions(recipient.requireServiceId().toProtocolAddress(SignalServiceAddress.DEFAULT_DEVICE_ID)); + SignalDatabase.senderKeyShared().deleteAllFor(recipientId); + + result = messageSender.resendContent(address, access, sentTimestamp, contentToSend, contentHint, Optional.ofNullable(groupId).map(GroupId::getDecodedId), urgent); + } if (result.isSuccess() && distributionId != null) { List addresses = result.getSuccess()