diff --git a/Session/Conversations/ConversationVC.swift b/Session/Conversations/ConversationVC.swift index a48223371..35f5e1dde 100644 --- a/Session/Conversations/ConversationVC.swift +++ b/Session/Conversations/ConversationVC.swift @@ -353,6 +353,7 @@ final class ConversationVC : BaseVC, ConversationViewModelDelegate, OWSConversat case .delete: self.messagesTableView.deleteRows(at: [ IndexPath(row: Int(update.oldIndex), section: 0) ], with: .fade) case .insert: + print("[Test] INSERT") // Perform inserts before updates self.messagesTableView.insertRows(at: [ IndexPath(row: Int(update.newIndex), section: 0) ], with: .fade) if update.viewItem?.interaction is TSOutgoingMessage { diff --git a/SessionMessagingKit/Sending & Receiving/MessageSender.swift b/SessionMessagingKit/Sending & Receiving/MessageSender.swift index 8b4cfdff0..4994a13a1 100644 --- a/SessionMessagingKit/Sending & Receiving/MessageSender.swift +++ b/SessionMessagingKit/Sending & Receiving/MessageSender.swift @@ -337,10 +337,12 @@ public final class MessageSender : NSObject { let thread = TSGroupThread.fetch(uniqueId: threadID, transaction: transaction), thread.isClosedGroup { recipients = thread.groupModel.groupMemberIds } - recipients.forEach { recipient in - tsMessage.update(withSentRecipient: recipient, wasSentByUD: true, transaction: transaction) + if !tsMessage.wasSentToAnyRecipient { + recipients.forEach { recipient in + tsMessage.update(withSentRecipient: recipient, wasSentByUD: true, transaction: transaction) + } + MessageInvalidator.invalidate(tsMessage, with: transaction) } - MessageInvalidator.invalidate(tsMessage, with: transaction) // Start the disappearing messages timer if needed OWSDisappearingMessagesJob.shared().startAnyExpiration(for: tsMessage, expirationStartedAt: NSDate.millisecondTimestamp(), transaction: transaction) } @@ -359,6 +361,8 @@ public final class MessageSender : NSObject { public static func handleFailedMessageSend(_ message: Message, with error: Swift.Error, using transaction: Any) { guard let tsMessage = TSOutgoingMessage.find(withTimestamp: message.sentTimestamp!) else { return } - tsMessage.update(sendingError: error, transaction: transaction as! YapDatabaseReadWriteTransaction) + let transaction = transaction as! YapDatabaseReadWriteTransaction + tsMessage.update(sendingError: error, transaction: transaction) + MessageInvalidator.invalidate(tsMessage, with: transaction) } } diff --git a/SessionMessagingKit/Utilities/MessageInvalidator.swift b/SessionMessagingKit/Utilities/MessageInvalidator.swift index 83619e091..2d87e5c38 100644 --- a/SessionMessagingKit/Utilities/MessageInvalidator.swift +++ b/SessionMessagingKit/Utilities/MessageInvalidator.swift @@ -11,7 +11,7 @@ private override init() { } @objc public static func invalidate(_ message: TSMessage, with transaction: YapDatabaseReadWriteTransaction) { - guard let id = message.uniqueId else { return } + guard let id = message.uniqueId, !isInvalidated(message) else { return } invalidatedMessages.insert(id) message.touch(with: transaction) }