Minor refactoring

pull/175/head
nielsandriesse 4 years ago
parent e60dfe99c5
commit 34d79210c0

@ -83,27 +83,23 @@ public final class SessionMetaProtocol : NSObject {
/// send them if certain conditions are met.
@objc(shouldSendTypingIndicatorForThread:)
public static func shouldSendTypingIndicator(for thread: TSThread) -> Bool {
guard !thread.isGroupThread(), let contact = thread.contactIdentifier() else { return false }
var isFriend = false;
guard !thread.isGroupThread(), let contactID = thread.contactIdentifier() else { return false }
var isContactFriend = false
storage.dbReadConnection.read { transaction in
isFriend = storage.getFriendRequestStatus(for: contact, transaction: transaction) == .friends
isContactFriend = (storage.getFriendRequestStatus(for: contactID, transaction: transaction) == .friends)
}
return isFriend
return isContactFriend
}
// MARK: Receipts
@objc(shouldSendReceiptForThread:)
public static func shouldSendReceipt(for thread: TSThread) -> Bool {
guard !thread.isGroupThread(), let contact = thread.contactIdentifier() else { return false }
var shouldSendReceipt = false;
guard !thread.isGroupThread(), let contactID = thread.contactIdentifier() else { return false }
var isContactFriend = false
storage.dbReadConnection.read { transaction in
shouldSendReceipt = storage.getFriendRequestStatus(for: contact, transaction: transaction) == .friends
isContactFriend = (storage.getFriendRequestStatus(for: contactID, transaction: transaction) == .friends)
}
return shouldSendReceipt
return isContactFriend
}
// MARK: - Receiving

@ -155,7 +155,6 @@ public final class MultiDeviceProtocol : NSObject {
let isSlaveDeviceThread = masterHexEncodedPublicKey != hexEncodedPublicKey
thread.isForceHidden = isSlaveDeviceThread // TODO: Could we make this computed?
thread.save(with: transaction)
let result = FriendRequestMessage(outgoingMessageWithTimestamp: NSDate.ows_millisecondTimeStamp(), in: thread,
messageBody: "Please accept to enable messages to be synced across devices",
attachmentIds: [], expiresInSeconds: 0, expireStartedAt: 0, isVoiceMessage: false,
@ -172,7 +171,7 @@ public final class MultiDeviceProtocol : NSObject {
/// See [Auto-Generated Friend Requests](https://github.com/loki-project/session-protocol-docs/wiki/Auto-Generated-Friend-Requests) for more information.
public static func getAutoGeneratedMultiDeviceFRMessageSend(for hexEncodedPublicKey: String, in transaction: YapDatabaseReadWriteTransaction, seal externalSeal: Resolver<Void>? = nil) -> Promise<OWSMessageSend> {
// We don't update friend request status here as it is done in OWSMessageSender.sendMessage(:)
// We don't update the friend request status; that's done in OWSMessageSender.sendMessage(_:)
let thread = TSContactThread.getOrCreateThread(withContactId: hexEncodedPublicKey, transaction: transaction)
let message = getAutoGeneratedMultiDeviceFRMessage(for: hexEncodedPublicKey, in: transaction)
let recipient = SignalRecipient.getOrBuildUnsavedRecipient(forRecipientId: hexEncodedPublicKey, transaction: transaction)

@ -167,6 +167,7 @@ public final class SyncMessagesProtocol : NSObject {
let hexEncodedPublicKeys = parser.parseHexEncodedPublicKeys()
// Try to establish sessions
for hexEncodedPublicKey in hexEncodedPublicKeys {
// We don't update the friend request status; that's done in OWSMessageSender.sendMessage(_:)
let thread = TSContactThread.getOrCreateThread(withContactId: hexEncodedPublicKey, transaction: transaction)
let friendRequestStatus = storage.getFriendRequestStatus(for: hexEncodedPublicKey, transaction: transaction)
switch friendRequestStatus {
@ -174,10 +175,11 @@ public final class SyncMessagesProtocol : NSObject {
let messageSender = SSKEnvironment.shared.messageSender
// TODO: Does the function below need to handle multi device??
// We need to send a FR message here directly to the user. Multi device doesn't come into play.
// TODO: Say A1 has a conversation with B1 and B2. A2 is now linked to A1. We'd want A2 to establish
// sessions with both B1 and B2, right?
let autoGeneratedFRMessage = MultiDeviceProtocol.getAutoGeneratedMultiDeviceFRMessage(for: hexEncodedPublicKey, in: transaction)
thread.isForceHidden = true
thread.save(with: transaction)
// This takes into account multi device
messageSender.send(autoGeneratedFRMessage, success: {
DispatchQueue.main.async {

@ -5,7 +5,7 @@ import XCTest
class SyncMessagesProtocolTests : XCTestCase {
private var storage: OWSPrimaryStorage { OWSPrimaryStorage.shared() }
private var messageSender: OWSFakeMessageSender { return MockSSKEnvironment.shared.messageSender as! OWSFakeMessageSender }
private var messageSender: OWSFakeMessageSender { MockSSKEnvironment.shared.messageSender as! OWSFakeMessageSender }
override func setUp() {
super.setUp()
@ -35,34 +35,23 @@ 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;
let expectation = self.expectation(description: "Send friend request messages")
var messageCount = 0
let messageSender = self.messageSender
messageSender.sendMessageWasCalledBlock = { 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
return XCTFail("Expected a friend request to be sent, but found: \(sentMessage).")
}
guard messageCount == hexEncodedPublicKeys.count else { return }
expectation.fulfill()
messageSender.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
wait(for: [ expectation ], timeout: 1)
/* TODO: Re-enable when we've split friend request logic from OWSMessageSender
hexEncodedPublicKeys.forEach { hexEncodedPublicKey in
var friendRequestStatus: LKFriendRequestStatus!
storage.dbReadWriteConnection.readWrite { transaction in

@ -210,20 +210,16 @@ public class LokiP2PAPI : NSObject {
}
private static func getAllFriendThreads() -> [TSContactThread] {
var friendThreadIds = [String]()
var friendThreadIDs: [String] = []
storage.dbReadConnection.read { transaction in
TSContactThread.enumerateCollectionObjects(with: transaction) { (object, _) in
guard let thread = object as? TSContactThread, let uniqueId = thread.uniqueId, thread.contactIdentifier() == ourHexEncodedPubKey else { return }
TSContactThread.enumerateCollectionObjects(with: transaction) { object, _ in
guard let thread = object as? TSContactThread, let uniqueID = thread.uniqueId, thread.contactIdentifier() == ourHexEncodedPubKey else { return }
let status = storage.getFriendRequestStatus(for: thread.contactIdentifier(), transaction: transaction)
if (status == .friends) {
friendThreadIds.append(uniqueId)
}
guard status == .friends else { return }
friendThreadIDs.append(uniqueID)
}
}
return friendThreadIds.compactMap { TSContactThread.fetch(uniqueId: $0) }
return friendThreadIDs.compactMap { TSContactThread.fetch(uniqueId: $0) }
}
private static func createLokiAddressMessage(for thread: TSThread, isPing: Bool) -> LokiAddressMessage? {

@ -25,7 +25,7 @@ typedef NS_ENUM(NSInteger, LKMessageFriendRequestStatus) {
LKMessageFriendRequestStatusAccepted,
LKMessageFriendRequestStatusDeclined,
LKMessageFriendRequestStatusExpired
} __deprecated_enum_msg("This is no longer used since v1.1.2.");
} __deprecated_enum_msg("no longer used as of version 1.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 __deprecated_msg("Deprecated since v1.1.2. Please don't rely on this to show the friend request UI");
@property (nonatomic) LKMessageFriendRequestStatus friendRequestStatus __deprecated_msg("no longer used as of version 1.1.2");
@property (nonatomic, readonly) NSString *friendRequestStatusDescription;
@property (nonatomic) uint64_t friendRequestExpiresAt;
@property (nonatomic, readonly) BOOL isFriendRequest;

Loading…
Cancel
Save