diff --git a/Signal/src/network/PushManager.m b/Signal/src/network/PushManager.m index c6f8ed2a2..9481540ca 100644 --- a/Signal/src/network/PushManager.m +++ b/Signal/src/network/PushManager.m @@ -85,7 +85,7 @@ NSString *const Signal_Message_MarkAsRead_Identifier = @"Signal_Message_MarkAsRe [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleMessageRead:) - name:kMessageMarkedAsReadNotification + name:kIncomingMessageMarkedAsReadNotification object:nil]; return self; diff --git a/SignalServiceKit/src/Devices/OWSLinkedDeviceReadReceipt.h b/SignalServiceKit/src/Devices/OWSLinkedDeviceReadReceipt.h index 90a53c6c5..8a4728c56 100644 --- a/SignalServiceKit/src/Devices/OWSLinkedDeviceReadReceipt.h +++ b/SignalServiceKit/src/Devices/OWSLinkedDeviceReadReceipt.h @@ -13,8 +13,10 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithSenderId:(NSString *)senderId timestamp:(uint64_t)timestamp; -+ (nullable OWSLinkedDeviceReadReceipt *)linkedDeviceReadReceiptWithSenderId:(NSString *)senderId - timestamp:(uint64_t)timestamp; ++ (nullable OWSLinkedDeviceReadReceipt *)findLinkedDeviceReadReceiptWithSenderId:(NSString *)senderId + timestamp:(uint64_t)timestamp + transaction: + (YapDatabaseReadTransaction *)transaction; @end diff --git a/SignalServiceKit/src/Devices/OWSLinkedDeviceReadReceipt.m b/SignalServiceKit/src/Devices/OWSLinkedDeviceReadReceipt.m index eb2d576cb..c07f98bbd 100644 --- a/SignalServiceKit/src/Devices/OWSLinkedDeviceReadReceipt.m +++ b/SignalServiceKit/src/Devices/OWSLinkedDeviceReadReceipt.m @@ -27,13 +27,18 @@ NS_ASSUME_NONNULL_BEGIN { OWSAssert(senderId.length > 0 && timestamp > 0); - return [NSString stringWithFormat:@"%@ %llu", senderId, timestamp]; + return [NSString stringWithFormat:@"%@-%llu", senderId, timestamp]; } -+ (nullable OWSLinkedDeviceReadReceipt *)linkedDeviceReadReceiptWithSenderId:(NSString *)senderId - timestamp:(uint64_t)timestamp ++ (nullable OWSLinkedDeviceReadReceipt *)findLinkedDeviceReadReceiptWithSenderId:(NSString *)senderId + timestamp:(uint64_t)timestamp + transaction: + (YapDatabaseReadTransaction *)transaction { - return [OWSLinkedDeviceReadReceipt fetchObjectWithUniqueID:[self uniqueIdForSenderId:senderId timestamp:timestamp]]; + OWSAssert(transaction); + + return [OWSLinkedDeviceReadReceipt fetchObjectWithUniqueID:[self uniqueIdForSenderId:senderId timestamp:timestamp] + transaction:transaction]; } #pragma mark - Logging diff --git a/SignalServiceKit/src/Devices/OWSRecordTranscriptJob.m b/SignalServiceKit/src/Devices/OWSRecordTranscriptJob.m index cd754520b..50b603c83 100644 --- a/SignalServiceKit/src/Devices/OWSRecordTranscriptJob.m +++ b/SignalServiceKit/src/Devices/OWSRecordTranscriptJob.m @@ -113,7 +113,8 @@ NS_ASSUME_NONNULL_BEGIN sentAt:transcript.expirationStartedAt transaction:transaction]; - [self.readReceiptManager updateOutgoingMessageFromLinkedDevice:outgoingMessage transaction:transaction]; + [self.readReceiptManager applyEarlyReadReceiptsForOutgoingMessageFromLinkedDevice:outgoingMessage + transaction:transaction]; [attachmentsProcessor fetchAttachmentsForMessage:outgoingMessage diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index 258f4909e..90d7539f0 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -898,8 +898,8 @@ NS_ASSUME_NONNULL_BEGIN if (thread && incomingMessage) { // In case we already have a read receipt for this new message (this happens sometimes). - [OWSReadReceiptManager.sharedManager updateIncomingMessage:incomingMessage - transaction:transaction]; + [OWSReadReceiptManager.sharedManager applyEarlyReadReceiptsForIncomingMessage:incomingMessage + transaction:transaction]; // TODO: Do this synchronously. dispatch_async(dispatch_get_main_queue(), ^{ diff --git a/SignalServiceKit/src/Messages/OWSReadReceiptManager.h b/SignalServiceKit/src/Messages/OWSReadReceiptManager.h index af611821a..ad925c6f1 100644 --- a/SignalServiceKit/src/Messages/OWSReadReceiptManager.h +++ b/SignalServiceKit/src/Messages/OWSReadReceiptManager.h @@ -12,7 +12,7 @@ NS_ASSUME_NONNULL_BEGIN @class TSThread; @class YapDatabaseReadWriteTransaction; -extern NSString *const kMessageMarkedAsReadNotification; +extern NSString *const kIncomingMessageMarkedAsReadNotification; // There are four kinds of read receipts: // @@ -44,16 +44,16 @@ extern NSString *const kMessageMarkedAsReadNotification; - (void)processReadReceiptsFromRecipient:(OWSSignalServiceProtosReceiptMessage *)receiptMessage envelope:(OWSSignalServiceProtosEnvelope *)envelope; -- (void)updateOutgoingMessageFromLinkedDevice:(TSOutgoingMessage *)message - transaction:(YapDatabaseReadWriteTransaction *)transaction; +- (void)applyEarlyReadReceiptsForOutgoingMessageFromLinkedDevice:(TSOutgoingMessage *)message + transaction:(YapDatabaseReadWriteTransaction *)transaction; #pragma mark - Linked Device Read Receipts - (void)processReadReceiptsFromLinkedDevice:(NSArray *)readReceiptProtos transaction:(YapDatabaseReadWriteTransaction *)transaction; -- (void)updateIncomingMessage:(TSIncomingMessage *)message - transaction:(YapDatabaseReadWriteTransaction *)transaction; +- (void)applyEarlyReadReceiptsForIncomingMessage:(TSIncomingMessage *)message + transaction:(YapDatabaseReadWriteTransaction *)transaction; #pragma mark - Locally Read diff --git a/SignalServiceKit/src/Messages/OWSReadReceiptManager.m b/SignalServiceKit/src/Messages/OWSReadReceiptManager.m index 872c793f9..bdabd2eac 100644 --- a/SignalServiceKit/src/Messages/OWSReadReceiptManager.m +++ b/SignalServiceKit/src/Messages/OWSReadReceiptManager.m @@ -18,7 +18,7 @@ NS_ASSUME_NONNULL_BEGIN -NSString *const kMessageMarkedAsReadNotification = @"kMessageMarkedAsReadNotification"; +NSString *const kIncomingMessageMarkedAsReadNotification = @"kIncomingMessageMarkedAsReadNotification"; @interface TSRecipientReadReceipt : TSYapDatabaseObject @@ -315,8 +315,8 @@ NSString *const OWSReadReceiptManagerAreReadReceiptsEnabled = @"areReadReceiptsE OWSLinkedDeviceReadReceipt *_Nullable oldReadReceipt = self.toLinkedDevicesReadReceiptMap[threadUniqueId]; if (oldReadReceipt && oldReadReceipt.timestamp > newReadReceipt.timestamp) { - // If there's an existing read receipt for the same thread with - // a newer timestamp, discard the new read receipt. + // If there's an existing "linked device" read receipt for the same thread with + // a newer timestamp, discard this "linked device" read receipt. DDLogVerbose(@"%@ Ignoring redundant read receipt for linked devices.", self.tag); } else { DDLogVerbose(@"%@ Enqueuing read receipt for linked devices.", self.tag); @@ -389,8 +389,8 @@ NSString *const OWSReadReceiptManagerAreReadReceiptsEnabled = @"areReadReceiptsE }); } -- (void)updateOutgoingMessageFromLinkedDevice:(TSOutgoingMessage *)message - transaction:(YapDatabaseReadWriteTransaction *)transaction +- (void)applyEarlyReadReceiptsForOutgoingMessageFromLinkedDevice:(TSOutgoingMessage *)message + transaction:(YapDatabaseReadWriteTransaction *)transaction { OWSAssert(message); OWSAssert(transaction); @@ -414,8 +414,8 @@ NSString *const OWSReadReceiptManagerAreReadReceiptsEnabled = @"areReadReceiptsE #pragma mark - Linked Device Read Receipts -- (void)updateIncomingMessage:(TSIncomingMessage *)message - transaction:(YapDatabaseReadWriteTransaction *)transaction +- (void)applyEarlyReadReceiptsForIncomingMessage:(TSIncomingMessage *)message + transaction:(YapDatabaseReadWriteTransaction *)transaction { OWSAssert(message); OWSAssert(transaction); @@ -427,19 +427,18 @@ NSString *const OWSReadReceiptManagerAreReadReceiptsEnabled = @"areReadReceiptsE return; } - OWSLinkedDeviceReadReceipt *_Nullable readReceipt = [OWSLinkedDeviceReadReceipt linkedDeviceReadReceiptWithSenderId:senderId - timestamp:timestamp]; + OWSLinkedDeviceReadReceipt *_Nullable readReceipt = + [OWSLinkedDeviceReadReceipt findLinkedDeviceReadReceiptWithSenderId:senderId + timestamp:timestamp + transaction:transaction]; if (!readReceipt) { return; } [message markAsReadWithTransaction:transaction sendReadReceipt:NO updateExpiration:YES]; [readReceipt removeWithTransaction:transaction]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] - postNotificationNameAsync:kMessageMarkedAsReadNotification - object:message]; - }); + + [[NSNotificationCenter defaultCenter] postNotificationNameAsync:kIncomingMessageMarkedAsReadNotification + object:message]; } - (void)processReadReceiptsFromLinkedDevice:(NSArray *)readReceiptProtos @@ -545,11 +544,8 @@ NSString *const OWSReadReceiptManagerAreReadReceiptsEnabled = @"areReadReceiptsE if ([possiblyRead isKindOfClass:[TSIncomingMessage class]]) { TSIncomingMessage *incomingMessage = (TSIncomingMessage *)possiblyRead; - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] - postNotificationNameAsync:kMessageMarkedAsReadNotification - object:incomingMessage]; - }); + [[NSNotificationCenter defaultCenter] postNotificationNameAsync:kIncomingMessageMarkedAsReadNotification + object:incomingMessage]; } } } diff --git a/SignalServiceKit/src/Network/API/OWSUploadingService.m b/SignalServiceKit/src/Network/API/OWSUploadingService.m index fc3e4ca19..97127bdb2 100644 --- a/SignalServiceKit/src/Network/API/OWSUploadingService.m +++ b/SignalServiceKit/src/Network/API/OWSUploadingService.m @@ -168,13 +168,13 @@ static const CGFloat kAttachmentUploadProgressTheta = 0.001f; - (void)fireProgressNotification:(CGFloat)progress attachmentId:(NSString *)attachmentId { - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter postNotificationNameAsync:kAttachmentUploadProgressNotification - object:nil - userInfo:@{ - kAttachmentUploadProgressKey : @(progress), - kAttachmentUploadAttachmentIDKey : attachmentId - }]; + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter postNotificationNameAsync:kAttachmentUploadProgressNotification + object:nil + userInfo:@{ + kAttachmentUploadProgressKey : @(progress), + kAttachmentUploadAttachmentIDKey : attachmentId + }]; } #pragma mark - Logging diff --git a/SignalServiceKit/src/Storage/TSDatabaseView.m b/SignalServiceKit/src/Storage/TSDatabaseView.m index 6d2e1b5b1..19cf4fcab 100644 --- a/SignalServiceKit/src/Storage/TSDatabaseView.m +++ b/SignalServiceKit/src/Storage/TSDatabaseView.m @@ -442,12 +442,10 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { [TSDatabaseView.sharedInstance setAreAllAsyncRegistrationsComplete]; - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] - postNotificationNameAsync:kNSNotificationName_DatabaseViewRegistrationComplete - object:nil - userInfo:nil]; - }); + [[NSNotificationCenter defaultCenter] + postNotificationNameAsync:kNSNotificationName_DatabaseViewRegistrationComplete + object:nil + userInfo:nil]; }]; }