mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-22 20:18:36 +00:00
Fix edit message when sending via legacy path.
This commit is contained in:
@@ -532,9 +532,13 @@ public final class GroupSendUtil {
|
||||
return Collections.singletonList(result);
|
||||
} else {
|
||||
LegacyGroupEvents listener = relatedMessageId != null ? new LegacyMetricEventListener(relatedMessageId.getId()) : LegacyGroupEvents.EMPTY;
|
||||
if (editMessage != null) {
|
||||
return messageSender.sendEditMessage(targets, access, isRecipientUpdate, contentHint, message, listener, partialListener, cancelationSignal, urgent, editMessage.getTargetSentTimestamp());
|
||||
} else {
|
||||
return messageSender.sendDataMessage(targets, access, isRecipientUpdate, contentHint, message, listener, partialListener, cancelationSignal, urgent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull ContentHint getContentHint() {
|
||||
|
||||
@@ -639,6 +639,58 @@ public class SignalServiceMessageSender {
|
||||
return results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends an edit message to a group using client-side fanout.
|
||||
*
|
||||
* @param partialListener A listener that will be called when an individual send is completed. Will be invoked on an arbitrary background thread, *not*
|
||||
* the calling thread.
|
||||
*/
|
||||
public List<SendMessageResult> sendEditMessage(List<SignalServiceAddress> recipients,
|
||||
List<Optional<UnidentifiedAccessPair>> unidentifiedAccess,
|
||||
boolean isRecipientUpdate,
|
||||
ContentHint contentHint,
|
||||
SignalServiceDataMessage message,
|
||||
LegacyGroupEvents sendEvents,
|
||||
PartialSendCompleteListener partialListener,
|
||||
CancelationSignal cancelationSignal,
|
||||
boolean urgent,
|
||||
long targetSentTimestamp)
|
||||
throws IOException, UntrustedIdentityException
|
||||
{
|
||||
Log.d(TAG, "[" + message.getTimestamp() + "] Sending a edit message to " + recipients.size() + " recipients.");
|
||||
|
||||
Content content = createEditMessageContent(new SignalServiceEditMessage(targetSentTimestamp, message));
|
||||
EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, contentHint, message.getGroupId());
|
||||
long timestamp = message.getTimestamp();
|
||||
List<SendMessageResult> results = sendMessage(recipients, getTargetUnidentifiedAccess(unidentifiedAccess), timestamp, envelopeContent, false, partialListener, cancelationSignal, urgent, false);
|
||||
boolean needsSyncInResults = false;
|
||||
|
||||
sendEvents.onMessageSent();
|
||||
|
||||
for (SendMessageResult result : results) {
|
||||
if (result.getSuccess() != null && result.getSuccess().isNeedsSync()) {
|
||||
needsSyncInResults = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (needsSyncInResults || aciStore.isMultiDevice()) {
|
||||
Optional<SignalServiceAddress> recipient = Optional.empty();
|
||||
if (!message.getGroupContext().isPresent() && recipients.size() == 1) {
|
||||
recipient = Optional.of(recipients.get(0));
|
||||
}
|
||||
|
||||
Content syncMessage = createMultiDeviceSentTranscriptContent(content, recipient, timestamp, results, isRecipientUpdate, Collections.emptySet());
|
||||
EnvelopeContent syncMessageContent = EnvelopeContent.encrypted(syncMessage, ContentHint.IMPLICIT, Optional.empty());
|
||||
|
||||
sendMessage(localAddress, Optional.empty(), timestamp, syncMessageContent, false, null, false, false);
|
||||
}
|
||||
|
||||
sendEvents.onSyncMessageSent();
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
public SendMessageResult sendSyncMessage(SignalServiceDataMessage dataMessage)
|
||||
throws IOException, UntrustedIdentityException
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user