Streamline SignalRecipient.

pull/1/head
Matthew Chen 7 years ago
parent 05a4222b2d
commit b6489c6948

@ -15,14 +15,10 @@ NS_ASSUME_NONNULL_BEGIN
+ (instancetype)selfRecipient; + (instancetype)selfRecipient;
+ (SignalRecipient *)ensureRecipientExistsWithRegisteredRecipientId:(NSString *)recipientId
transaction:(YapDatabaseReadWriteTransaction *)transaction;
+ (SignalRecipient *)ensureRecipientExistsWithRecipientId:(NSString *)recipientId
transaction:(YapDatabaseReadWriteTransaction *)transaction;
+ (nullable instancetype)registeredRecipientForRecipientId:(NSString *)recipientId + (nullable instancetype)registeredRecipientForRecipientId:(NSString *)recipientId
transaction:(YapDatabaseReadTransaction *)transaction; transaction:(YapDatabaseReadTransaction *)transaction;
+ (instancetype)getOrCreatedUnsavedRecipientForRecipientId:(NSString *)recipientId
transaction:(YapDatabaseReadTransaction *)transaction;
- (void)addDevices:(NSSet *)set; - (void)addDevices:(NSSet *)set;
- (void)removeDevices:(NSSet *)set; - (void)removeDevices:(NSSet *)set;

@ -31,29 +31,16 @@ NS_ASSUME_NONNULL_BEGIN
[super removeWithTransaction:transaction]; [super removeWithTransaction:transaction];
} }
+ (SignalRecipient *)ensureRecipientExistsWithRegisteredRecipientId:(NSString *)recipientId + (instancetype)getOrCreatedUnsavedRecipientForRecipientId:(NSString *)recipientId
transaction:(YapDatabaseReadWriteTransaction *)transaction transaction:(YapDatabaseReadTransaction *)transaction
{
SignalRecipient *recipient = [self ensureRecipientExistsWithRecipientId:recipientId transaction:transaction];
if (recipient.mayBeUnregistered) {
recipient.mayBeUnregistered = NO;
[recipient saveWithTransaction:transaction];
}
return recipient;
}
+ (SignalRecipient *)ensureRecipientExistsWithRecipientId:(NSString *)recipientId
transaction:(YapDatabaseReadWriteTransaction *)transaction
{ {
SignalRecipient *_Nullable recipient = [self recipientForRecipientId:recipientId transaction:transaction]; OWSAssert(transaction);
if (recipient) { OWSAssert(recipientId.length > 0);
return recipient;
SignalRecipient *_Nullable recipient = [self registeredRecipientForRecipientId:recipientId transaction:transaction];
if (!recipient) {
recipient = [[self alloc] initWithTextSecureIdentifier:recipientId];
} }
DDLogDebug(@"%@ creating recipient: %@", self.logTag, recipientId);
recipient = [[self alloc] initWithTextSecureIdentifier:recipientId];
[recipient saveWithTransaction:transaction];
return recipient; return recipient;
} }

@ -39,9 +39,6 @@ NS_ASSUME_NONNULL_BEGIN
[thread saveWithTransaction:transaction]; [thread saveWithTransaction:transaction];
} }
// TODO: Do we need to _eagerly_ ensure a SignalRecipient instance exists?
[SignalRecipient ensureRecipientExistsWithRecipientId:contactId transaction:transaction];
return thread; return thread;
} }

@ -454,8 +454,8 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
NSMutableArray<SignalRecipient *> *recipients = [NSMutableArray new]; NSMutableArray<SignalRecipient *> *recipients = [NSMutableArray new];
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
for (NSString *recipientId in recipientIds) { for (NSString *recipientId in recipientIds) {
SignalRecipient *recipient = SignalRecipient *recipient = [SignalRecipient getOrCreatedUnsavedRecipientForRecipientId:recipientId
[SignalRecipient ensureRecipientExistsWithRecipientId:recipientId transaction:transaction]; transaction:transaction];
[recipients addObject:recipient]; [recipients addObject:recipient];
} }
}]; }];
@ -555,11 +555,10 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
return; return;
} }
__block SignalRecipient *recipient; NSArray<SignalRecipient *> *recipients =
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { [self signalRecipientsForRecipientIds:@[recipientContactId] message:message];
recipient = OWSAssert(recipients.count == 1);
[SignalRecipient ensureRecipientExistsWithRecipientId:recipientContactId transaction:transaction]; SignalRecipient *recipient = recipients.firstObject;
}];
if (!recipient) { if (!recipient) {
NSError *error = OWSErrorMakeFailedToSendOutgoingMessageError(); NSError *error = OWSErrorMakeFailedToSendOutgoingMessageError();

Loading…
Cancel
Save