diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m index 2f8f081ac..b541c1771 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m @@ -532,33 +532,7 @@ NS_ASSUME_NONNULL_BEGIN - (BOOL)shouldShowFriendRequestUIForMessage:(TSMessage *)message { - if ([message isKindOfClass:TSOutgoingMessage.class]) { - return message.isFriendRequest; - } else { - if (message.isFriendRequest) { - // Only show the first friend request that was received - NSString *senderID = ((TSIncomingMessage *)message).authorId; - __block NSMutableSet *linkedDeviceThreads; - [OWSPrimaryStorage.sharedManager.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { - linkedDeviceThreads = [LKDatabaseUtilities getLinkedDeviceThreadsFor:senderID in:transaction].mutableCopy; - }]; - NSMutableArray *allFriendRequestMessages = @[].mutableCopy; - for (TSContactThread *thread in linkedDeviceThreads) { - [thread enumerateInteractionsUsingBlock:^(TSInteraction *interaction) { // Starts a new write transaction internally - TSIncomingMessage *message = [interaction as:TSIncomingMessage.class]; - if (message != nil && message.isFriendRequest) { - [allFriendRequestMessages addObject:message]; - } - }]; - } - [allFriendRequestMessages sortUsingComparator:^NSComparisonResult(TSIncomingMessage *lhs, TSIncomingMessage *rhs) { - return [@(lhs.timestamp) compare:@(rhs.timestamp)] == NSOrderedDescending; - }]; - return [message.uniqueId isEqual:allFriendRequestMessages.firstObject.uniqueId]; - } else { - return NO; - } - } + return message.isFriendRequest; } @end diff --git a/SignalServiceKit/src/Contacts/TSThread.h b/SignalServiceKit/src/Contacts/TSThread.h index 929c0885b..0e4f1db7b 100644 --- a/SignalServiceKit/src/Contacts/TSThread.h +++ b/SignalServiceKit/src/Contacts/TSThread.h @@ -87,7 +87,7 @@ extern ConversationColorName const kConversationColorName_Default; #pragma mark Interactions -- (void)enumerateInteractionsWithTransaction:(YapDatabaseReadWriteTransaction *)transaction usingBlock:(void (^)(TSInteraction *interaction, YapDatabaseReadTransaction *transaction))block; +- (void)enumerateInteractionsWithTransaction:(YapDatabaseReadTransaction *)transaction usingBlock:(void (^)(TSInteraction *interaction, YapDatabaseReadTransaction *transaction))block; - (void)enumerateInteractionsUsingBlock:(void (^)(TSInteraction *interaction))block; diff --git a/SignalServiceKit/src/Contacts/TSThread.m b/SignalServiceKit/src/Contacts/TSThread.m index c069d6d91..4fa35a53e 100644 --- a/SignalServiceKit/src/Contacts/TSThread.m +++ b/SignalServiceKit/src/Contacts/TSThread.m @@ -249,7 +249,7 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa /** * Iterate over this thread's interactions */ -- (void)enumerateInteractionsWithTransaction:(YapDatabaseReadWriteTransaction *)transaction +- (void)enumerateInteractionsWithTransaction:(YapDatabaseReadTransaction *)transaction usingBlock:(void (^)(TSInteraction *interaction, YapDatabaseReadTransaction *transaction))block { @@ -268,7 +268,7 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa */ - (void)enumerateInteractionsUsingBlock:(void (^)(TSInteraction *interaction))block { - [self.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + [self.dbReadWriteConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { [self enumerateInteractionsWithTransaction:transaction usingBlock:^( TSInteraction *interaction, YapDatabaseReadTransaction *transaction) { diff --git a/SignalServiceKit/src/Messages/Interactions/TSMessage.m b/SignalServiceKit/src/Messages/Interactions/TSMessage.m index c05776586..c76b4d548 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/TSMessage.m @@ -447,6 +447,7 @@ static const NSUInteger OWSMessageSchemaVersion = 4; #pragma mark - Loki Friend Request Handling +// Left here for migration purposes - (void)saveFriendRequestStatus:(LKMessageFriendRequestStatus)friendRequestStatus withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction { self.friendRequestStatus = friendRequestStatus; @@ -474,7 +475,14 @@ static const NSUInteger OWSMessageSchemaVersion = 4; - (BOOL)isFriendRequest { - return self.friendRequestExpiresAt != 0; + NSString *contactID = self.thread.contactIdentifier; + if (contactID == nil) { return NO; } + OWSPrimaryStorage *storage = OWSPrimaryStorage.sharedManager; + __block LKFriendRequestStatus friendRequestStatus; + [storage.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { + friendRequestStatus = [storage getFriendRequestStatusForContact:contactID transaction:transaction]; + }]; + return friendRequestStatus != LKFriendRequestStatusFriends; } - (BOOL)hasFriendRequestStatusMessage