From 103d608443c58f66a7f3a2bc359cd4f69db64e1a Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 25 Jul 2019 09:43:07 -0300 Subject: [PATCH] Use hash to de-duplicate contact syncs. --- SignalMessaging/contacts/OWSSyncManager.m | 21 ++++++++++++--------- SignalServiceKit/src/Util/OWSError.h | 1 + 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/SignalMessaging/contacts/OWSSyncManager.m b/SignalMessaging/contacts/OWSSyncManager.m index b6ca42b534..958f505cf9 100644 --- a/SignalMessaging/contacts/OWSSyncManager.m +++ b/SignalMessaging/contacts/OWSSyncManager.m @@ -274,13 +274,15 @@ NSString *const kSyncManagerLastContactSyncKey = @"kTSStorageManagerOWSSyncManag // De-bounce. It's okay if we ignore some new changes; // `sendSyncContactsMessageIfPossible` is called fairly // often so we'll sync soon. - return; + return resolve(@(1)); } TSThread *_Nullable thread = [TSAccountManager getOrCreateLocalThreadWithSneakyTransaction]; if (thread == nil) { OWSFailDebug(@"Missing thread."); - return; + NSError *error + = OWSErrorWithCodeDescription(OWSErrorCodeContactSyncFailed, @"Could not sync contacts."); + return resolve(error); } OWSSyncContactsMessage *syncContactsMessage = @@ -300,15 +302,16 @@ NSString *const kSyncManagerLastContactSyncKey = @"kTSStorageManagerOWSSyncManag if (!messageData) { OWSFailDebug(@"Failed to serialize contacts sync message."); - return; + NSError *error + = OWSErrorWithCodeDescription(OWSErrorCodeContactSyncFailed, @"Could not sync contacts."); + return resolve(error); } NSData *_Nullable messageHash = [self hashForMessageData:messageData]; if (skipIfRedundant && messageHash != nil && lastMessageHash != nil && [lastMessageHash isEqual:messageHash]) { // Ignore redundant contacts sync message. - OWSLogVerbose(@"---"); - return; + return resolve(@(1)); } if (debounce) { @@ -336,9 +339,9 @@ NSString *const kSyncManagerLastContactSyncKey = @"kTSStorageManagerOWSSyncManag if (debounce) { self.isRequestInFlight = NO; } - }); - resolve(@(1)); + resolve(@(1)); + }); } failure:^(NSError *error) { OWSLogError(@"Failed to send contacts sync message with error: %@", error); @@ -347,9 +350,9 @@ NSString *const kSyncManagerLastContactSyncKey = @"kTSStorageManagerOWSSyncManag if (debounce) { self.isRequestInFlight = NO; } - }); - resolve(error); + resolve(error); + }); }]; }); }]; diff --git a/SignalServiceKit/src/Util/OWSError.h b/SignalServiceKit/src/Util/OWSError.h index 7afea50bb0..a47050d3e0 100644 --- a/SignalServiceKit/src/Util/OWSError.h +++ b/SignalServiceKit/src/Util/OWSError.h @@ -59,6 +59,7 @@ typedef NS_ENUM(NSInteger, OWSErrorCode) { OWSErrorCodeAttachmentDownloadFailed, OWSErrorCodeAppExpired, OWSErrorCodeMissingLocalThread, + OWSErrorCodeContactSyncFailed, }; extern NSString *const OWSErrorRecipientAddressKey;