Fix edit message when editing message sent to self.

This commit is contained in:
Clark
2023-04-24 11:19:07 -04:00
committed by GitHub
parent a11c34d1f6
commit 9cb8fc8ef5
5 changed files with 51 additions and 8 deletions

View File

@@ -42,6 +42,7 @@ import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException;
import org.whispersystems.signalservice.api.messages.SendMessageResult;
import org.whispersystems.signalservice.api.messages.SignalServiceAttachment;
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
import org.whispersystems.signalservice.api.messages.SignalServiceEditMessage;
import org.whispersystems.signalservice.api.messages.SignalServicePreview;
import org.whispersystems.signalservice.api.messages.shared.SharedContact;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
@@ -288,10 +289,18 @@ public class IndividualSendJob extends PushSendJob {
SignalServiceDataMessage mediaMessage = mediaMessageBuilder.build();
if (originalEditedMessage != null) {
if (Util.equals(SignalStore.account().getAci(), address.getServiceId())) {
Optional<UnidentifiedAccessPair> syncAccess = UnidentifiedAccessUtil.getAccessForSync(context);
SendMessageResult result = messageSender.sendSelfSyncEditMessage(new SignalServiceEditMessage(originalEditedMessage.getDateSent(), mediaMessage));
SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId), false);
return syncAccess.isPresent();
} else {
SendMessageResult result = messageSender.sendEditMessage(address, UnidentifiedAccessUtil.getAccessFor(context, messageRecipient), ContentHint.RESENDABLE, mediaMessage, IndividualSendEvents.EMPTY, message.isUrgent(), originalEditedMessage.getDateSent());
SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId), false);
return result.getSuccess().isUnidentified();
}
} else if (Util.equals(SignalStore.account().getAci(), address.getServiceId())) {
Optional<UnidentifiedAccessPair> syncAccess = UnidentifiedAccessUtil.getAccessForSync(context);
SendMessageResult result = messageSender.sendSyncMessage(mediaMessage);

View File

@@ -81,7 +81,8 @@ class MultiDeviceStorySendSyncJob private constructor(parameters: Parameters, pr
emptyMap(),
true,
Optional.empty(),
recipientsSet
recipientsSet,
Optional.empty()
)
}

View File

@@ -644,6 +644,12 @@ public class SignalServiceMessageSender {
return sendSyncMessage(createSelfSendSyncMessage(dataMessage), Optional.empty());
}
public SendMessageResult sendSelfSyncEditMessage(SignalServiceEditMessage editMessage)
throws IOException, UntrustedIdentityException
{
return sendSyncMessage(createSelfSendSyncEditMessage(editMessage), Optional.empty());
}
public SendMessageResult sendSyncMessage(SignalServiceSyncMessage message, Optional<UnidentifiedAccessPair> unidentifiedAccess)
throws IOException, UntrustedIdentityException
{
@@ -958,6 +964,8 @@ public class SignalServiceMessageSender {
return createStoryContent(transcriptMessage.getStoryMessage().get());
} else if (transcriptMessage.getDataMessage().isPresent()) {
return createMessageContent(transcriptMessage.getDataMessage().get());
} else if (transcriptMessage.getEditMessage().isPresent()) {
return createEditMessageContent(transcriptMessage.getEditMessage().get());
} else {
return null;
}
@@ -1790,7 +1798,8 @@ public class SignalServiceMessageSender {
Collections.singletonMap(localAddress.getServiceId(), false),
isRecipientUpdate,
Optional.of(message),
manifest);
manifest,
Optional.empty());
return SignalServiceSyncMessage.forSentTranscript(transcript);
}
@@ -1803,7 +1812,21 @@ public class SignalServiceMessageSender {
Collections.singletonMap(localAddress.getServiceId(), false),
false,
Optional.empty(),
Collections.emptySet());
Collections.emptySet(),
Optional.empty());
return SignalServiceSyncMessage.forSentTranscript(transcript);
}
private SignalServiceSyncMessage createSelfSendSyncEditMessage(SignalServiceEditMessage message) {
SentTranscriptMessage transcript = new SentTranscriptMessage(Optional.of(localAddress),
message.getDataMessage().getTimestamp(),
Optional.empty(),
message.getDataMessage().getExpiresInSeconds(),
Collections.singletonMap(localAddress.getServiceId(), false),
false,
Optional.empty(),
Collections.emptySet(),
Optional.of(message));
return SignalServiceSyncMessage.forSentTranscript(transcript);
}

View File

@@ -825,6 +825,7 @@ public final class SignalServiceContent {
SignalServiceProtos.SyncMessage.Sent sentContent = content.getSent();
Optional<SignalServiceDataMessage> dataMessage = sentContent.hasMessage() ? Optional.of(createSignalServiceDataMessage(metadata, sentContent.getMessage())) : Optional.empty();
Optional<SignalServiceStoryMessage> storyMessage = sentContent.hasStoryMessage() ? Optional.of(createStoryMessage(sentContent.getStoryMessage())) : Optional.empty();
Optional<SignalServiceEditMessage> editMessage = sentContent.hasEditMessage() ? Optional.of(createEditMessage(metadata, sentContent.getEditMessage())) : Optional.empty();
Optional<SignalServiceAddress> address = SignalServiceAddress.isValidAddress(sentContent.getDestinationUuid())
? Optional.of(new SignalServiceAddress(ServiceId.parseOrThrow(sentContent.getDestinationUuid()), sentContent.getDestinationE164()))
: Optional.empty();
@@ -856,7 +857,8 @@ public final class SignalServiceContent {
unidentifiedStatuses,
sentContent.getIsRecipientUpdate(),
storyMessage,
recipientManifest));
recipientManifest,
editMessage));
}
if (content.hasRequest()) {

View File

@@ -8,6 +8,7 @@ package org.whispersystems.signalservice.api.messages.multidevice;
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
import org.whispersystems.signalservice.api.messages.SignalServiceEditMessage;
import org.whispersystems.signalservice.api.messages.SignalServiceStoryMessage;
import org.whispersystems.signalservice.api.messages.SignalServiceStoryMessageRecipient;
import org.whispersystems.signalservice.api.push.ServiceId;
@@ -29,6 +30,7 @@ public class SentTranscriptMessage {
private final boolean isRecipientUpdate;
private final Optional<SignalServiceStoryMessage> storyMessage;
private final Set<SignalServiceStoryMessageRecipient> storyMessageRecipients;
private final Optional<SignalServiceEditMessage> editMessage;
public SentTranscriptMessage(Optional<SignalServiceAddress> destination,
long timestamp,
@@ -37,7 +39,8 @@ public class SentTranscriptMessage {
Map<ServiceId, Boolean> unidentifiedStatus,
boolean isRecipientUpdate,
Optional<SignalServiceStoryMessage> storyMessage,
Set<SignalServiceStoryMessageRecipient> storyMessageRecipients)
Set<SignalServiceStoryMessageRecipient> storyMessageRecipients,
Optional<SignalServiceEditMessage> editMessage)
{
this.destination = destination;
this.timestamp = timestamp;
@@ -48,6 +51,7 @@ public class SentTranscriptMessage {
this.isRecipientUpdate = isRecipientUpdate;
this.storyMessage = storyMessage;
this.storyMessageRecipients = storyMessageRecipients;
this.editMessage = editMessage;
}
public Optional<SignalServiceAddress> getDestination() {
@@ -66,6 +70,10 @@ public class SentTranscriptMessage {
return message;
}
public Optional<SignalServiceEditMessage> getEditMessage() {
return editMessage;
}
public Optional<SignalServiceStoryMessage> getStoryMessage() {
return storyMessage;
}