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

View File

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

View File

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

View File

@@ -825,6 +825,7 @@ public final class SignalServiceContent {
SignalServiceProtos.SyncMessage.Sent sentContent = content.getSent(); SignalServiceProtos.SyncMessage.Sent sentContent = content.getSent();
Optional<SignalServiceDataMessage> dataMessage = sentContent.hasMessage() ? Optional.of(createSignalServiceDataMessage(metadata, sentContent.getMessage())) : Optional.empty(); 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<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<SignalServiceAddress> address = SignalServiceAddress.isValidAddress(sentContent.getDestinationUuid())
? Optional.of(new SignalServiceAddress(ServiceId.parseOrThrow(sentContent.getDestinationUuid()), sentContent.getDestinationE164())) ? Optional.of(new SignalServiceAddress(ServiceId.parseOrThrow(sentContent.getDestinationUuid()), sentContent.getDestinationE164()))
: Optional.empty(); : Optional.empty();
@@ -856,7 +857,8 @@ public final class SignalServiceContent {
unidentifiedStatuses, unidentifiedStatuses,
sentContent.getIsRecipientUpdate(), sentContent.getIsRecipientUpdate(),
storyMessage, storyMessage,
recipientManifest)); recipientManifest,
editMessage));
} }
if (content.hasRequest()) { 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.SignalServiceDataMessage;
import org.whispersystems.signalservice.api.messages.SignalServiceEditMessage;
import org.whispersystems.signalservice.api.messages.SignalServiceStoryMessage; import org.whispersystems.signalservice.api.messages.SignalServiceStoryMessage;
import org.whispersystems.signalservice.api.messages.SignalServiceStoryMessageRecipient; import org.whispersystems.signalservice.api.messages.SignalServiceStoryMessageRecipient;
import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.push.ServiceId;
@@ -29,6 +30,7 @@ public class SentTranscriptMessage {
private final boolean isRecipientUpdate; private final boolean isRecipientUpdate;
private final Optional<SignalServiceStoryMessage> storyMessage; private final Optional<SignalServiceStoryMessage> storyMessage;
private final Set<SignalServiceStoryMessageRecipient> storyMessageRecipients; private final Set<SignalServiceStoryMessageRecipient> storyMessageRecipients;
private final Optional<SignalServiceEditMessage> editMessage;
public SentTranscriptMessage(Optional<SignalServiceAddress> destination, public SentTranscriptMessage(Optional<SignalServiceAddress> destination,
long timestamp, long timestamp,
@@ -37,7 +39,8 @@ public class SentTranscriptMessage {
Map<ServiceId, Boolean> unidentifiedStatus, Map<ServiceId, Boolean> unidentifiedStatus,
boolean isRecipientUpdate, boolean isRecipientUpdate,
Optional<SignalServiceStoryMessage> storyMessage, Optional<SignalServiceStoryMessage> storyMessage,
Set<SignalServiceStoryMessageRecipient> storyMessageRecipients) Set<SignalServiceStoryMessageRecipient> storyMessageRecipients,
Optional<SignalServiceEditMessage> editMessage)
{ {
this.destination = destination; this.destination = destination;
this.timestamp = timestamp; this.timestamp = timestamp;
@@ -48,6 +51,7 @@ public class SentTranscriptMessage {
this.isRecipientUpdate = isRecipientUpdate; this.isRecipientUpdate = isRecipientUpdate;
this.storyMessage = storyMessage; this.storyMessage = storyMessage;
this.storyMessageRecipients = storyMessageRecipients; this.storyMessageRecipients = storyMessageRecipients;
this.editMessage = editMessage;
} }
public Optional<SignalServiceAddress> getDestination() { public Optional<SignalServiceAddress> getDestination() {
@@ -66,6 +70,10 @@ public class SentTranscriptMessage {
return message; return message;
} }
public Optional<SignalServiceEditMessage> getEditMessage() {
return editMessage;
}
public Optional<SignalServiceStoryMessage> getStoryMessage() { public Optional<SignalServiceStoryMessage> getStoryMessage() {
return storyMessage; return storyMessage;
} }