Avoid redundant "block list changed" sync messages in TSBlockingManager.

// FREEBIE
pull/1/head
Matthew Chen 8 years ago
parent f5237ef5d1
commit f036d75fcb

@ -20,7 +20,9 @@ extern NSString * const kNSNotificationName_BlockedPhoneNumbersDidChange;
- (void)removeBlockedPhoneNumber:(NSString *)phoneNumber; - (void)removeBlockedPhoneNumber:(NSString *)phoneNumber;
- (void)setBlockedPhoneNumbers:(NSArray<NSString *> *)blockedPhoneNumbers; // When updating the block list from a sync message, we don't
// want to fire a sync message.
- (void)setBlockedPhoneNumbers:(NSArray<NSString *> *)blockedPhoneNumbers skipSyncMessage:(BOOL)skipSyncMessage;
- (NSArray<NSString *> *)blockedPhoneNumbers; - (NSArray<NSString *> *)blockedPhoneNumbers;

@ -82,7 +82,7 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan
[_blockedPhoneNumberSet addObject:phoneNumber]; [_blockedPhoneNumberSet addObject:phoneNumber];
} }
[self handleUpdate]; [self handleUpdate:NO];
} }
- (void)removeBlockedPhoneNumber:(NSString *)phoneNumber { - (void)removeBlockedPhoneNumber:(NSString *)phoneNumber {
@ -96,10 +96,11 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan
[_blockedPhoneNumberSet removeObject:phoneNumber]; [_blockedPhoneNumberSet removeObject:phoneNumber];
} }
[self handleUpdate]; [self handleUpdate:NO];
} }
- (void)setBlockedPhoneNumbers:(NSArray<NSString *> *)blockedPhoneNumbers { - (void)setBlockedPhoneNumbers:(NSArray<NSString *> *)blockedPhoneNumbers skipSyncMessage:(BOOL)skipSyncMessage
{
OWSAssert(blockedPhoneNumbers != nil); OWSAssert(blockedPhoneNumbers != nil);
@synchronized (self) { @synchronized (self) {
@ -111,7 +112,7 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan
_blockedPhoneNumberSet = [newSet mutableCopy]; _blockedPhoneNumberSet = [newSet mutableCopy];
} }
[self handleUpdate]; [self handleUpdate:skipSyncMessage];
} }
- (NSArray<NSString *> *)blockedPhoneNumbers { - (NSArray<NSString *> *)blockedPhoneNumbers {
@ -121,13 +122,18 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan
} }
// This should be called every time the block list changes. // This should be called every time the block list changes.
- (void)handleUpdate { - (void)handleUpdate:(BOOL)skipSyncMessage
{
NSArray<NSString *> *blockedPhoneNumbers = [self blockedPhoneNumbers]; NSArray<NSString *> *blockedPhoneNumbers = [self blockedPhoneNumbers];
[self saveBlockedPhoneNumbers:blockedPhoneNumbers]; [self saveBlockedPhoneNumbers:blockedPhoneNumbers];
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
if (!skipSyncMessage) {
[self sendBlockedPhoneNumbersMessage:blockedPhoneNumbers]; [self sendBlockedPhoneNumbersMessage:blockedPhoneNumbers];
} else {
[self saveSyncedBlockedPhoneNumbers:blockedPhoneNumbers];
}
[[NSNotificationCenter defaultCenter] postNotificationName:kNSNotificationName_BlockedPhoneNumbersDidChange [[NSNotificationCenter defaultCenter] postNotificationName:kNSNotificationName_BlockedPhoneNumbersDidChange
object:nil object:nil
@ -176,15 +182,23 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan
DDLogInfo(@"%@ Successfully sent blocked phone numbers", self.tag); DDLogInfo(@"%@ Successfully sent blocked phone numbers", self.tag);
// Record the last set of "blocked phone numbers" which we successfully synced. // Record the last set of "blocked phone numbers" which we successfully synced.
[_storageManager setObject:blockedPhoneNumbers [self saveSyncedBlockedPhoneNumbers:blockedPhoneNumbers];
forKey:kTSStorageManager_SyncedBlockedPhoneNumbersKey
inCollection:kTSStorageManager_BlockedPhoneNumbersCollection];
} }
failure:^(NSError *error) { failure:^(NSError *error) {
DDLogError(@"%@ Failed to send blocked phone numbers with error: %@", self.tag, error); DDLogError(@"%@ Failed to send blocked phone numbers with error: %@", self.tag, error);
}]; }];
} }
- (void)saveSyncedBlockedPhoneNumbers:(NSArray<NSString *> *)blockedPhoneNumbers
{
OWSAssert(blockedPhoneNumbers);
// Record the last set of "blocked phone numbers" which we successfully synced.
[_storageManager setObject:blockedPhoneNumbers
forKey:kTSStorageManager_SyncedBlockedPhoneNumbersKey
inCollection:kTSStorageManager_BlockedPhoneNumbersCollection];
}
#pragma mark - Logging #pragma mark - Logging
+ (NSString *)tag + (NSString *)tag

@ -542,8 +542,7 @@ NS_ASSUME_NONNULL_BEGIN
DDLogInfo(@"%@ Received `blocked` syncMessage.", self.tag); DDLogInfo(@"%@ Received `blocked` syncMessage.", self.tag);
NSArray<NSString *> *blockedPhoneNumbers = [syncMessage.blocked.numbers copy]; NSArray<NSString *> *blockedPhoneNumbers = [syncMessage.blocked.numbers copy];
[_blockingManager setBlockedPhoneNumbers:blockedPhoneNumbers]; [_blockingManager setBlockedPhoneNumbers:blockedPhoneNumbers skipSyncMessage:YES];
} else if (syncMessage.read.count > 0) { } else if (syncMessage.read.count > 0) {
DDLogInfo(@"%@ Received %ld read receipt(s)", self.tag, (u_long)syncMessage.read.count); DDLogInfo(@"%@ Received %ld read receipt(s)", self.tag, (u_long)syncMessage.read.count);

Loading…
Cancel
Save