Add friend request message discarding.
This commit is contained in:
parent
8a815e1496
commit
fdff5d8487
|
@ -200,6 +200,16 @@ typedef NS_ENUM(NSInteger, TSThreadFriendRequestStatus) {
|
|||
|
||||
- (void)saveFriendRequestStatus:(TSThreadFriendRequestStatus)friendRequestStatus withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction;
|
||||
|
||||
/**
|
||||
Remove any outgoing friend request message which failed to send
|
||||
*/
|
||||
- (void)removeOutgoingFriendRequestMessagesWithTransaction:(YapDatabaseReadWriteTransaction *)transaction;
|
||||
|
||||
/**
|
||||
Remove any old incoming friend request message that is still pending
|
||||
*/
|
||||
- (void)removeIncomingFriendRequestMessagesWithTransaction:(YapDatabaseReadWriteTransaction *)transaction;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
|
|
@ -698,6 +698,49 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa
|
|||
|
||||
#pragma mark - Loki Friend Request Handling
|
||||
|
||||
- (void)removeOutgoingFriendRequestMessagesWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
[self removeFriendRequestMessages:false withTransaction:transaction];
|
||||
}
|
||||
|
||||
- (void)removeIncomingFriendRequestMessagesWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
[self removeFriendRequestMessages:true withTransaction:transaction];
|
||||
}
|
||||
|
||||
- (void)removeFriendRequestMessages:(BOOL)incoming withTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
// If we're friends with the person then we don't need to remove any friend request messages
|
||||
if (self.friendRequestStatus == TSThreadFriendRequestStatusFriends) {
|
||||
return;
|
||||
}
|
||||
|
||||
OWSInteractionType interactionType = incoming ? OWSInteractionType_IncomingMessage : OWSInteractionType_OutgoingMessage;
|
||||
|
||||
[self enumerateInteractionsWithTransaction:transaction usingBlock:^(TSInteraction * _Nonnull interaction, YapDatabaseReadTransaction * _Nonnull transaction) {
|
||||
if (interaction.interactionType != interactionType) {
|
||||
return;
|
||||
}
|
||||
|
||||
BOOL removeMessage = false;
|
||||
TSMessage *message = (TSMessage *)interaction;
|
||||
|
||||
// We want to remove any old incoming friend request messages
|
||||
if (interactionType == OWSInteractionType_IncomingMessage) {
|
||||
removeMessage = message.isFriendRequest;
|
||||
} else {
|
||||
// Or if we're sending then remove any failed friend request messages
|
||||
TSOutgoingMessage *outgoingMessage = (TSOutgoingMessage *)message;
|
||||
removeMessage = outgoingMessage.messageState == TSOutgoingMessageStateFailed;
|
||||
}
|
||||
|
||||
if (removeMessage) {
|
||||
[interaction removeWithTransaction:transaction];
|
||||
}
|
||||
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)saveFriendRequestStatus:(TSThreadFriendRequestStatus)friendRequestStatus withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction
|
||||
{
|
||||
self.friendRequestStatus = friendRequestStatus;
|
||||
|
|
|
@ -1518,6 +1518,11 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
}
|
||||
|
||||
[incomingMessage saveWithTransaction:transaction];
|
||||
|
||||
// Remove any old incoming messages
|
||||
if (incomingMessage.isFriendRequest) {
|
||||
[thread removeIncomingFriendRequestMessagesWithTransaction:transaction];
|
||||
}
|
||||
|
||||
// Any messages sent from the current user - from this device or another - should be automatically marked as read.
|
||||
if ([envelope.source isEqualToString:self.tsAccountManager.localNumber]) {
|
||||
|
|
|
@ -1118,12 +1118,13 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
|
|||
// Loki
|
||||
// ========
|
||||
if (messageType == TSFriendRequestMessageType) {
|
||||
[message.thread saveFriendRequestStatus:TSThreadFriendRequestStatusRequestSent withTransaction:nil];
|
||||
|
||||
// We also want to expire the message after 72 hours
|
||||
NSTimeInterval expireTimeInterval = 72 * kHourInterval;
|
||||
NSDate *expireDate = [[NSDate new] dateByAddingTimeInterval:expireTimeInterval];
|
||||
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
||||
[message.thread setFriendRequestStatus:TSThreadFriendRequestStatusRequestSent withTransaction:transaction];
|
||||
[message.thread removeOutgoingFriendRequestMessagesWithTransaction:transaction];
|
||||
|
||||
// We also want to expire the message after 72 hours
|
||||
NSTimeInterval expireTimeInterval = 72 * kHourInterval;
|
||||
NSDate *expireDate = [[NSDate new] dateByAddingTimeInterval:expireTimeInterval];
|
||||
[message saveFriendRequestExpiresAt:[NSDate ows_millisecondsSince1970ForDate:expireDate] withTransaction:transaction];
|
||||
}];
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue