|
|
|
@ -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)
|
|
|
|
|