Fix multiple text attachments when forwarding to multiple recipients.

Fixes #13593
This commit is contained in:
Cody Henthorne
2024-06-21 13:50:39 -04:00
committed by Greyson Parrelli
parent b806952430
commit 16c8b88f0f
2 changed files with 13 additions and 7 deletions

View File

@@ -45,6 +45,10 @@ public class SlideDeck {
if (slide != null) slides.add(slide); if (slide != null) slides.add(slide);
} }
public SlideDeck(SlideDeck otherSlideDeck) {
slides.addAll(otherSlideDeck.slides);
}
public SlideDeck() { public SlideDeck() {
} }

View File

@@ -86,12 +86,12 @@ public final class MultiShareSender {
List<MultiShareSendResult> results = new ArrayList<>(multiShareArgs.getContactSearchKeys().size()); List<MultiShareSendResult> results = new ArrayList<>(multiShareArgs.getContactSearchKeys().size());
Context context = AppDependencies.getApplication(); Context context = AppDependencies.getApplication();
String message = multiShareArgs.getDraftText(); String message = multiShareArgs.getDraftText();
SlideDeck slideDeck; SlideDeck primarySlideDeck;
List<OutgoingMessage> storiesBatch = new LinkedList<>(); List<OutgoingMessage> storiesBatch = new LinkedList<>();
ChatColors generatedTextStoryBackgroundColor = TextStoryBackgroundColors.getRandomBackgroundColor(); ChatColors generatedTextStoryBackgroundColor = TextStoryBackgroundColors.getRandomBackgroundColor();
try { try {
slideDeck = buildSlideDeck(context, multiShareArgs); primarySlideDeck = buildSlideDeck(context, multiShareArgs);
} catch (SlideNotFoundException e) { } catch (SlideNotFoundException e) {
Log.w(TAG, "Could not create slide for media message"); Log.w(TAG, "Could not create slide for media message");
for (ContactSearchKey.RecipientSearchKey recipientSearchKey : multiShareArgs.getRecipientSearchKeys()) { for (ContactSearchKey.RecipientSearchKey recipientSearchKey : multiShareArgs.getRecipientSearchKeys()) {
@@ -105,11 +105,13 @@ public final class MultiShareSender {
for (ContactSearchKey.RecipientSearchKey recipientSearchKey : multiShareArgs.getRecipientSearchKeys()) { for (ContactSearchKey.RecipientSearchKey recipientSearchKey : multiShareArgs.getRecipientSearchKeys()) {
Recipient recipient = Recipient.resolved(recipientSearchKey.getRecipientId()); Recipient recipient = Recipient.resolved(recipientSearchKey.getRecipientId());
long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(recipient); long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(recipient);
List<Mention> mentions = getValidMentionsForRecipient(recipient, multiShareArgs.getMentions()); List<Mention> mentions = getValidMentionsForRecipient(recipient, multiShareArgs.getMentions());
MessageSendType sendType = MessageSendType.SignalMessageSendType.INSTANCE; MessageSendType sendType = MessageSendType.SignalMessageSendType.INSTANCE;
long expiresIn = TimeUnit.SECONDS.toMillis(recipient.getExpiresInSeconds()); long expiresIn = TimeUnit.SECONDS.toMillis(recipient.getExpiresInSeconds());
List<Contact> contacts = multiShareArgs.getSharedContacts(); List<Contact> contacts = multiShareArgs.getSharedContacts();
SlideDeck slideDeck = new SlideDeck(primarySlideDeck);
boolean needsSplit = message != null && boolean needsSplit = message != null &&
message.length() > sendType.calculateCharacters(message).maxPrimaryMessageSize; message.length() > sendType.calculateCharacters(message).maxPrimaryMessageSize;
boolean hasMmsMedia = !multiShareArgs.getMedia().isEmpty() || boolean hasMmsMedia = !multiShareArgs.getMedia().isEmpty() ||