ensure device updates are persisted

Previously we'd skip saves when latest was the same instance as self, which was
*at least* occurring during the 404 handler for prekey fetching while message
sending.

In practice this was cached, so it would be one wasted request per recipient
per launch.
pull/1/head
Michael Kirk 7 years ago
parent ef25b9c191
commit af3102441d

@ -161,19 +161,11 @@ NS_ASSUME_NONNULL_BEGIN
{
OWSAssertDebug(transaction);
OWSAssertDebug(devices.count > 0);
[self addDevices:devices];
SignalRecipient *latest = [SignalRecipient markRecipientAsRegisteredAndGet:self.recipientId
transaction:transaction];
if ([devices isSubsetOfSet:latest.devices.set]) {
return;
}
OWSLogDebug(@"adding devices: %@, to recipient: %@", devices, latest.recipientId);
OWSLogDebug(@"adding devices: %@, to recipient: %@", devices, self);
[latest addDevices:devices];
[latest saveWithTransaction_internal:transaction];
[self reloadWithTransaction:transaction];
[self addDevices:devices];
[self saveWithTransaction_internal:transaction];
}
- (void)removeDevicesFromRecipient:(NSSet *)devices transaction:(YapDatabaseReadWriteTransaction *)transaction
@ -181,23 +173,12 @@ NS_ASSUME_NONNULL_BEGIN
OWSAssertDebug(transaction);
OWSAssertDebug(devices.count > 0);
OWSLogDebug(@"removing devices: %@, from registered recipient: %@", devices, self);
[self reloadWithTransaction:transaction];
[self removeDevices:devices];
SignalRecipient *_Nullable latest =
[SignalRecipient registeredRecipientForRecipientId:self.recipientId transaction:transaction];
if (!latest) {
return;
}
if (![devices intersectsSet:latest.devices.set]) {
return;
}
OWSLogDebug(@"removing devices: %@, from registered recipient: %@", devices, latest.recipientId);
[latest removeDevices:devices];
if (latest.devices.count > 0) {
[latest saveWithTransaction_internal:transaction];
if (self.devices.count > 0) {
[self saveWithTransaction_internal:transaction];
} else {
[SignalRecipient removeUnregisteredRecipient:self.recipientId transaction:transaction];
}

Loading…
Cancel
Save