This commit is contained in:
Niels Andriesse 2021-04-19 14:02:26 +10:00
parent 3f1358ac4d
commit 35bd22f542

View file

@ -204,7 +204,7 @@ extension MessageSender {
SNLog("Can't remove members from nonexistent closed group.")
return Promise(error: Error.noThread)
}
guard !membersToRemove.isEmpty || !storage.getZombieMembers(for: groupPublicKey).isEmpty else {
guard !membersToRemove.isEmpty else {
SNLog("Invalid closed group update.")
return Promise(error: Error.invalidClosedGroupUpdate)
}
@ -219,8 +219,9 @@ extension MessageSender {
}
let members = Set(group.groupMemberIds).subtracting(membersToRemove)
// Update zombie list
let zombies = storage.getZombieMembers(for: groupPublicKey).subtracting(membersToRemove)
storage.setZombieMembers(for: groupPublicKey, to: zombies, using: transaction)
let oldZombies = storage.getZombieMembers(for: groupPublicKey)
let newZombies = oldZombies.subtracting(membersToRemove)
storage.setZombieMembers(for: groupPublicKey, to: newZombies, using: transaction)
// Send the update to the group and generate + distribute a new encryption key pair
let closedGroupControlMessage = ClosedGroupControlMessage(kind: .membersRemoved(members: membersToRemove.map { Data(hex: $0) }))
let promise = MessageSender.sendNonDurably(closedGroupControlMessage, in: thread, using: transaction).map {
@ -229,10 +230,12 @@ extension MessageSender {
// Update the group
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)
let infoMessage = TSInfoMessage(timestamp: NSDate.ows_millisecondTimeStamp(), in: thread, messageType: .groupUpdate, customMessage: updateInfo)
infoMessage.save(with: transaction)
// Notify the user if needed (not if only zombie members were removed)
if !membersToRemove.subtracting(oldZombies).isEmpty {
let updateInfo = group.getInfoStringAboutUpdate(to: newGroupModel)
let infoMessage = TSInfoMessage(timestamp: NSDate.ows_millisecondTimeStamp(), in: thread, messageType: .groupUpdate, customMessage: updateInfo)
infoMessage.save(with: transaction)
}
// Return
return promise
}