From b6489c694842ebffd5b565279fdde66d32d627cd Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Mon, 16 Jul 2018 12:39:24 -0400 Subject: [PATCH] Streamline SignalRecipient. --- .../src/Contacts/SignalRecipient.h | 8 ++--- .../src/Contacts/SignalRecipient.m | 29 +++++-------------- .../src/Contacts/Threads/TSContactThread.m | 3 -- .../src/Messages/OWSMessageSender.m | 13 ++++----- 4 files changed, 16 insertions(+), 37 deletions(-) diff --git a/SignalServiceKit/src/Contacts/SignalRecipient.h b/SignalServiceKit/src/Contacts/SignalRecipient.h index a68b70394..3d4763db0 100644 --- a/SignalServiceKit/src/Contacts/SignalRecipient.h +++ b/SignalServiceKit/src/Contacts/SignalRecipient.h @@ -15,14 +15,10 @@ NS_ASSUME_NONNULL_BEGIN + (instancetype)selfRecipient; -+ (SignalRecipient *)ensureRecipientExistsWithRegisteredRecipientId:(NSString *)recipientId - transaction:(YapDatabaseReadWriteTransaction *)transaction; - -+ (SignalRecipient *)ensureRecipientExistsWithRecipientId:(NSString *)recipientId - transaction:(YapDatabaseReadWriteTransaction *)transaction; - + (nullable instancetype)registeredRecipientForRecipientId:(NSString *)recipientId transaction:(YapDatabaseReadTransaction *)transaction; ++ (instancetype)getOrCreatedUnsavedRecipientForRecipientId:(NSString *)recipientId + transaction:(YapDatabaseReadTransaction *)transaction; - (void)addDevices:(NSSet *)set; - (void)removeDevices:(NSSet *)set; diff --git a/SignalServiceKit/src/Contacts/SignalRecipient.m b/SignalServiceKit/src/Contacts/SignalRecipient.m index c6e596102..a5a30d510 100644 --- a/SignalServiceKit/src/Contacts/SignalRecipient.m +++ b/SignalServiceKit/src/Contacts/SignalRecipient.m @@ -31,32 +31,19 @@ NS_ASSUME_NONNULL_BEGIN [super removeWithTransaction:transaction]; } -+ (SignalRecipient *)ensureRecipientExistsWithRegisteredRecipientId:(NSString *)recipientId - transaction:(YapDatabaseReadWriteTransaction *)transaction ++ (instancetype)getOrCreatedUnsavedRecipientForRecipientId:(NSString *)recipientId + transaction:(YapDatabaseReadTransaction *)transaction { - SignalRecipient *recipient = [self ensureRecipientExistsWithRecipientId:recipientId transaction:transaction]; - if (recipient.mayBeUnregistered) { - recipient.mayBeUnregistered = NO; - [recipient saveWithTransaction:transaction]; + OWSAssert(transaction); + OWSAssert(recipientId.length > 0); + + SignalRecipient *_Nullable recipient = [self registeredRecipientForRecipientId:recipientId transaction:transaction]; + if (!recipient) { + recipient = [[self alloc] initWithTextSecureIdentifier:recipientId]; } return recipient; } -+ (SignalRecipient *)ensureRecipientExistsWithRecipientId:(NSString *)recipientId - transaction:(YapDatabaseReadWriteTransaction *)transaction -{ - SignalRecipient *_Nullable recipient = [self recipientForRecipientId:recipientId transaction:transaction]; - if (recipient) { - return recipient; - } - - DDLogDebug(@"%@ creating recipient: %@", self.logTag, recipientId); - - recipient = [[self alloc] initWithTextSecureIdentifier:recipientId]; - [recipient saveWithTransaction:transaction]; - return recipient; -} - - (instancetype)initWithTextSecureIdentifier:(NSString *)textSecureIdentifier { self = [super initWithUniqueId:textSecureIdentifier]; diff --git a/SignalServiceKit/src/Contacts/Threads/TSContactThread.m b/SignalServiceKit/src/Contacts/Threads/TSContactThread.m index d6bd281a6..53464dee5 100644 --- a/SignalServiceKit/src/Contacts/Threads/TSContactThread.m +++ b/SignalServiceKit/src/Contacts/Threads/TSContactThread.m @@ -39,9 +39,6 @@ NS_ASSUME_NONNULL_BEGIN [thread saveWithTransaction:transaction]; } - // TODO: Do we need to _eagerly_ ensure a SignalRecipient instance exists? - [SignalRecipient ensureRecipientExistsWithRecipientId:contactId transaction:transaction]; - return thread; } diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index 147e35bd5..0ea500c23 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -454,8 +454,8 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; NSMutableArray *recipients = [NSMutableArray new]; [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { for (NSString *recipientId in recipientIds) { - SignalRecipient *recipient = - [SignalRecipient ensureRecipientExistsWithRecipientId:recipientId transaction:transaction]; + SignalRecipient *recipient = [SignalRecipient getOrCreatedUnsavedRecipientForRecipientId:recipientId + transaction:transaction]; [recipients addObject:recipient]; } }]; @@ -555,11 +555,10 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; return; } - __block SignalRecipient *recipient; - [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { - recipient = - [SignalRecipient ensureRecipientExistsWithRecipientId:recipientContactId transaction:transaction]; - }]; + NSArray *recipients = + [self signalRecipientsForRecipientIds:@[recipientContactId] message:message]; + OWSAssert(recipients.count == 1); + SignalRecipient *recipient = recipients.firstObject; if (!recipient) { NSError *error = OWSErrorMakeFailedToSendOutgoingMessageError();