Streamline SignalRecipient.

This commit is contained in:
Matthew Chen 2018-07-16 12:39:24 -04:00
parent 05a4222b2d
commit b6489c6948
4 changed files with 16 additions and 37 deletions

View File

@ -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;

View File

@ -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];

View File

@ -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;
}

View File

@ -454,8 +454,8 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
NSMutableArray<SignalRecipient *> *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<SignalRecipient *> *recipients =
[self signalRecipientsForRecipientIds:@[recipientContactId] message:message];
OWSAssert(recipients.count == 1);
SignalRecipient *recipient = recipients.firstObject;
if (!recipient) {
NSError *error = OWSErrorMakeFailedToSendOutgoingMessageError();