Fix bug when sending to a single contact and single dlist at the same time.
This commit is contained in:
parent
36c882e318
commit
d2c2952ccf
2 changed files with 22 additions and 18 deletions
|
@ -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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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,10 +344,11 @@ 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,
|
||||||
|
@ -360,13 +362,14 @@ public class MessageSender {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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++) {
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue