diff --git a/SessionMessagingKit/Sending & Receiving/MessageSender+ClosedGroups.swift b/SessionMessagingKit/Sending & Receiving/MessageSender+ClosedGroups.swift index 0679a926f..4761c53ce 100644 --- a/SessionMessagingKit/Sending & Receiving/MessageSender+ClosedGroups.swift +++ b/SessionMessagingKit/Sending & Receiving/MessageSender+ClosedGroups.swift @@ -135,11 +135,26 @@ extension MessageSender { throw Error.invalidClosedGroupUpdate } let group = thread.groupModel + let members = [String](Set(group.groupMemberIds).union(newMembers)) + let membersAsData = members.map { Data(hex: $0) } + let adminsAsData = group.groupAdminIds.map { Data(hex: $0) } + guard let encryptionKeyPair = Storage.shared.getLatestClosedGroupEncryptionKeyPair(for: groupPublicKey) else { + SNLog("Couldn't find encryption key pair for closed group: \(groupPublicKey).") + throw Error.noKeyPair + } // Send the update to the group let closedGroupControlMessage = ClosedGroupControlMessage(kind: .membersAdded(members: newMembers.map { Data(hex: $0) })) MessageSender.send(closedGroupControlMessage, in: thread, using: transaction) + // Send updates to the new members individually + for member in newMembers { + let thread = TSContactThread.getOrCreateThread(withContactId: member, transaction: transaction) + thread.save(with: transaction) + let closedGroupControlMessageKind = ClosedGroupControlMessage.Kind.new(publicKey: Data(hex: groupPublicKey), name: group.groupName!, + encryptionKeyPair: encryptionKeyPair, members: membersAsData, admins: adminsAsData) + let closedGroupControlMessage = ClosedGroupControlMessage(kind: closedGroupControlMessageKind) + MessageSender.send(closedGroupControlMessage, in: thread, using: transaction) + } // Update the group - let members = [String](Set(group.groupMemberIds).union(newMembers)) let newGroupModel = TSGroupModel(title: group.groupName, memberIds: members, image: nil, groupId: groupID, groupType: .closedGroup, adminIds: group.groupAdminIds) thread.setGroupModel(newGroupModel, with: transaction) // Notify the user