Deprecate friendRequestState on TSMessage.

pull/175/head
Mikunj 4 years ago
parent b1345104da
commit 71297fb4ec

@ -150,13 +150,11 @@ final class FriendRequestView : UIView {
// MARK: Interaction
@objc private func accept() {
guard let message = message as? TSIncomingMessage else { preconditionFailure() }
message.saveFriendRequestStatus(.accepted, with: nil)
delegate?.acceptFriendRequest(message)
}
@objc private func decline() {
guard let message = message as? TSIncomingMessage else { preconditionFailure() }
message.saveFriendRequestStatus(.declined, with: nil)
delegate?.declineFriendRequest(message)
}

@ -921,7 +921,7 @@ typedef void (^ProfileManagerFailureBlock)(NSError *error);
NSData *groupId = groupThread.groupModel.groupId;
return [self isGroupIdInProfileWhitelist:groupId];
} else if ([LKFriendRequestProtocol isFriendsWithLinkedDevicesOfHexEncodedPublicKey:thread.contactIdentifier]) {
return true
return true;
} else {
NSString *recipientId = thread.contactIdentifier;
return [self isUserInProfileWhitelist:recipientId];

@ -127,7 +127,6 @@ public final class FriendRequestExpirationJob : NSObject {
// Loki: Expire the friend request message
strongSelf.storage.setFriendRequestStatus(.requestExpired, for: message.thread.contactIdentifier()!, transaction: transaction)
message.saveFriendRequestStatus(.expired, with: transaction)
message.saveFriendRequestExpires(at: 0, with: transaction)
}, transaction: transaction)
}

@ -227,27 +227,15 @@ public final class FriendRequestProtocol : NSObject {
guard !envelope.isGroupChatMessage && envelope.type != .friendRequest else { return }
// If we get an envelope that isn't a friend request, then we can infer that we had to use
// Signal cipher decryption and thus that we have a session with the other person.
let thread = TSContactThread.getOrCreateThread(withContactId: hexEncodedPublicKey, transaction: transaction)
let friendRequestStatus = storage.getFriendRequestStatus(for: hexEncodedPublicKey, transaction: transaction);
// We shouldn't be able to skip from none to friends
guard friendRequestStatus != .none else { return }
// Become friends
storage.setFriendRequestStatus(.friends, for: hexEncodedPublicKey, transaction: transaction)
if let existingFriendRequestMessage = thread.getLastInteraction(with: transaction) as? TSOutgoingMessage,
existingFriendRequestMessage.isFriendRequest {
existingFriendRequestMessage.saveFriendRequestStatus(.accepted, with: transaction)
}
/*
// Send our P2P details
if let addressMessage = LokiP2PAPI.onlineBroadcastMessage(forThread: thread) {
let messageSenderJobQueue = SSKEnvironment.shared.messageSenderJobQueue
messageSenderJobQueue.add(message: addressMessage, transaction: transaction)
}
*/
}
@objc(handleFriendRequestMessageIfNeeded:associatedWith:wrappedIn:in:using:)
public static func handleFriendRequestMessageIfNeeded(_ dataMessage: SSKProtoDataMessage, associatedWith message: TSIncomingMessage, wrappedIn envelope: SSKProtoEnvelope, in thread: TSThread, using transaction: YapDatabaseReadWriteTransaction) {
@objc(handleFriendRequestMessageIfNeededFromEnvelope:using:)
public static func handleFriendRequestMessageIfNeeded(from envelope: SSKProtoEnvelope, using transaction: YapDatabaseReadWriteTransaction) {
guard !envelope.isGroupChatMessage else {
print("[Loki] Ignoring friend request in group chat.")
return
@ -261,15 +249,6 @@ public final class FriendRequestProtocol : NSObject {
}
if canFriendRequestBeAutoAccepted(for: hexEncodedPublicKey, using: transaction) {
storage.setFriendRequestStatus(.friends, for: hexEncodedPublicKey, transaction: transaction)
var existingFriendRequestMessage: TSOutgoingMessage?
thread.enumerateInteractions(with: transaction) { interaction, _ in
if let outgoingMessage = interaction as? TSOutgoingMessage, outgoingMessage.isFriendRequest {
existingFriendRequestMessage = outgoingMessage
}
}
if let existingFriendRequestMessage = existingFriendRequestMessage {
existingFriendRequestMessage.saveFriendRequestStatus(.accepted, with: transaction)
}
sendFriendRequestAcceptanceMessage(to: hexEncodedPublicKey, using: transaction)
} else if storage.getFriendRequestStatus(for: hexEncodedPublicKey, transaction: transaction) != .friends {
// Checking that the sender of the message isn't already a friend is necessary because otherwise
@ -278,18 +257,6 @@ public final class FriendRequestProtocol : NSObject {
// request. Alice's thread's friend request status is reset to
// LKThreadFriendRequestStatusRequestReceived.
storage.setFriendRequestStatus(.requestReceived, for: hexEncodedPublicKey, transaction: transaction)
// Except for the message.friendRequestStatus = LKMessageFriendRequestStatusPending line below, all of this is to ensure that
// there's only ever one message with status LKMessageFriendRequestStatusPending in a thread (where a thread is the combination
// of all threads belonging to the linked devices of a user).
let linkedDeviceThreads = LokiDatabaseUtilities.getLinkedDeviceThreads(for: hexEncodedPublicKey, in: transaction)
for thread in linkedDeviceThreads {
thread.enumerateInteractions(with: transaction) { interaction, _ in
guard let incomingMessage = interaction as? TSIncomingMessage, incomingMessage.friendRequestStatus != .none else { return }
incomingMessage.saveFriendRequestStatus(.none, with: transaction)
}
}
message.friendRequestStatus = .pending
// Don't save yet. This is done in finalizeIncomingMessage:thread:masterThread:envelope:transaction.
}
}
}

@ -5,6 +5,7 @@ import XCTest
class SyncMessagesProtocolTests : XCTestCase {
private var storage: OWSPrimaryStorage { OWSPrimaryStorage.shared() }
private var messageSender: OWSFakeMessageSender { return MockSSKEnvironment.shared.messageSender as! OWSFakeMessageSender }
override func setUp() {
super.setUp()
@ -34,9 +35,34 @@ class SyncMessagesProtocolTests : XCTestCase {
let contactData = Data(base64Encoded: base64EncodedContactData)!
let parser = ContactParser(data: contactData)
let hexEncodedPublicKeys = parser.parseHexEncodedPublicKeys()
let expectation = self.expectation(description: "sent friend request messages")
var messageCount = 0;
messageSender.sendMessageWasCalledBlock = { [weak messageSender] sentMessage in
messageCount += 1;
guard sentMessage is FriendRequestMessage else {
XCTFail("unexpected sentMessage: \(sentMessage)")
return
}
if (messageCount == hexEncodedPublicKeys.count) {
expectation.fulfill()
guard let strongMessageSender = messageSender else {
return
}
strongMessageSender.sendMessageWasCalledBlock = nil
}
}
storage.dbReadWriteConnection.readWrite { transaction in
SyncMessagesProtocol.handleContactSyncMessageData(contactData, using: transaction)
}
self.wait(for: [expectation], timeout: 1.0)
/* TODO: Re-enable when we split friend request logic from OWSMessageSender
hexEncodedPublicKeys.forEach { hexEncodedPublicKey in
var friendRequestStatus: LKFriendRequestStatus!
storage.dbReadWriteConnection.readWrite { transaction in
@ -44,6 +70,7 @@ class SyncMessagesProtocolTests : XCTestCase {
}
XCTAssert(friendRequestStatus == .requestSent)
}
*/
// TODO: Test the case where Bob has multiple devices
}
}

@ -25,7 +25,7 @@ typedef NS_ENUM(NSInteger, LKMessageFriendRequestStatus) {
LKMessageFriendRequestStatusAccepted,
LKMessageFriendRequestStatusDeclined,
LKMessageFriendRequestStatusExpired
};
} __deprecated_enum_msg("This is no longer used since v1.1.2.");
@interface TSMessage : TSInteraction <OWSPreviewText>
@ -39,7 +39,7 @@ typedef NS_ENUM(NSInteger, LKMessageFriendRequestStatus) {
@property (nonatomic, readonly, nullable) OWSContact *contactShare;
@property (nonatomic, nullable) OWSLinkPreview *linkPreview;
// Loki friend request handling
@property (nonatomic) LKMessageFriendRequestStatus friendRequestStatus;
@property (nonatomic) LKMessageFriendRequestStatus friendRequestStatus __deprecated_msg("Deprecated since v1.1.2. Please don't rely on this to show the friend request UI");
@property (nonatomic, readonly) NSString *friendRequestStatusDescription;
@property (nonatomic) uint64_t friendRequestExpiresAt;
@property (nonatomic, readonly) BOOL isFriendRequest;
@ -93,7 +93,6 @@ typedef NS_ENUM(NSInteger, LKMessageFriendRequestStatus) {
#pragma mark - Loki Friend Request Handling
- (void)saveFriendRequestStatus:(LKMessageFriendRequestStatus)friendRequestStatus withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction;
- (void)saveFriendRequestExpiresAt:(u_int64_t)expiresAt withTransaction:(YapDatabaseReadWriteTransaction *_Nullable)transaction;
#pragma mark - Open Groups

@ -1549,7 +1549,7 @@ NS_ASSUME_NONNULL_BEGIN
}
// Loki: Do this before the check below
[LKFriendRequestProtocol handleFriendRequestMessageIfNeeded:dataMessage associatedWith:incomingMessage wrappedIn:envelope in:thread using:transaction];
[LKFriendRequestProtocol handleFriendRequestMessageIfNeededFromEnvelope:envelope using:transaction];
if (body.length == 0 && attachmentPointers.count < 1 && !contact) {
OWSLogWarn(@"Ignoring empty incoming message from: %@ with timestamp: %lu.",

@ -1229,7 +1229,6 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
[((TSContactThread *) message.thread) removeAllSessionRestoreDevicesWithTransaction:transaction];
}
// Update the message
[message saveFriendRequestStatus:LKMessageFriendRequestStatusPending withTransaction:transaction];
NSTimeInterval expirationInterval = 72 * kHourInterval;
NSDate *expirationDate = [[NSDate new] dateByAddingTimeInterval:expirationInterval];
[message saveFriendRequestExpiresAt:[NSDate ows_millisecondsSince1970ForDate:expirationDate] withTransaction:transaction];

Loading…
Cancel
Save