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

@ -81,8 +81,8 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan
[_blockedPhoneNumberSet addObject:phoneNumber];
}
[self handleUpdate];
[self handleUpdate:NO];
}
- (void)removeBlockedPhoneNumber:(NSString *)phoneNumber {
@ -95,11 +95,12 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan
[_blockedPhoneNumberSet removeObject:phoneNumber];
}
[self handleUpdate];
[self handleUpdate:NO];
}
- (void)setBlockedPhoneNumbers:(NSArray<NSString *> *)blockedPhoneNumbers {
- (void)setBlockedPhoneNumbers:(NSArray<NSString *> *)blockedPhoneNumbers skipSyncMessage:(BOOL)skipSyncMessage
{
OWSAssert(blockedPhoneNumbers != nil);
@synchronized (self) {
@ -110,8 +111,8 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan
_blockedPhoneNumberSet = [newSet mutableCopy];
}
[self handleUpdate];
[self handleUpdate:skipSyncMessage];
}
- (NSArray<NSString *> *)blockedPhoneNumbers {
@ -121,14 +122,19 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan
}
// This should be called every time the block list changes.
- (void)handleUpdate {
- (void)handleUpdate:(BOOL)skipSyncMessage
{
NSArray<NSString *> *blockedPhoneNumbers = [self blockedPhoneNumbers];
[self saveBlockedPhoneNumbers:blockedPhoneNumbers];
dispatch_async(dispatch_get_main_queue(), ^{
[self sendBlockedPhoneNumbersMessage:blockedPhoneNumbers];
if (!skipSyncMessage) {
[self sendBlockedPhoneNumbersMessage:blockedPhoneNumbers];
} else {
[self saveSyncedBlockedPhoneNumbers:blockedPhoneNumbers];
}
[[NSNotificationCenter defaultCenter] postNotificationName:kNSNotificationName_BlockedPhoneNumbersDidChange
object:nil
userInfo:nil];
@ -176,15 +182,23 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan
DDLogInfo(@"%@ Successfully sent blocked phone numbers", self.tag);
// Record the last set of "blocked phone numbers" which we successfully synced.
[_storageManager setObject:blockedPhoneNumbers
forKey:kTSStorageManager_SyncedBlockedPhoneNumbersKey
inCollection:kTSStorageManager_BlockedPhoneNumbersCollection];
[self saveSyncedBlockedPhoneNumbers:blockedPhoneNumbers];
}
failure:^(NSError *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
+ (NSString *)tag

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

Loading…
Cancel
Save