From 53b681ef676ad8f1715555709c475feef8ca95b1 Mon Sep 17 00:00:00 2001 From: Alan Evans Date: Mon, 20 Apr 2020 13:41:03 -0300 Subject: [PATCH] Make reaction and remote delete jobs GV2 ready. --- .../securesms/jobs/PushGroupSendJob.java | 15 +++---------- .../securesms/jobs/ReactionSendJob.java | 4 ++-- .../securesms/jobs/RemoteDeleteSendJob.java | 5 ++--- .../securesms/util/GroupUtil.java | 21 +++++++++++++++++++ 4 files changed, 28 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java index 0aa51f25d0..a3371e82fd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java @@ -36,6 +36,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId; 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; @@ -248,7 +249,7 @@ public class PushGroupSendJob extends PushSendJob { rotateSenderCertificateIfNecessary(); SignalServiceMessageSender messageSender = ApplicationDependencies.getSignalServiceMessageSender(); - GroupId groupId = groupRecipient.requireGroupId(); + GroupId.Push groupId = groupRecipient.requireGroupId().requirePush(); Optional profileKey = getProfileKey(groupRecipient); Optional quote = getQuoteFor(message); Optional sticker = getStickerFor(message); @@ -308,17 +309,7 @@ public class PushGroupSendJob extends PushSendJob { 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()) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java index 51ff0af189..7cb13110cb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java @@ -21,13 +21,13 @@ import org.thoughtcrime.securesms.recipients.Recipient; 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; @@ -216,7 +216,7 @@ public class ReactionSendJob extends BaseJob { .withReaction(buildReaction(context, reaction, remove, targetAuthor, targetSentTimestamp)); if (conversationRecipient.isGroup()) { - dataMessage.asGroupMessage(new SignalServiceGroup(conversationRecipient.requireGroupId().getDecodedId())); + GroupUtil.setDataMessageGroupContext(context, dataMessage, conversationRecipient.requireGroupId().requirePush()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java index 8ee10c908a..4c1b904cf2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java @@ -12,7 +12,6 @@ import org.thoughtcrime.securesms.database.DatabaseFactory; 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; @@ -21,13 +20,13 @@ import org.thoughtcrime.securesms.recipients.Recipient; 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; @@ -173,7 +172,7 @@ public class RemoteDeleteSendJob extends BaseJob { .withRemoteDelete(new SignalServiceDataMessage.RemoteDelete(targetSentTimestamp)); if (conversationRecipient.isGroup()) { - dataMessage.asGroupMessage(new SignalServiceGroup(conversationRecipient.requireGroupId().getDecodedId())); + GroupUtil.setDataMessageGroupContext(context, dataMessage, conversationRecipient.requireGroupId().requirePush()); } List results = messageSender.sendMessage(addresses, unidentifiedAccess, false, dataMessage.build()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java index 27b7c5ec61..0dc9e4fe73 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java @@ -18,7 +18,10 @@ import org.thoughtcrime.securesms.mms.OutgoingGroupMediaMessage; 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; @@ -106,6 +109,24 @@ public final class GroupUtil { } } + @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;