|
|
|
@ -710,65 +710,6 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa
|
|
|
|
|
|
|
|
|
|
#pragma mark - Loki Friend Request Handling
|
|
|
|
|
|
|
|
|
|
- (void)removeOldOutgoingFriendRequestMessagesIfNeededWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
{
|
|
|
|
|
[self removeOldFriendRequestMessagesIfNeeded:OWSInteractionType_OutgoingMessage withTransaction:transaction];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)removeOldIncomingFriendRequestMessagesIfNeededWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
{
|
|
|
|
|
[self removeOldFriendRequestMessagesIfNeeded:OWSInteractionType_IncomingMessage withTransaction:transaction];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)removeOldFriendRequestMessagesIfNeeded:(OWSInteractionType)interactionType withTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
{
|
|
|
|
|
// Friend request status doesn't apply to group threads
|
|
|
|
|
if (self.isGroupThread) { return; }
|
|
|
|
|
// If we're friends with the other person then we don't need to remove any friend request messages
|
|
|
|
|
if ([LKFriendRequestProtocol isFriendsWithAnyLinkedDeviceOfHexEncodedPublicKey:self.contactIdentifier]) { return; }
|
|
|
|
|
|
|
|
|
|
NSMutableArray<NSString *> *idsToRemove = [NSMutableArray new];
|
|
|
|
|
__block TSMessage *_Nullable messageToKeep = nil;
|
|
|
|
|
|
|
|
|
|
[self enumerateInteractionsWithTransaction:transaction usingBlock:^(TSInteraction *interaction, YapDatabaseReadTransaction *transaction) {
|
|
|
|
|
if (interaction.interactionType != interactionType) { return; }
|
|
|
|
|
|
|
|
|
|
BOOL removeMessage = false;
|
|
|
|
|
TSMessage *message = (TSMessage *)interaction;
|
|
|
|
|
|
|
|
|
|
// We want to keep the most recent message
|
|
|
|
|
if (messageToKeep == nil || messageToKeep.timestamp < message.timestamp) {
|
|
|
|
|
messageToKeep = message;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// We want to remove any old incoming friend request messages which are pending
|
|
|
|
|
if (interactionType == OWSInteractionType_IncomingMessage) {
|
|
|
|
|
removeMessage = YES;
|
|
|
|
|
} else {
|
|
|
|
|
// Or if we're sending then remove any failed friend request messages
|
|
|
|
|
TSOutgoingMessage *outgoingMessage = (TSOutgoingMessage *)message;
|
|
|
|
|
removeMessage = outgoingMessage.friendRequestStatus == LKMessageFriendRequestStatusSendingOrFailed;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (removeMessage) {
|
|
|
|
|
[idsToRemove addObject:interaction.uniqueId];
|
|
|
|
|
}
|
|
|
|
|
}];
|
|
|
|
|
|
|
|
|
|
for (NSString *interactionID in idsToRemove) {
|
|
|
|
|
// Don't delete the most recent message
|
|
|
|
|
if (messageToKeep != nil && interactionID == messageToKeep.uniqueId) { continue; }
|
|
|
|
|
|
|
|
|
|
// We need to fetch each interaction, since [TSInteraction removeWithTransaction:] does important work
|
|
|
|
|
TSInteraction *_Nullable interaction = [TSInteraction fetchObjectWithUniqueID:interactionID transaction:transaction];
|
|
|
|
|
if (interaction == nil) {
|
|
|
|
|
OWSFailDebug(@"Couldn't load interaction.");
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
[interaction removeWithTransaction:transaction];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (BOOL)isContactFriend
|
|
|
|
|
{
|
|
|
|
|
return [LKFriendRequestProtocol getFriendRequestUIStatusForThread:self] == LKFriendRequestUIStatusFriends;
|
|
|
|
|