Skip to content

Commit

Permalink
Make reaction and remote delete jobs GV2 ready.
Browse files Browse the repository at this point in the history
  • Loading branch information
alan-signal authored and greyson-signal committed Apr 21, 2020
1 parent 9a8094c commit 53b681e
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import org.thoughtcrime.securesms.recipients.RecipientUtil;
import org.thoughtcrime.securesms.transport.RetryLaterException;
import org.thoughtcrime.securesms.transport.UndeliverableMessageException;
import org.thoughtcrime.securesms.util.GroupUtil;
import org.whispersystems.libsignal.util.guava.Optional;
import org.whispersystems.signalservice.api.SignalServiceMessageSender;
import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair;
Expand Down Expand Up @@ -248,7 +249,7 @@ private List<SendMessageResult> deliver(OutgoingMediaMessage message, @NonNull R
rotateSenderCertificateIfNecessary();

SignalServiceMessageSender messageSender = ApplicationDependencies.getSignalServiceMessageSender();
GroupId groupId = groupRecipient.requireGroupId();
GroupId.Push groupId = groupRecipient.requireGroupId().requirePush();
Optional<byte[]> profileKey = getProfileKey(groupRecipient);
Optional<Quote> quote = getQuoteFor(message);
Optional<SignalServiceDataMessage.Sticker> sticker = getStickerFor(message);
Expand Down Expand Up @@ -308,17 +309,7 @@ private List<SendMessageResult> deliver(OutgoingMediaMessage message, @NonNull R
SignalServiceDataMessage.Builder builder = SignalServiceDataMessage.newBuilder()
.withTimestamp(message.getSentTimeMillis());

if (groupId.isV2()) {
GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context);
GroupDatabase.GroupRecord groupRecord = groupDatabase.requireGroup(groupId);
GroupDatabase.V2GroupProperties v2GroupProperties = groupRecord.requireV2GroupProperties();
SignalServiceGroupV2 group = SignalServiceGroupV2.newBuilder(v2GroupProperties.getGroupMasterKey())
.withRevision(v2GroupProperties.getGroupRevision())
.build();
builder.asGroupMessage(group);
} else {
builder.asGroupMessage(new SignalServiceGroup(groupId.getDecodedId()));
}
GroupUtil.setDataMessageGroupContext(context, builder, groupId);

SignalServiceDataMessage groupMessage = builder.withAttachments(attachmentPointers)
.withBody(message.getBody())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.recipients.RecipientUtil;
import org.thoughtcrime.securesms.transport.RetryLaterException;
import org.thoughtcrime.securesms.util.GroupUtil;
import org.whispersystems.libsignal.util.guava.Optional;
import org.whispersystems.signalservice.api.SignalServiceMessageSender;
import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair;
import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException;
import org.whispersystems.signalservice.api.messages.SendMessageResult;
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
import org.whispersystems.signalservice.api.messages.SignalServiceGroup;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;

import java.io.IOException;
Expand Down Expand Up @@ -216,7 +216,7 @@ public void onFailure() {
.withReaction(buildReaction(context, reaction, remove, targetAuthor, targetSentTimestamp));

if (conversationRecipient.isGroup()) {
dataMessage.asGroupMessage(new SignalServiceGroup(conversationRecipient.requireGroupId().getDecodedId()));
GroupUtil.setDataMessageGroupContext(context, dataMessage, conversationRecipient.requireGroupId().requirePush());
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import org.thoughtcrime.securesms.database.MessagingDatabase;
import org.thoughtcrime.securesms.database.NoSuchMessageException;
import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.database.model.ReactionRecord;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.jobmanager.Data;
import org.thoughtcrime.securesms.jobmanager.Job;
Expand All @@ -21,13 +20,13 @@
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.recipients.RecipientUtil;
import org.thoughtcrime.securesms.transport.RetryLaterException;
import org.thoughtcrime.securesms.util.GroupUtil;
import org.whispersystems.libsignal.util.guava.Optional;
import org.whispersystems.signalservice.api.SignalServiceMessageSender;
import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair;
import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException;
import org.whispersystems.signalservice.api.messages.SendMessageResult;
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
import org.whispersystems.signalservice.api.messages.SignalServiceGroup;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;

import java.io.IOException;
Expand Down Expand Up @@ -173,7 +172,7 @@ public void onFailure() {
.withRemoteDelete(new SignalServiceDataMessage.RemoteDelete(targetSentTimestamp));

if (conversationRecipient.isGroup()) {
dataMessage.asGroupMessage(new SignalServiceGroup(conversationRecipient.requireGroupId().getDecodedId()));
GroupUtil.setDataMessageGroupContext(context, dataMessage, conversationRecipient.requireGroupId().requirePush());
}

List<SendMessageResult> results = messageSender.sendMessage(addresses, unidentifiedAccess, false, dataMessage.build());
Expand Down
21 changes: 21 additions & 0 deletions app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientForeverObserver;
import org.whispersystems.libsignal.util.guava.Optional;
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
import org.whispersystems.signalservice.api.messages.SignalServiceGroup;
import org.whispersystems.signalservice.api.messages.SignalServiceGroupContext;
import org.whispersystems.signalservice.api.messages.SignalServiceGroupV2;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
import org.whispersystems.signalservice.api.util.UuidUtil;

Expand Down Expand Up @@ -106,6 +109,24 @@ public static Optional<OutgoingGroupMediaMessage> createGroupLeaveMessage(@NonNu
}
}

@WorkerThread
public static void setDataMessageGroupContext(@NonNull Context context,
@NonNull SignalServiceDataMessage.Builder dataMessageBuilder,
@NonNull GroupId.Push groupId)
{
if (groupId.isV2()) {
GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context);
GroupDatabase.GroupRecord groupRecord = groupDatabase.requireGroup(groupId);
GroupDatabase.V2GroupProperties v2GroupProperties = groupRecord.requireV2GroupProperties();
SignalServiceGroupV2 group = SignalServiceGroupV2.newBuilder(v2GroupProperties.getGroupMasterKey())
.withRevision(v2GroupProperties.getGroupRevision())
.build();
dataMessageBuilder.asGroupMessage(group);
} else {
dataMessageBuilder.asGroupMessage(new SignalServiceGroup(groupId.getDecodedId()));
}
}

public static class GroupDescription {

@NonNull private final Context context;
Expand Down

0 comments on commit 53b681e

Please sign in to comment.