Add isFriendRequestExpired flag
This commit is contained in:
parent
201b8095ee
commit
6adc8cf014
|
@ -143,7 +143,7 @@ public class SessionResetOperation: OWSOperation, DurableOperation {
|
|||
*/
|
||||
|
||||
if (self.contactThread.sessionResetState != .requestReceived) {
|
||||
let message = TSInfoMessage(timestamp: NSDate.ows_millisecondTimeStamp(), in: self.contactThread, messageType: .typeLokiSessionResetProgress)
|
||||
let message = TSInfoMessage(timestamp: NSDate.ows_millisecondTimeStamp(), in: self.contactThread, messageType: .typeLokiSessionResetInProgress)
|
||||
message.save(with: transaction)
|
||||
|
||||
// Loki: We have initiated a session reset
|
||||
|
|
|
@ -4315,7 +4315,7 @@ typedef enum : NSUInteger {
|
|||
- (void)acceptFriendRequest:(TSIncomingMessage *)friendRequest
|
||||
{
|
||||
// Update the thread's friend request state
|
||||
[self.thread setFriendRequestStatus:TSThreadFriendRequestStatusFriends withTransaction:nil];
|
||||
[self.thread saveFriendRequestStatus:TSThreadFriendRequestStatusFriends withTransaction:nil];
|
||||
// Send friend request accepted message
|
||||
[ThreadUtil enqueueAcceptFriendRequestMessageInThread:self.thread];
|
||||
}
|
||||
|
@ -4323,7 +4323,7 @@ typedef enum : NSUInteger {
|
|||
- (void)declineFriendRequest:(TSIncomingMessage *)friendRequest
|
||||
{
|
||||
// Reset friend request status
|
||||
[self.thread setFriendRequestStatus:TSThreadFriendRequestStatusNone withTransaction:nil];
|
||||
[self.thread saveFriendRequestStatus:TSThreadFriendRequestStatusNone withTransaction:nil];
|
||||
// Delete prekeys
|
||||
NSString *contactID = self.thread.recipientIdentifiers.firstObject;
|
||||
OWSPrimaryStorage *primaryStorage = SSKEnvironment.shared.primaryStorage;
|
||||
|
|
|
@ -198,7 +198,7 @@ typedef NS_ENUM(NSInteger, TSThreadFriendRequestStatus) {
|
|||
|
||||
#pragma mark - Loki Friend Request Handling
|
||||
|
||||
- (void)setFriendRequestStatus:(TSThreadFriendRequestStatus)friendRequestStatus withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction;
|
||||
- (void)saveFriendRequestStatus:(TSThreadFriendRequestStatus)friendRequestStatus withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction;
|
||||
|
||||
@end
|
||||
|
||||
|
|
|
@ -698,19 +698,18 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa
|
|||
|
||||
#pragma mark - Loki Friend Request Handling
|
||||
|
||||
- (void)setFriendRequestStatus:(TSThreadFriendRequestStatus)friendRequestStatus withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction
|
||||
- (void)saveFriendRequestStatus:(TSThreadFriendRequestStatus)friendRequestStatus withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction
|
||||
{
|
||||
self.friendRequestStatus = friendRequestStatus;
|
||||
void (^postNotification)() = ^() {
|
||||
[NSNotificationCenter.defaultCenter postNotificationName:NSNotification.threadFriendRequestStatusChanged object:self.uniqueId];
|
||||
};
|
||||
if (transaction == nil) {
|
||||
[self save];
|
||||
[self.dbReadWriteConnection flushTransactionsWithCompletionQueue:dispatch_get_main_queue() completionBlock:^{
|
||||
[NSNotificationCenter.defaultCenter postNotificationName:NSNotification.threadFriendRequestStatusChanged object:self.uniqueId];
|
||||
}];
|
||||
[self.dbReadWriteConnection flushTransactionsWithCompletionQueue:dispatch_get_main_queue() completionBlock:^{ postNotification(); }];
|
||||
} else {
|
||||
[self saveWithTransaction:transaction];
|
||||
[transaction.connection flushTransactionsWithCompletionQueue:dispatch_get_main_queue() completionBlock:^{
|
||||
[NSNotificationCenter.defaultCenter postNotificationName:NSNotification.threadFriendRequestStatusChanged object:self.uniqueId];
|
||||
}];
|
||||
[transaction.connection flushTransactionsWithCompletionQueue:dispatch_get_main_queue() completionBlock:^{ postNotification(); }];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -150,12 +150,14 @@ public class FriendRequestExpireJob: NSObject {
|
|||
guard message.thread.friendRequestStatus == .requestSent else {
|
||||
// Set message to not expire, so our other logic works correctly
|
||||
message.saveFriendRequestExpires(at: 0, with: transaction)
|
||||
message.saveIsFriendRequestExpired(true, with: transaction)
|
||||
return;
|
||||
}
|
||||
|
||||
// Loki: Expire the friend request message
|
||||
message.thread.setFriendRequestStatus(.requestExpired, with: transaction)
|
||||
message.thread.saveFriendRequestStatus(.requestExpired, with: transaction)
|
||||
message.saveFriendRequestExpires(at: 0, with: transaction)
|
||||
message.saveIsFriendRequestExpired(true, with: transaction)
|
||||
}, transaction: transaction)
|
||||
}
|
||||
})
|
||||
|
|
|
@ -30,6 +30,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
@property (nonatomic, readonly, nullable) OWSLinkPreview *linkPreview;
|
||||
@property (nonatomic) BOOL isFriendRequest; // Loki
|
||||
@property (nonatomic) uint64_t friendRequestExpiresAt;
|
||||
@property (nonatomic) BOOL isFriendRequestExpired;
|
||||
|
||||
- (instancetype)initInteractionWithTimestamp:(uint64_t)timestamp inThread:(TSThread *)thread NS_UNAVAILABLE;
|
||||
|
||||
|
@ -72,8 +73,9 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
#pragma mark - Loki Friend Request Handling
|
||||
|
||||
- (void)setIsFriendRequest:(BOOL)isFriendRequest withTransaction:(YapDatabaseReadWriteTransaction *)transaction;
|
||||
- (void)saveIsFriendRequest:(BOOL)isFriendRequest withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction;
|
||||
- (void)saveFriendRequestExpiresAt:(u_int64_t)expiresAt withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction;
|
||||
- (void)saveIsFriendRequestExpired:(BOOL)isFriendRequestExpired withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction;
|
||||
|
||||
@end
|
||||
|
||||
|
|
|
@ -441,7 +441,7 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
|
|||
|
||||
#pragma mark - Loki Friend Request Handling
|
||||
|
||||
- (void)setIsFriendRequest:(BOOL)isFriendRequest withTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
- (void)saveIsFriendRequest:(BOOL)isFriendRequest withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction
|
||||
{
|
||||
self.isFriendRequest = isFriendRequest;
|
||||
if (transaction == nil) {
|
||||
|
@ -461,6 +461,16 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
|
|||
}
|
||||
}
|
||||
|
||||
- (void)saveIsFriendRequestExpired:(BOOL)isFriendRequestExpired withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction
|
||||
{
|
||||
self.isFriendRequest = isFriendRequestExpired;
|
||||
if (transaction == nil) {
|
||||
[self save];
|
||||
} else {
|
||||
[self saveWithTransaction:transaction];
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
|
|
@ -1474,7 +1474,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
// before updating Alice's thread's friend request status to TSThreadFriendRequestStatusFriends,
|
||||
// we can end up in a deadlock where both users' threads' friend request statuses are
|
||||
// TSThreadFriendRequestStatusRequestSent.
|
||||
[thread setFriendRequestStatus:TSThreadFriendRequestStatusFriends withTransaction:transaction];
|
||||
[thread saveFriendRequestStatus:TSThreadFriendRequestStatusFriends withTransaction:transaction];
|
||||
|
||||
// The two lines below are equivalent to calling [ThreadUtil enqueueAcceptFriendRequestMessageInThread:thread]
|
||||
OWSEphemeralMessage *emptyMessage = [OWSEphemeralMessage createEmptyOutgoingMessageInThread:thread];
|
||||
|
@ -1485,13 +1485,13 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
// friend request status is reset to TSThreadFriendRequestStatusNone. Bob now sends Alice a friend
|
||||
// request. Alice's thread's friend request status is reset to
|
||||
// TSThreadFriendRequestStatusRequestReceived.
|
||||
[thread setFriendRequestStatus:TSThreadFriendRequestStatusRequestReceived withTransaction:transaction];
|
||||
[thread saveFriendRequestStatus:TSThreadFriendRequestStatusRequestReceived withTransaction:transaction];
|
||||
message.isFriendRequest = YES;
|
||||
}
|
||||
} 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 setFriendRequestStatus:TSThreadFriendRequestStatusFriends withTransaction:transaction];
|
||||
[thread saveFriendRequestStatus:TSThreadFriendRequestStatusFriends withTransaction:transaction];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1110,7 +1110,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
|
|||
// Update the thread's friend request status if needed
|
||||
NSInteger *messageType = ((NSNumber *)signalMessage[@"type"]).integerValue;
|
||||
if (messageType == TSFriendRequestMessageType) {
|
||||
[message.thread setFriendRequestStatus:TSThreadFriendRequestStatusRequestSending withTransaction:nil];
|
||||
[message.thread saveFriendRequestStatus:TSThreadFriendRequestStatusRequestSending withTransaction:nil];
|
||||
}
|
||||
BOOL isPoWRequired = YES; // TODO: Base on message type
|
||||
[[LokiAPI objc_sendSignalMessage:signalMessage to:recipient.recipientId timestamp:message.timestamp requiringPoW:isPoWRequired]
|
||||
|
@ -1118,7 +1118,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
|
|||
// Loki
|
||||
// ========
|
||||
if (messageType == TSFriendRequestMessageType) {
|
||||
[message.thread setFriendRequestStatus:TSThreadFriendRequestStatusRequestSent withTransaction:nil];
|
||||
[message.thread saveFriendRequestStatus:TSThreadFriendRequestStatusRequestSent withTransaction:nil];
|
||||
|
||||
// We also want to expire the message after 72 hours
|
||||
NSTimeInterval expireTimeInterval = 72 * kHourInterval;
|
||||
|
@ -1136,7 +1136,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
|
|||
// Loki
|
||||
// ========
|
||||
if (messageType == TSFriendRequestMessageType) {
|
||||
[message.thread setFriendRequestStatus:TSThreadFriendRequestStatusNone withTransaction:nil];
|
||||
[message.thread saveFriendRequestStatus:TSThreadFriendRequestStatusNone withTransaction:nil];
|
||||
}
|
||||
// ========
|
||||
// Handle the error
|
||||
|
|
Loading…
Reference in New Issue