Fix bug when sending to a single contact and single dlist at the same time.

This commit is contained in:
Alex Hart 2022-07-26 12:41:12 -03:00 committed by Cody Henthorne
parent 36c882e318
commit d2c2952ccf
2 changed files with 22 additions and 18 deletions

View file

@ -342,14 +342,15 @@ class MediaSelectionRepository(context: Context) {
MessageSender.sendMediaBroadcast( MessageSender.sendMediaBroadcast(
context, context,
nonStoryMessages, nonStoryMessages,
preUploadResults preUploadResults,
true
) )
} }
if (storyPreUploadMessages.isNotEmpty()) { if (storyPreUploadMessages.isNotEmpty()) {
Log.d(TAG, "Sending ${storyPreUploadMessages.size} preload messages to stories") Log.d(TAG, "Sending ${storyPreUploadMessages.size} preload messages to stories")
storyPreUploadMessages.forEach { (preUploadResult, messages) -> storyPreUploadMessages.forEach { (preUploadResult, messages) ->
MessageSender.sendMediaBroadcast(context, messages, Collections.singleton(preUploadResult)) MessageSender.sendMediaBroadcast(context, messages, Collections.singleton(preUploadResult), nonStoryMessages.isEmpty())
} }
} }

View file

@ -329,9 +329,10 @@ public class MessageSender {
public static void sendMediaBroadcast(@NonNull Context context, public static void sendMediaBroadcast(@NonNull Context context,
@NonNull List<OutgoingSecureMediaMessage> messages, @NonNull List<OutgoingSecureMediaMessage> messages,
@NonNull Collection<PreUploadResult> preUploadResults) @NonNull Collection<PreUploadResult> 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(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."); 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<String> preUploadJobIds = Stream.of(preUploadResults).map(PreUploadResult::getJobIds).flatMap(Stream::of).toList(); List<String> preUploadJobIds = Stream.of(preUploadResults).map(PreUploadResult::getJobIds).flatMap(Stream::of).toList();
List<Long> messageIds = new ArrayList<>(messages.size()); List<Long> messageIds = new ArrayList<>(messages.size());
List<String> messageDependsOnIds = new ArrayList<>(preUploadJobIds); List<String> messageDependsOnIds = new ArrayList<>(preUploadJobIds);
OutgoingSecureMediaMessage primaryMessage = messages.get(0);
mmsDatabase.beginTransaction(); mmsDatabase.beginTransaction();
try { try {
OutgoingSecureMediaMessage primaryMessage = messages.get(0); if (overwritePreUploadMessageIds) {
long primaryThreadId = threadDatabase.getOrCreateThreadIdFor(primaryMessage.getRecipient(), primaryMessage.getDistributionType()); long primaryThreadId = threadDatabase.getOrCreateThreadIdFor(primaryMessage.getRecipient(), primaryMessage.getDistributionType());
long primaryMessageId = mmsDatabase.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, primaryMessage.getRecipient(), primaryMessage, primaryThreadId), long primaryMessageId = mmsDatabase.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, primaryMessage.getRecipient(), primaryMessage, primaryThreadId),
primaryThreadId, primaryThreadId,
false, false,
null); null);
attachmentDatabase.updateMessageId(preUploadAttachmentIds, primaryMessageId, primaryMessage.getStoryType().isStory()); attachmentDatabase.updateMessageId(preUploadAttachmentIds, primaryMessageId, primaryMessage.getStoryType().isStory());
if (primaryMessage.getStoryType() != StoryType.NONE) { if (primaryMessage.getStoryType() != StoryType.NONE) {
for (final AttachmentId preUploadAttachmentId : preUploadAttachmentIds) { for (final AttachmentId preUploadAttachmentId : preUploadAttachmentIds) {
attachmentDatabase.updateAttachmentCaption(preUploadAttachmentId, primaryMessage.getBody()); attachmentDatabase.updateAttachmentCaption(preUploadAttachmentId, primaryMessage.getBody());
}
} }
messageIds.add(primaryMessageId);
} }
messageIds.add(primaryMessageId);
List<DatabaseAttachment> preUploadAttachments = Stream.of(preUploadAttachmentIds) List<DatabaseAttachment> preUploadAttachments = Stream.of(preUploadAttachmentIds)
.map(attachmentDatabase::getAttachment) .map(attachmentDatabase::getAttachment)
.toList(); .toList();
if (messages.size() > 0) { if (messages.size() > 0) {
List<OutgoingSecureMediaMessage> secondaryMessages = messages.subList(1, messages.size()); List<OutgoingSecureMediaMessage> secondaryMessages = overwritePreUploadMessageIds ? messages.subList(1, messages.size()) : messages;
List<List<AttachmentId>> attachmentCopies = new ArrayList<>(); List<List<AttachmentId>> attachmentCopies = new ArrayList<>();
for (int i = 0; i < preUploadAttachmentIds.size(); i++) { for (int i = 0; i < preUploadAttachmentIds.size(); i++) {
attachmentCopies.add(new ArrayList<>(messages.size())); attachmentCopies.add(new ArrayList<>(messages.size()));
@ -389,7 +392,7 @@ public class MessageSender {
attachmentDatabase.updateMessageId(attachmentIds, messageId, secondaryMessage.getStoryType().isStory()); attachmentDatabase.updateMessageId(attachmentIds, messageId, secondaryMessage.getStoryType().isStory());
if (primaryMessage.getStoryType() != StoryType.NONE) { if (primaryMessage.getStoryType() != StoryType.NONE) {
for (final AttachmentId preUploadAttachmentId : preUploadAttachmentIds) { for (final AttachmentId preUploadAttachmentId : attachmentIds) {
attachmentDatabase.updateAttachmentCaption(preUploadAttachmentId, primaryMessage.getBody()); attachmentDatabase.updateAttachmentCaption(preUploadAttachmentId, primaryMessage.getBody());
} }
} }