Skip redundant sync messages.

pull/1/head
Matthew Chen 7 years ago
parent 41e6eaeafc
commit a2b67a17fd

@ -1,5 +1,5 @@
// //
// Copyright (c) 2017 Open Whisper Systems. All rights reserved. // Copyright (c) 2018 Open Whisper Systems. All rights reserved.
// //
#import "TSYapDatabaseObject.h" #import "TSYapDatabaseObject.h"
@ -17,6 +17,7 @@ extern uint32_t const OWSDevicePrimaryDeviceId;
- (BOOL)mayHaveLinkedDevices:(YapDatabaseConnection *)dbConnection; - (BOOL)mayHaveLinkedDevices:(YapDatabaseConnection *)dbConnection;
- (void)setMayHaveLinkedDevices:(BOOL)value dbConnection:(YapDatabaseConnection *)dbConnection; - (void)setMayHaveLinkedDevices:(BOOL)value dbConnection:(YapDatabaseConnection *)dbConnection;
- (void)setMayHaveLinkedDevices:(BOOL)value transaction:(YapDatabaseReadWriteTransaction *)transaction;
- (BOOL)hasReceivedSyncMessageInLastSeconds:(NSTimeInterval)intervalSeconds; - (BOOL)hasReceivedSyncMessageInLastSeconds:(NSTimeInterval)intervalSeconds;
- (void)setHasReceivedSyncMessage; - (void)setHasReceivedSyncMessage;

@ -19,7 +19,6 @@ NSString *const kTSStorageManager_MayHaveLinkedDevices = @"kTSStorageManager_May
@interface OWSDeviceManager () @interface OWSDeviceManager ()
@property (atomic, nullable) NSNumber *mayHaveLinkedDevicesCached;
@property (atomic) NSDate *lastReceivedSyncMessage; @property (atomic) NSDate *lastReceivedSyncMessage;
@end @end
@ -49,13 +48,9 @@ NSString *const kTSStorageManager_MayHaveLinkedDevices = @"kTSStorageManager_May
@synchronized(self) @synchronized(self)
{ {
if (!self.mayHaveLinkedDevicesCached) { return [dbConnection boolForKey:kTSStorageManager_MayHaveLinkedDevices
self.mayHaveLinkedDevicesCached = @([dbConnection boolForKey:kTSStorageManager_MayHaveLinkedDevices inCollection:kTSStorageManager_OWSDeviceCollection
inCollection:kTSStorageManager_OWSDeviceCollection defaultValue:NO];
defaultValue:NO]);
}
return [self.mayHaveLinkedDevicesCached boolValue];
} }
} }
@ -63,15 +58,20 @@ NSString *const kTSStorageManager_MayHaveLinkedDevices = @"kTSStorageManager_May
{ {
OWSAssert(dbConnection); OWSAssert(dbConnection);
[dbConnection asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
[self setMayHaveLinkedDevices:value transaction:transaction];
}];
}
- (void)setMayHaveLinkedDevices:(BOOL)value transaction:(YapDatabaseReadWriteTransaction *)transaction
{
OWSAssert(transaction);
@synchronized(self) @synchronized(self)
{ {
self.mayHaveLinkedDevicesCached = @(value); [transaction setObject:@(value)
forKey:kTSStorageManager_MayHaveLinkedDevices
[dbConnection asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { inCollection:kTSStorageManager_OWSDeviceCollection];
[transaction setObject:@(value)
forKey:kTSStorageManager_MayHaveLinkedDevices
inCollection:kTSStorageManager_OWSDeviceCollection];
}];
} }
} }

@ -278,6 +278,7 @@ NS_ASSUME_NONNULL_BEGIN
[self handleIncomingEnvelope:envelope withSyncMessage:content.syncMessage transaction:transaction]; [self handleIncomingEnvelope:envelope withSyncMessage:content.syncMessage transaction:transaction];
[[OWSDeviceManager sharedManager] setHasReceivedSyncMessage]; [[OWSDeviceManager sharedManager] setHasReceivedSyncMessage];
[OWSDeviceManager.sharedManager setMayHaveLinkedDevices:YES transaction:transaction];
} else if (content.hasDataMessage) { } else if (content.hasDataMessage) {
[self handleIncomingEnvelope:envelope withDataMessage:content.dataMessage transaction:transaction]; [self handleIncomingEnvelope:envelope withDataMessage:content.dataMessage transaction:transaction];
} else if (content.hasCallMessage) { } else if (content.hasCallMessage) {

Loading…
Cancel
Save