From d2c2952ccfe851f73d81a0b505a5cdf137a3206c Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Tue, 26 Jul 2022 12:41:12 -0300 Subject: [PATCH] Fix bug when sending to a single contact and single dlist at the same time. --- .../mediasend/v2/MediaSelectionRepository.kt | 5 +-- .../securesms/sms/MessageSender.java | 35 ++++++++++--------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt index 10e5fffb2d..e2d782e774 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt @@ -342,14 +342,15 @@ class MediaSelectionRepository(context: Context) { MessageSender.sendMediaBroadcast( context, nonStoryMessages, - preUploadResults + preUploadResults, + true ) } if (storyPreUploadMessages.isNotEmpty()) { Log.d(TAG, "Sending ${storyPreUploadMessages.size} preload messages to stories") storyPreUploadMessages.forEach { (preUploadResult, messages) -> - MessageSender.sendMediaBroadcast(context, messages, Collections.singleton(preUploadResult)) + MessageSender.sendMediaBroadcast(context, messages, Collections.singleton(preUploadResult), nonStoryMessages.isEmpty()) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java index 9a74037d40..f685269610 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java @@ -329,9 +329,10 @@ public class MessageSender { public static void sendMediaBroadcast(@NonNull Context context, @NonNull List messages, - @NonNull Collection preUploadResults) + @NonNull Collection preUploadResults, + boolean overwritePreUploadMessageIds) { - Log.i(TAG, "Sending media broadcast to " + Stream.of(messages).map(m -> m.getRecipient().getId()).toList()); + Log.i(TAG, "Sending media broadcast (overwrite: " + overwritePreUploadMessageIds + ") to " + Stream.of(messages).map(m -> m.getRecipient().getId()).toList()); Preconditions.checkArgument(messages.size() > 0, "No messages!"); Preconditions.checkArgument(Stream.of(messages).allMatch(m -> m.getAttachments().isEmpty()), "Messages can't have attachments! They should be pre-uploaded."); @@ -343,31 +344,33 @@ public class MessageSender { List preUploadJobIds = Stream.of(preUploadResults).map(PreUploadResult::getJobIds).flatMap(Stream::of).toList(); List messageIds = new ArrayList<>(messages.size()); List messageDependsOnIds = new ArrayList<>(preUploadJobIds); + OutgoingSecureMediaMessage primaryMessage = messages.get(0); mmsDatabase.beginTransaction(); try { - OutgoingSecureMediaMessage primaryMessage = messages.get(0); - long primaryThreadId = threadDatabase.getOrCreateThreadIdFor(primaryMessage.getRecipient(), primaryMessage.getDistributionType()); - long primaryMessageId = mmsDatabase.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, primaryMessage.getRecipient(), primaryMessage, primaryThreadId), - primaryThreadId, - false, - null); + if (overwritePreUploadMessageIds) { + long primaryThreadId = threadDatabase.getOrCreateThreadIdFor(primaryMessage.getRecipient(), primaryMessage.getDistributionType()); + long primaryMessageId = mmsDatabase.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, primaryMessage.getRecipient(), primaryMessage, primaryThreadId), + primaryThreadId, + false, + null); - attachmentDatabase.updateMessageId(preUploadAttachmentIds, primaryMessageId, primaryMessage.getStoryType().isStory()); - if (primaryMessage.getStoryType() != StoryType.NONE) { - for (final AttachmentId preUploadAttachmentId : preUploadAttachmentIds) { - attachmentDatabase.updateAttachmentCaption(preUploadAttachmentId, primaryMessage.getBody()); + attachmentDatabase.updateMessageId(preUploadAttachmentIds, primaryMessageId, primaryMessage.getStoryType().isStory()); + if (primaryMessage.getStoryType() != StoryType.NONE) { + for (final AttachmentId preUploadAttachmentId : preUploadAttachmentIds) { + attachmentDatabase.updateAttachmentCaption(preUploadAttachmentId, primaryMessage.getBody()); + } } + messageIds.add(primaryMessageId); } - messageIds.add(primaryMessageId); List preUploadAttachments = Stream.of(preUploadAttachmentIds) .map(attachmentDatabase::getAttachment) .toList(); if (messages.size() > 0) { - List secondaryMessages = messages.subList(1, messages.size()); - List> attachmentCopies = new ArrayList<>(); + List secondaryMessages = overwritePreUploadMessageIds ? messages.subList(1, messages.size()) : messages; + List> attachmentCopies = new ArrayList<>(); for (int i = 0; i < preUploadAttachmentIds.size(); i++) { attachmentCopies.add(new ArrayList<>(messages.size())); @@ -389,7 +392,7 @@ public class MessageSender { attachmentDatabase.updateMessageId(attachmentIds, messageId, secondaryMessage.getStoryType().isStory()); if (primaryMessage.getStoryType() != StoryType.NONE) { - for (final AttachmentId preUploadAttachmentId : preUploadAttachmentIds) { + for (final AttachmentId preUploadAttachmentId : attachmentIds) { attachmentDatabase.updateAttachmentCaption(preUploadAttachmentId, primaryMessage.getBody()); } }