diff --git a/Signal/src/ViewControllers/ThreadSettings/OWSConversationSettingsViewController.m b/Signal/src/ViewControllers/ThreadSettings/OWSConversationSettingsViewController.m index 0e5276639..261e97db4 100644 --- a/Signal/src/ViewControllers/ThreadSettings/OWSConversationSettingsViewController.m +++ b/Signal/src/ViewControllers/ThreadSettings/OWSConversationSettingsViewController.m @@ -34,6 +34,7 @@ #import @import ContactsUI; +@import PromiseKit; NS_ASSUME_NONNULL_BEGIN @@ -1176,13 +1177,21 @@ const CGFloat kIconViewLength = 24; - (void)leaveGroup { TSGroupThread *gThread = (TSGroupThread *)self.thread; - TSOutgoingMessage *message = - [TSOutgoingMessage outgoingMessageInThread:gThread groupMetaMessage:TSGroupMetaMessageQuit expiresInSeconds:0]; - [LKStorage writeSyncWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { - [self.messageSenderJobQueue addMessage:message transaction:transaction]; - [gThread leaveGroupWithTransaction:transaction]; - } error:nil]; + if (gThread.usesSharedSenderKeys) { + NSString *groupPublicKey = [LKGroupUtilities getDecodedGroupID:gThread.groupModel.groupId]; + [LKStorage writeSyncWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { + [[LKClosedGroupsProtocol leaveGroupWithPublicKey:groupPublicKey transaction:transaction] retainUntilComplete]; + } error:nil]; + } else { + TSOutgoingMessage *message = + [TSOutgoingMessage outgoingMessageInThread:gThread groupMetaMessage:TSGroupMetaMessageQuit expiresInSeconds:0]; + + [LKStorage writeSyncWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { + [self.messageSenderJobQueue addMessage:message transaction:transaction]; + [gThread leaveGroupWithTransaction:transaction]; + } error:nil]; + } [self.navigationController popViewControllerAnimated:YES]; } diff --git a/SignalServiceKit/src/Loki/Protocol/Closed Groups/ClosedGroupsProtocol.swift b/SignalServiceKit/src/Loki/Protocol/Closed Groups/ClosedGroupsProtocol.swift index 8df4f2dbe..581fbd914 100644 --- a/SignalServiceKit/src/Loki/Protocol/Closed Groups/ClosedGroupsProtocol.swift +++ b/SignalServiceKit/src/Loki/Protocol/Closed Groups/ClosedGroupsProtocol.swift @@ -128,6 +128,11 @@ public final class ClosedGroupsProtocol : NSObject { infoMessage.save(with: transaction) } + @objc(leaveGroupWithPublicKey:transaction:) + public static func objc_leave(_ groupPublicKey: String, using transaction: YapDatabaseReadWriteTransaction) -> AnyPromise { + return AnyPromise.from(leave(groupPublicKey, using: transaction)) + } + public static func leave(_ groupPublicKey: String, using transaction: YapDatabaseReadWriteTransaction) -> Promise { let userPublicKey = UserDefaults.standard[.masterHexEncodedPublicKey] ?? getUserHexEncodedPublicKey() return removeMembers([ userPublicKey ], from: groupPublicKey, using: transaction)