Fix group leaving bug

This commit is contained in:
nielsandriesse 2020-09-25 13:41:35 +10:00
parent 700fb185f6
commit c26e5dcba8
2 changed files with 20 additions and 6 deletions

View File

@ -34,6 +34,7 @@
#import <SessionServiceKit/TSThread.h>
@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];
}

View File

@ -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<Void> {
let userPublicKey = UserDefaults.standard[.masterHexEncodedPublicKey] ?? getUserHexEncodedPublicKey()
return removeMembers([ userPublicKey ], from: groupPublicKey, using: transaction)