diff --git a/SessionMessagingKit/Database/Storage+Messaging.swift b/SessionMessagingKit/Database/Storage+Messaging.swift index ca4149fa0..852503f2d 100644 --- a/SessionMessagingKit/Database/Storage+Messaging.swift +++ b/SessionMessagingKit/Database/Storage+Messaging.swift @@ -42,6 +42,9 @@ extension Storage { } else { tsMessage = TSIncomingMessage.from(message, quotedMessage: quotedMessage, linkPreview: linkPreview, associatedWith: thread) } + if let serverTimestamp = message.receivedTimestamp, openGroupID != nil { + tsMessage.setServerTimestampToReceivedTimestamp(serverTimestamp) + } tsMessage.save(with: transaction) tsMessage.attachments(with: transaction).forEach { attachment in attachment.albumMessageId = tsMessage.uniqueId! diff --git a/SessionMessagingKit/Messages/Signal/TSInteraction.m b/SessionMessagingKit/Messages/Signal/TSInteraction.m index 2c21a3997..e7cc710cf 100644 --- a/SessionMessagingKit/Messages/Signal/TSInteraction.m +++ b/SessionMessagingKit/Messages/Signal/TSInteraction.m @@ -199,13 +199,10 @@ NSString *NSStringFromOWSInteractionType(OWSInteractionType value) // In open groups messages should be sorted by server timestamp. `sortId` represents the order in which messages // were processed. Since in the open group poller we sort messages by their server timestamp, sorting by `sortId` is // effectively the same as sorting by server timestamp. - if ([self isKindOfClass:TSMessage.class] && ((TSMessage *)self).isOpenGroupMessage) { - sortId1 = self.sortId; - sortId2 = other.sortId; - } else { - sortId1 = self.timestamp; - sortId2 = other.timestamp; - } + // sortId == receivedAtTimestamp for open group messages. + // sortId == sendTimestamp for one-to-one and closed group messages. + sortId1 = self.sortId; + sortId2 = other.sortId; if (sortId1 > sortId2) { return NSOrderedDescending; @@ -229,6 +226,14 @@ NSString *NSStringFromOWSInteractionType(OWSInteractionType value) (unsigned long)self.timestamp]; } +- (uint64_t)sortId +{ + if ([self isKindOfClass:TSMessage.class] && ((TSMessage *)self).isOpenGroupMessage) { + return self.receivedAtTimestamp; + } + return self.timestamp; +} + - (void)saveWithTransaction:(YapDatabaseReadWriteTransaction *)transaction { if (!self.uniqueId) { diff --git a/SessionMessagingKit/Sending & Receiving/MessageReceiver.swift b/SessionMessagingKit/Sending & Receiving/MessageReceiver.swift index 20daff6db..63a73a80f 100644 --- a/SessionMessagingKit/Sending & Receiving/MessageReceiver.swift +++ b/SessionMessagingKit/Sending & Receiving/MessageReceiver.swift @@ -145,7 +145,11 @@ public enum MessageReceiver { message.sender = sender message.recipient = userPublicKey message.sentTimestamp = envelope.timestamp - message.receivedTimestamp = NSDate.millisecondTimestamp() + if (isOpenGroupMessage) { + message.receivedTimestamp = envelope.serverTimestamp + } else { + message.receivedTimestamp = NSDate.millisecondTimestamp() + } message.groupPublicKey = groupPublicKey message.openGroupServerMessageID = openGroupMessageServerID // Validate diff --git a/SessionMessagingKit/Sending & Receiving/Read Tracking/OWSReadReceiptManager.m b/SessionMessagingKit/Sending & Receiving/Read Tracking/OWSReadReceiptManager.m index 13a1b39c2..3a98e6fc3 100644 --- a/SessionMessagingKit/Sending & Receiving/Read Tracking/OWSReadReceiptManager.m +++ b/SessionMessagingKit/Sending & Receiving/Read Tracking/OWSReadReceiptManager.m @@ -267,6 +267,7 @@ NSString *const OWSReadReceiptManagerAreReadReceiptsEnabled = @"areReadReceiptsE } id possiblyRead = (id)object; if (possiblyRead.sortId > sortId) { + uint64_t test = possiblyRead.sortId; *stop = YES; return; }