Use hash to de-duplicate contact syncs.

This commit is contained in:
Matthew Chen 2019-07-25 09:43:07 -03:00
parent 64e3af0475
commit 103d608443
2 changed files with 13 additions and 9 deletions

View File

@ -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);
});
}];
});
}];

View File

@ -59,6 +59,7 @@ typedef NS_ENUM(NSInteger, OWSErrorCode) {
OWSErrorCodeAttachmentDownloadFailed,
OWSErrorCodeAppExpired,
OWSErrorCodeMissingLocalThread,
OWSErrorCodeContactSyncFailed,
};
extern NSString *const OWSErrorRecipientAddressKey;