From af7a58cc1fe9c302c9caee3a736a8e0e008f18dd Mon Sep 17 00:00:00 2001 From: Ryan ZHAO Date: Fri, 28 Aug 2020 15:27:59 +1000 Subject: [PATCH] use server timestamp to show the message time in open groups --- .../API/Open Groups/PublicChatPoller.swift | 1 + .../src/Messages/Interactions/TSInteraction.h | 4 ++++ .../src/Messages/Interactions/TSInteraction.m | 18 ++++++++++++++++++ .../src/Messages/OWSMessageManager.m | 5 +++++ 4 files changed, 28 insertions(+) diff --git a/SignalServiceKit/src/Loki/API/Open Groups/PublicChatPoller.swift b/SignalServiceKit/src/Loki/API/Open Groups/PublicChatPoller.swift index 5779c3e1d..b3e3bce27 100644 --- a/SignalServiceKit/src/Loki/API/Open Groups/PublicChatPoller.swift +++ b/SignalServiceKit/src/Loki/API/Open Groups/PublicChatPoller.swift @@ -174,6 +174,7 @@ public final class PublicChatPoller : NSObject { envelope.setSource(senderPublicKey) envelope.setSourceDevice(OWSDevicePrimaryDeviceId) envelope.setContent(try! content.build().serializedData()) + envelope.setServerTimestamp(message.serverTimestamp) try! Storage.writeSync { transaction in transaction.setObject(senderDisplayName, forKey: senderPublicKey, inCollection: publicChat.id) let messageServerID = message.serverID diff --git a/SignalServiceKit/src/Messages/Interactions/TSInteraction.h b/SignalServiceKit/src/Messages/Interactions/TSInteraction.h index 18a9045bd..0af44e964 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSInteraction.h +++ b/SignalServiceKit/src/Messages/Interactions/TSInteraction.h @@ -42,6 +42,10 @@ NSString *NSStringFromOWSInteractionType(OWSInteractionType value); /// Used for public chats where a message sent from a slave device is interpreted as having been sent from the master device. @property (nonatomic) NSString *actualSenderHexEncodedPublicKey; +- (void)setServerTimestampAsReceiveTimestamp:(uint64_t)receivedAtTimestamp; + +- (uint64_t)timestamp; + - (NSDate *)receivedAtDate; - (OWSInteractionType)interactionType; diff --git a/SignalServiceKit/src/Messages/Interactions/TSInteraction.m b/SignalServiceKit/src/Messages/Interactions/TSInteraction.m index 45ea82714..dc5bc492a 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSInteraction.m +++ b/SignalServiceKit/src/Messages/Interactions/TSInteraction.m @@ -41,6 +41,8 @@ NSString *NSStringFromOWSInteractionType(OWSInteractionType value) @implementation TSInteraction +@synthesize timestamp = _timestamp; + + (NSArray *)interactionsWithTimestamp:(uint64_t)timestamp ofClass:(Class)clazz withTransaction:(YapDatabaseReadTransaction *)transaction @@ -175,11 +177,27 @@ NSString *NSStringFromOWSInteractionType(OWSInteractionType value) #pragma mark Date operations +- (uint64_t)timestamp +{ + if (self.thread.isGroupThread) { + TSGroupThread *thread = (TSGroupThread *)self.thread; + if (thread.isPublicChat) { + return _receivedAtTimestamp; + } + } + return _timestamp; +} + - (uint64_t)timestampForLegacySorting { return self.timestamp; } +- (void)setServerTimestampAsReceiveTimestamp:(uint64_t)receivedAtTimestamp +{ + _receivedAtTimestamp = receivedAtTimestamp; +} + - (NSDate *)receivedAtDate { return [NSDate ows_dateWithMillisecondsSince1970:self.receivedAtTimestamp]; diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index 1679e5b80..1029e9025 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -1417,6 +1417,11 @@ NS_ASSUME_NONNULL_BEGIN serverTimestamp:serverTimestamp wasReceivedByUD:wasReceivedByUD]; + //For open group messages, use server timestamp as the receive timestamp + if (oldGroupThread.isPublicChat) { + [incomingMessage setServerTimestampAsReceiveTimestamp:(uint64_t)envelope.serverTimestamp]; + } + // Loki: Set open group server ID if needed if (dataMessage.publicChatInfo != nil && dataMessage.publicChatInfo.hasServerID) { incomingMessage.openGroupServerMessageID = dataMessage.publicChatInfo.serverID;