From e190c332dcee87c49836f2fcb51409530ce02d68 Mon Sep 17 00:00:00 2001 From: SessionHero01 <180888785+SessionHero01@users.noreply.github.com> Date: Wed, 12 Feb 2025 14:17:41 +1100 Subject: [PATCH] Send control message locally (#937) --- .../securesms/groups/GroupManagerV2Impl.kt | 45 ++++++++++--------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2Impl.kt b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2Impl.kt index 65861d6ff1..3b053bed6c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2Impl.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2Impl.kt @@ -512,6 +512,30 @@ class GroupManagerV2Impl @Inject constructor( configs.groupInfo.getName() } + // Build a group update message to the group telling members someone has been promoted + val timestamp = clock.currentTimeMills() + val signature = SodiumUtilities.sign( + buildMemberChangeSignature(GroupUpdateMemberChangeMessage.Type.PROMOTED, timestamp), + adminKey + ) + + val message = GroupUpdated( + GroupUpdateMessage.newBuilder() + .setMemberChangeMessage( + GroupUpdateMemberChangeMessage.newBuilder() + .addAllMemberSessionIds(members.map { it.hexString }) + .setType(GroupUpdateMemberChangeMessage.Type.PROMOTED) + .setAdminSignature(ByteString.copyFrom(signature)) + ) + .build() + ).apply { + sentTimestamp = timestamp + } + + // Insert the message locally immediately so we can see the incoming change + // The same message will be sent later to the group + storage.insertGroupInfoChange(message, group) + // Send out the promote message to the members concurrently val promoteMessage = GroupUpdated( GroupUpdateMessage.newBuilder() @@ -553,27 +577,8 @@ class GroupManagerV2Impl @Inject constructor( .forEach(configs.groupMembers::set) } - // Send a group update message to the group telling members someone has been promoted - val timestamp = clock.currentTimeMills() - val signature = SodiumUtilities.sign( - buildMemberChangeSignature(GroupUpdateMemberChangeMessage.Type.PROMOTED, timestamp), - adminKey - ) - val message = GroupUpdated( - GroupUpdateMessage.newBuilder() - .setMemberChangeMessage( - GroupUpdateMemberChangeMessage.newBuilder() - .addAllMemberSessionIds(members.map { it.hexString }) - .setType(GroupUpdateMemberChangeMessage.Type.PROMOTED) - .setAdminSignature(ByteString.copyFrom(signature)) - ) - .build() - ).apply { - sentTimestamp = timestamp - } MessageSender.sendAndAwait(message, Address.fromSerialized(group.hexString)) - storage.insertGroupInfoChange(message, group) } } /** @@ -949,8 +954,8 @@ class GroupManagerV2Impl @Inject constructor( sentTimestamp = timestamp } - MessageSender.sendAndAwait(message, Address.fromSerialized(groupId.hexString)) storage.insertGroupInfoChange(message, groupId) + MessageSender.sendAndAwait(message, Address.fromSerialized(groupId.hexString)) } override suspend fun requestMessageDeletion(