Add friend request message discarding.

This commit is contained in:
Mikunj 2019-05-20 13:01:04 +10:00
parent 8a815e1496
commit fdff5d8487
4 changed files with 64 additions and 5 deletions

View File

@ -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

View File

@ -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;

View File

@ -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]) {

View File

@ -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];
}];
}