Merge branch 'closed-groups' into multi-device

This commit is contained in:
Niels Andriesse 2021-01-25 14:09:14 +11:00
commit 37f0dbd5b8
1 changed files with 11 additions and 4 deletions

View File

@ -161,12 +161,19 @@ extension MessageSender {
throw Error.invalidClosedGroupUpdate
}
let group = thread.groupModel
// Send the update to the group
let members = Set(group.groupMemberIds).subtracting(membersToRemove)
let isCurrentUserAdmin = group.groupAdminIds.contains(getUserHexEncodedPublicKey())
// Send the update to the group and generate + distribute a new encryption key pair if needed
let closedGroupControlMessage = ClosedGroupControlMessage(kind: .membersRemoved(members: membersToRemove.map { Data(hex: $0) }))
MessageSender.send(closedGroupControlMessage, in: thread, using: transaction)
if isCurrentUserAdmin {
let _ = MessageSender.sendNonDurably(closedGroupControlMessage, in: thread, using: transaction).done {
try generateAndSendNewEncryptionKeyPair(for: groupPublicKey, to: members, using: transaction)
}
} else {
MessageSender.send(closedGroupControlMessage, in: thread, using: transaction)
}
// Update the group
let members = [String](Set(group.groupMemberIds).subtracting(membersToRemove))
let newGroupModel = TSGroupModel(title: group.groupName, memberIds: members, image: nil, groupId: groupID, groupType: .closedGroup, adminIds: group.groupAdminIds)
let newGroupModel = TSGroupModel(title: group.groupName, memberIds: [String](members), image: nil, groupId: groupID, groupType: .closedGroup, adminIds: group.groupAdminIds)
thread.setGroupModel(newGroupModel, with: transaction)
// Notify the user
let updateInfo = group.getInfoStringAboutUpdate(to: newGroupModel)