mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 09:20:19 +01:00
Convert and store new group changes in MessageExtras.
This commit is contained in:
@@ -8,7 +8,9 @@ import org.thoughtcrime.securesms.database.model.ParentStoryId
|
||||
import org.thoughtcrime.securesms.database.model.StoryType
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.GV2UpdateDescription
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.MessageExtras
|
||||
import org.thoughtcrime.securesms.groups.GroupId
|
||||
import org.thoughtcrime.securesms.linkpreview.LinkPreview
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
@@ -36,7 +38,8 @@ class IncomingMessage(
|
||||
sharedContacts: List<Contact> = emptyList(),
|
||||
linkPreviews: List<LinkPreview> = emptyList(),
|
||||
mentions: List<Mention> = emptyList(),
|
||||
val giftBadge: GiftBadge? = null
|
||||
val giftBadge: GiftBadge? = null,
|
||||
val messageExtras: MessageExtras? = null
|
||||
) {
|
||||
|
||||
val attachments: List<Attachment> = ArrayList(attachments)
|
||||
@@ -104,9 +107,8 @@ class IncomingMessage(
|
||||
serverTimeMillis = timestamp,
|
||||
groupId = groupId,
|
||||
groupContext = messageGroupContext,
|
||||
serverGuid = serverGuid,
|
||||
body = messageGroupContext.encodedGroupContext,
|
||||
type = MessageType.GROUP_UPDATE
|
||||
type = MessageType.GROUP_UPDATE,
|
||||
messageExtras = MessageExtras(gv2UpdateDescription = GV2UpdateDescription(gv2ChangeDescription = groupContext, groupChangeUpdate = null))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroup;
|
||||
import org.signal.storageservice.protos.groups.local.DecryptedGroupChange;
|
||||
import org.signal.storageservice.protos.groups.local.DecryptedMember;
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context;
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.MessageExtras;
|
||||
import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
@@ -30,7 +31,6 @@ import java.util.List;
|
||||
*/
|
||||
public final class MessageGroupContext {
|
||||
|
||||
@NonNull private final String encodedGroupContext;
|
||||
@NonNull private final GroupProperties group;
|
||||
@Nullable private final GroupV1Properties groupV1;
|
||||
@Nullable private final GroupV2Properties groupV2;
|
||||
@@ -38,7 +38,6 @@ public final class MessageGroupContext {
|
||||
public MessageGroupContext(@NonNull String encodedGroupContext, boolean v2)
|
||||
throws IOException
|
||||
{
|
||||
this.encodedGroupContext = encodedGroupContext;
|
||||
if (v2) {
|
||||
this.groupV1 = null;
|
||||
this.groupV2 = new GroupV2Properties(DecryptedGroupV2Context.ADAPTER.decode(Base64.decode(encodedGroupContext)));
|
||||
@@ -50,15 +49,25 @@ public final class MessageGroupContext {
|
||||
}
|
||||
}
|
||||
|
||||
public MessageGroupContext(@NonNull MessageExtras messageExtras, boolean v2) {
|
||||
if (v2) {
|
||||
this.groupV1 = null;
|
||||
this.groupV2 = new GroupV2Properties(messageExtras.gv2UpdateDescription.gv2ChangeDescription);
|
||||
this.group = groupV2;
|
||||
} else {
|
||||
this.groupV1 = new GroupV1Properties(messageExtras.gv1Context);
|
||||
this.groupV2 = null;
|
||||
this.group = groupV1;
|
||||
}
|
||||
}
|
||||
|
||||
public MessageGroupContext(@NonNull GroupContext group) {
|
||||
this.encodedGroupContext = Base64.encodeWithPadding(group.encode());
|
||||
this.groupV1 = new GroupV1Properties(group);
|
||||
this.groupV2 = null;
|
||||
this.group = groupV1;
|
||||
}
|
||||
|
||||
public MessageGroupContext(@NonNull DecryptedGroupV2Context group) {
|
||||
this.encodedGroupContext = Base64.encodeWithPadding(group.encode());
|
||||
this.groupV1 = null;
|
||||
this.groupV2 = new GroupV2Properties(group);
|
||||
this.group = groupV2;
|
||||
@@ -82,10 +91,6 @@ public final class MessageGroupContext {
|
||||
return groupV2 != null;
|
||||
}
|
||||
|
||||
public @NonNull String getEncodedGroupContext() {
|
||||
return encodedGroupContext;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return group.getName();
|
||||
}
|
||||
|
||||
@@ -9,8 +9,9 @@ import org.thoughtcrime.securesms.database.model.Mention
|
||||
import org.thoughtcrime.securesms.database.model.ParentStoryId
|
||||
import org.thoughtcrime.securesms.database.model.StoryType
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.GV2UpdateDescription
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.MessageExtras
|
||||
import org.thoughtcrime.securesms.linkpreview.LinkPreview
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.sms.GroupV2UpdateMessageUtil
|
||||
@@ -52,7 +53,8 @@ data class OutgoingMessage(
|
||||
val scheduledDate: Long = -1,
|
||||
val messageToEdit: Long = 0,
|
||||
val isReportSpam: Boolean = false,
|
||||
val isMessageRequestAccept: Boolean = false
|
||||
val isMessageRequestAccept: Boolean = false,
|
||||
val messageExtras: MessageExtras? = null
|
||||
) {
|
||||
|
||||
val isV2Group: Boolean = messageGroupContext != null && GroupV2UpdateMessageUtil.isGroupV2(messageGroupContext)
|
||||
@@ -228,17 +230,18 @@ data class OutgoingMessage(
|
||||
* Helper for creating a group update message when a state change occurs and needs to be sent to others.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun groupUpdateMessage(threadRecipient: Recipient, group: DecryptedGroupV2Context, sentTimeMillis: Long): OutgoingMessage {
|
||||
val groupContext = MessageGroupContext(group)
|
||||
fun groupUpdateMessage(threadRecipient: Recipient, update: GV2UpdateDescription, sentTimeMillis: Long): OutgoingMessage {
|
||||
val messageExtras = MessageExtras(gv2UpdateDescription = update)
|
||||
val groupContext = MessageGroupContext(update.gv2ChangeDescription!!)
|
||||
|
||||
return OutgoingMessage(
|
||||
threadRecipient = threadRecipient,
|
||||
body = groupContext.encodedGroupContext,
|
||||
sentTimeMillis = sentTimeMillis,
|
||||
messageGroupContext = groupContext,
|
||||
isGroup = true,
|
||||
isGroupUpdate = true,
|
||||
isSecure = true
|
||||
isSecure = true,
|
||||
messageExtras = messageExtras
|
||||
)
|
||||
}
|
||||
|
||||
@@ -260,7 +263,6 @@ data class OutgoingMessage(
|
||||
): OutgoingMessage {
|
||||
return OutgoingMessage(
|
||||
threadRecipient = threadRecipient,
|
||||
body = groupContext.encodedGroupContext,
|
||||
isGroup = true,
|
||||
isGroupUpdate = true,
|
||||
messageGroupContext = groupContext,
|
||||
|
||||
Reference in New Issue
Block a user