|
|
|
|
@ -51,6 +51,7 @@
|
|
|
|
|
#import "TSQuotedMessage.h"
|
|
|
|
|
#import <SignalCoreKit/Cryptography.h>
|
|
|
|
|
#import <SignalCoreKit/NSDate+OWS.h>
|
|
|
|
|
#import <SignalServiceKit/NSObject.h>
|
|
|
|
|
#import <SignalServiceKit/SignalRecipient.h>
|
|
|
|
|
#import <SignalServiceKit/SignalServiceKit-Swift.h>
|
|
|
|
|
#import <YapDatabase/YapDatabase.h>
|
|
|
|
|
@ -1475,7 +1476,10 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
// we can end up in a deadlock where both users' threads' friend request statuses are
|
|
|
|
|
// TSThreadFriendRequestStatusRequestSent.
|
|
|
|
|
[thread saveFriendRequestStatus:TSThreadFriendRequestStatusFriends withTransaction:transaction];
|
|
|
|
|
[message saveFriendRequestStatus:TSMessageFriendRequestStatusAccepted withTransaction:transaction];
|
|
|
|
|
TSOutgoingMessage *existingFriendRequestMessage = (TSOutgoingMessage *)[thread.lastInteraction as:TSOutgoingMessage.class];
|
|
|
|
|
if (existingFriendRequestMessage != nil && existingFriendRequestMessage.isFriendRequest) {
|
|
|
|
|
[existingFriendRequestMessage saveFriendRequestStatus:TSMessageFriendRequestStatusAccepted withTransaction:transaction];
|
|
|
|
|
}
|
|
|
|
|
// The two lines below are equivalent to calling [ThreadUtil enqueueAcceptFriendRequestMessageInThread:thread]
|
|
|
|
|
OWSEphemeralMessage *emptyMessage = [OWSEphemeralMessage createEmptyOutgoingMessageInThread:thread];
|
|
|
|
|
[self.messageSenderJobQueue addMessage:emptyMessage transaction:transaction];
|
|
|
|
|
@ -1486,13 +1490,16 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
// request. Alice's thread's friend request status is reset to
|
|
|
|
|
// TSThreadFriendRequestStatusRequestReceived.
|
|
|
|
|
[thread saveFriendRequestStatus:TSThreadFriendRequestStatusRequestReceived withTransaction:transaction];
|
|
|
|
|
[message saveFriendRequestStatus:TSMessageFriendRequestStatusPending withTransaction:transaction];
|
|
|
|
|
message.friendRequestStatus = TSMessageFriendRequestStatusPending; // Don't save yet. This is done in finalizeIncomingMessage:thread:envelope:transaction.
|
|
|
|
|
}
|
|
|
|
|
} else if (!thread.isContactFriend) {
|
|
|
|
|
// If the thread's friend request status is not TSThreadFriendRequestStatusFriends, but we're receiving a message,
|
|
|
|
|
// it must be a friend request accepted message. Declining a friend request doesn't send a message.
|
|
|
|
|
[thread saveFriendRequestStatus:TSThreadFriendRequestStatusFriends withTransaction:transaction];
|
|
|
|
|
[message saveFriendRequestStatus:TSMessageFriendRequestStatusAccepted withTransaction:transaction];
|
|
|
|
|
TSOutgoingMessage *existingFriendRequestMessage = (TSOutgoingMessage *)[thread.lastInteraction as:TSOutgoingMessage.class];
|
|
|
|
|
if (existingFriendRequestMessage != nil && existingFriendRequestMessage.isFriendRequest) {
|
|
|
|
|
[existingFriendRequestMessage saveFriendRequestStatus:TSMessageFriendRequestStatusAccepted withTransaction:transaction];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|