mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-23 04:28:35 +00:00
Fix edit message when editing message sent to self.
This commit is contained in:
@@ -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) {
|
||||||
SendMessageResult result = messageSender.sendEditMessage(address, UnidentifiedAccessUtil.getAccessFor(context, messageRecipient), ContentHint.RESENDABLE, mediaMessage, IndividualSendEvents.EMPTY, message.isUrgent(), originalEditedMessage.getDateSent());
|
if (Util.equals(SignalStore.account().getAci(), address.getServiceId())) {
|
||||||
SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId), false);
|
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 result.getSuccess().isUnidentified();
|
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())) {
|
} 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);
|
||||||
|
|||||||
@@ -81,7 +81,8 @@ class MultiDeviceStorySendSyncJob private constructor(parameters: Parameters, pr
|
|||||||
emptyMap(),
|
emptyMap(),
|
||||||
true,
|
true,
|
||||||
Optional.empty(),
|
Optional.empty(),
|
||||||
recipientsSet
|
recipientsSet,
|
||||||
|
Optional.empty()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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()) {
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user