From 3cf87d40ab34cad07f525fcf49701e28891aa273 Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Mon, 30 Nov 2020 15:06:05 +1100 Subject: [PATCH] Fix note to self --- .../Sending & Receiving/MessageSender.swift | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/SessionMessagingKit/Sending & Receiving/MessageSender.swift b/SessionMessagingKit/Sending & Receiving/MessageSender.swift index 8b0299fab..4049eab15 100644 --- a/SessionMessagingKit/Sending & Receiving/MessageSender.swift +++ b/SessionMessagingKit/Sending & Receiving/MessageSender.swift @@ -57,23 +57,33 @@ public final class MessageSender : NSObject { if message.sentTimestamp == nil { // Visible messages will already have their sent timestamp set message.sentTimestamp = NSDate.millisecondTimestamp() } - message.sender = storage.getUserPublicKey() + let userPublicKey = storage.getUserPublicKey() + message.sender = userPublicKey switch destination { case .contact(let publicKey): message.recipient = publicKey case .closedGroup(let groupPublicKey): message.recipient = groupPublicKey case .openGroup(_, _): preconditionFailure() } + let isSelfSend = (message.recipient == userPublicKey) // Set the failure handler (for precondition failure handling) let _ = promise.catch(on: DispatchQueue.main) { error in storage.withAsync({ transaction in MessageSender.handleFailedMessageSend(message, with: error, using: transaction) }, completion: { }) - if case .contact(_) = destination, message is VisibleMessage { + if case .contact(_) = destination, message is VisibleMessage, !isSelfSend { NotificationCenter.default.post(name: .messageSendingFailed, object: NSNumber(value: message.sentTimestamp!)) } } // Validate the message guard message.isValid else { seal.reject(Error.invalidMessage); return promise } + // Stop here if this is a self-send + guard !isSelfSend else { + storage.withAsync({ transaction in + MessageSender.handleSuccessfulMessageSend(message, using: transaction) + }, completion: { }) + seal.fulfill(()) + return promise + } // Attach the user's profile if needed if let message = message as? VisibleMessage { let displayName = storage.getUserDisplayName()! @@ -101,7 +111,7 @@ public final class MessageSender : NSObject { return promise } // Encrypt the serialized protobuf - if case .contact(_) = destination, message is VisibleMessage { + if case .contact(_) = destination, message is VisibleMessage, !isSelfSend { DispatchQueue.main.async { NotificationCenter.default.post(name: .encryptingMessage, object: NSNumber(value: message.sentTimestamp!)) } @@ -140,7 +150,7 @@ public final class MessageSender : NSObject { return promise } // Calculate proof of work - if case .contact(_) = destination, message is VisibleMessage { + if case .contact(_) = destination, message is VisibleMessage, !isSelfSend { DispatchQueue.main.async { NotificationCenter.default.post(name: .calculatingMessagePoW, object: NSNumber(value: message.sentTimestamp!)) } @@ -153,7 +163,7 @@ public final class MessageSender : NSObject { return promise } // Send the result - if case .contact(_) = destination, message is VisibleMessage { + if case .contact(_) = destination, message is VisibleMessage, !isSelfSend { DispatchQueue.main.async { NotificationCenter.default.post(name: .messageSending, object: NSNumber(value: message.sentTimestamp!)) } @@ -184,7 +194,7 @@ public final class MessageSender : NSObject { storage.withAsync({ transaction in MessageSender.handleSuccessfulMessageSend(message, using: transaction) }, completion: { }) - if case .contact(_) = destination, message is VisibleMessage { + if case .contact(_) = destination, message is VisibleMessage, !isSelfSend { NotificationCenter.default.post(name: .messageSent, object: NSNumber(value: message.sentTimestamp!)) } if message is VisibleMessage {