diff --git a/SignalServiceKit/src/Loki/Protocol/Closed Groups/ClosedGroupsProtocol.swift b/SignalServiceKit/src/Loki/Protocol/Closed Groups/ClosedGroupsProtocol.swift index 4959d68ec..d888bf041 100644 --- a/SignalServiceKit/src/Loki/Protocol/Closed Groups/ClosedGroupsProtocol.swift +++ b/SignalServiceKit/src/Loki/Protocol/Closed Groups/ClosedGroupsProtocol.swift @@ -112,6 +112,7 @@ public final class ClosedGroupsProtocol : NSObject { let wasAnyUserRemoved = Set(members).intersection(oldMembers) != oldMembers let removedMembers = oldMembers.subtracting(members) let isUserLeaving = removedMembers.contains(userPublicKey) + var allSenderKeys = Storage.getAllClosedGroupSenderKeys(for: groupPublicKey) var newSenderKeys: [ClosedGroupSenderKey] = [] if wasAnyUserRemoved { if isUserLeaving && removedMembers.count != 1 { @@ -150,7 +151,7 @@ public final class ClosedGroupsProtocol : NSObject { } } } - } else { + } else if !newMembers.isEmpty { seal.fulfill(()) // Generate ratchets for any new members newSenderKeys = newMembers.map { publicKey in @@ -162,11 +163,16 @@ public final class ClosedGroupsProtocol : NSObject { members: membersAsData, admins: adminsAsData) let closedGroupUpdateMessage = ClosedGroupUpdateMessage(thread: thread, kind: closedGroupUpdateMessageKind) messageSenderJobQueue.add(message: closedGroupUpdateMessage, transaction: transaction) + } else { + seal.fulfill(()) + let closedGroupUpdateMessageKind = ClosedGroupUpdateMessage.Kind.info(groupPublicKey: Data(hex: groupPublicKey), name: name, + senderKeys: [ClosedGroupSenderKey](allSenderKeys), members: membersAsData, admins: adminsAsData) + let closedGroupUpdateMessage = ClosedGroupUpdateMessage(thread: thread, kind: closedGroupUpdateMessageKind) + messageSenderJobQueue.add(message: closedGroupUpdateMessage, transaction: transaction) } // Establish sessions if needed establishSessionsIfNeeded(with: [String](newMembers), using: transaction) // Send closed group update messages to the new members using established channels - var allSenderKeys = Storage.getAllClosedGroupSenderKeys(for: groupPublicKey) allSenderKeys.formUnion(newSenderKeys) for member in newMembers { let thread = TSContactThread.getOrCreateThread(withContactId: member, transaction: transaction)