diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index 1db0fb6e9..c12916e36 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -3934,8 +3934,8 @@ typedef enum : NSUInteger { // No visible messages yet. New Thread. return; } - // MJK FIXME - uncomment and implement - // [OWSReadReceiptManager.sharedManager markAsReadLocallyBeforeSortId:lastVisibleSortId thread:self.thread]; + + [OWSReadReceiptManager.sharedManager markAsReadLocallyBeforeSortId:self.lastVisibleSortId thread:self.thread]; } - (void)updateGroupModelTo:(TSGroupModel *)newGroupModel successCompletion:(void (^_Nullable)(void))successCompletion diff --git a/SignalServiceKit/src/Messages/OWSReadReceiptManager.h b/SignalServiceKit/src/Messages/OWSReadReceiptManager.h index f97e32ab7..e9500db9e 100644 --- a/SignalServiceKit/src/Messages/OWSReadReceiptManager.h +++ b/SignalServiceKit/src/Messages/OWSReadReceiptManager.h @@ -69,7 +69,7 @@ extern NSString *const kIncomingMessageMarkedAsReadNotification; // This method can be called from any thread. - (void)messageWasReadLocally:(TSIncomingMessage *)message; -- (void)markAsReadLocallyBeforeTimestamp:(uint64_t)timestamp thread:(TSThread *)thread; +- (void)markAsReadLocallyBeforeSortId:(uint64_t)sortId thread:(TSThread *)thread; #pragma mark - Settings diff --git a/SignalServiceKit/src/Messages/OWSReadReceiptManager.m b/SignalServiceKit/src/Messages/OWSReadReceiptManager.m index 850c3f9ae..832721f31 100644 --- a/SignalServiceKit/src/Messages/OWSReadReceiptManager.m +++ b/SignalServiceKit/src/Messages/OWSReadReceiptManager.m @@ -281,17 +281,17 @@ NSString *const OWSReadReceiptManagerAreReadReceiptsEnabled = @"areReadReceiptsE #pragma mark - Mark as Read Locally -- (void)markAsReadLocallyBeforeTimestamp:(uint64_t)timestamp thread:(TSThread *)thread +- (void)markAsReadLocallyBeforeSortId:(uint64_t)sortId thread:(TSThread *)thread { OWSAssertDebug(thread); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { - [self markAsReadBeforeTimestamp:timestamp - thread:thread - readTimestamp:[NSDate ows_millisecondTimeStamp] - wasLocal:YES - transaction:transaction]; + [self markAsReadBeforeSortId:sortId + thread:thread + readTimestamp:[NSDate ows_millisecondTimeStamp] + wasLocal:YES + transaction:transaction]; }]; }); } @@ -493,27 +493,23 @@ NSString *const OWSReadReceiptManagerAreReadReceiptsEnabled = @"areReadReceiptsE // Always re-mark the message as read to ensure any earlier read time is applied to disappearing messages. [message markAsReadAtTimestamp:readTimestamp sendReadReceipt:NO transaction:transaction]; - // Also mark any messages appearing earlier in the thread as read. - // - // Use `timestampForSorting` which reflects local received order, rather than `timestamp` - // which reflect sender time. - // MJK FIXME - use sortID - [self markAsReadBeforeTimestamp:message.timestampForLegacySorting - thread:[message threadWithTransaction:transaction] - readTimestamp:readTimestamp - wasLocal:NO - transaction:transaction]; + // Also mark any unread messages appearing earlier in the thread as read as well. + [self markAsReadBeforeSortId:message.sortId + thread:[message threadWithTransaction:transaction] + readTimestamp:readTimestamp + wasLocal:NO + transaction:transaction]; } #pragma mark - Mark As Read -- (void)markAsReadBeforeTimestamp:(uint64_t)timestamp - thread:(TSThread *)thread - readTimestamp:(uint64_t)readTimestamp - wasLocal:(BOOL)wasLocal - transaction:(YapDatabaseReadWriteTransaction *)transaction +- (void)markAsReadBeforeSortId:(uint64_t)sortId + thread:(TSThread *)thread + readTimestamp:(uint64_t)readTimestamp + wasLocal:(BOOL)wasLocal + transaction:(YapDatabaseReadWriteTransaction *)transaction { - OWSAssertDebug(timestamp > 0); + OWSAssertDebug(sortId > 0); OWSAssertDebug(thread); OWSAssertDebug(transaction); @@ -537,8 +533,7 @@ NSString *const OWSReadReceiptManagerAreReadReceiptsEnabled = @"areReadReceiptsE return; } id possiblyRead = (id)object; - // MJK FIXME - use sortId - if (possiblyRead.timestampForLegacySorting > timestamp) { + if (possiblyRead.sortId > sortId) { *stop = YES; return; } diff --git a/SignalServiceKit/src/Messages/OWSReadTracking.h b/SignalServiceKit/src/Messages/OWSReadTracking.h index 04f5d83e6..e3314ea83 100644 --- a/SignalServiceKit/src/Messages/OWSReadTracking.h +++ b/SignalServiceKit/src/Messages/OWSReadTracking.h @@ -16,7 +16,7 @@ @property (nonatomic, readonly, getter=wasRead) BOOL read; @property (nonatomic, readonly) uint64_t expireStartedAt; -@property (nonatomic, readonly) uint64_t timestampForLegacySorting; +@property (nonatomic, readonly) uint64_t sortId; @property (nonatomic, readonly) NSString *uniqueThreadId;