|
|
|
@ -108,6 +108,8 @@ public final class FriendRequestProtocol : NSObject {
|
|
|
|
|
print("[Loki] Invalid Session ID: \(hexEncodedPublicKey).")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
let ourHexEncodedPublicKey = getUserHexEncodedPublicKey()
|
|
|
|
|
let ourDevices = LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: ourHexEncodedPublicKey, in: transaction)
|
|
|
|
|
// Accept all outstanding friend requests associated with this user and try to establish sessions with the
|
|
|
|
|
// subset of their devices that haven't sent a friend request.
|
|
|
|
|
let linkedDevices = LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: hexEncodedPublicKey, in: transaction)
|
|
|
|
@ -116,9 +118,7 @@ public final class FriendRequestProtocol : NSObject {
|
|
|
|
|
if friendRequestStatus == .requestReceived {
|
|
|
|
|
storage.setFriendRequestStatus(.friends, for: device, transaction: transaction)
|
|
|
|
|
sendFriendRequestAcceptanceMessage(to: device, using: transaction)
|
|
|
|
|
} else if friendRequestStatus == .requestSent {
|
|
|
|
|
// We sent a friend request to this device before, how can we be sure that it hasn't expired?
|
|
|
|
|
} else if friendRequestStatus == .none || friendRequestStatus == .requestExpired {
|
|
|
|
|
} else if (friendRequestStatus == .none || friendRequestStatus == .requestExpired) && !ourDevices.contains(device) {
|
|
|
|
|
// TODO: We should track these so that we can expire them and resend if needed
|
|
|
|
|
MultiDeviceProtocol.getAutoGeneratedMultiDeviceFRMessageSend(for: device, in: transaction)
|
|
|
|
|
.done(on: OWSDispatch.sendingQueue()) { autoGeneratedFRMessageSend in
|
|
|
|
@ -127,11 +127,13 @@ public final class FriendRequestProtocol : NSObject {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// Send a contact sync message
|
|
|
|
|
// Send a contact sync message if we became friends with another user
|
|
|
|
|
if (!ourDevices.contains(hexEncodedPublicKey)) {
|
|
|
|
|
let masterHexEncodedPublicKey = storage.getMasterHexEncodedPublicKey(for: hexEncodedPublicKey, in: transaction) ?? hexEncodedPublicKey
|
|
|
|
|
let syncManager = SSKEnvironment.shared.syncManager
|
|
|
|
|
syncManager.syncContact(masterHexEncodedPublicKey, transaction: transaction)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@objc(sendFriendRequestAcceptanceMessageToHexEncodedPublicKey:using:)
|
|
|
|
|
public static func sendFriendRequestAcceptanceMessage(to hexEncodedPublicKey: String, using transaction: YapDatabaseReadWriteTransaction) {
|
|
|
|
|