diff --git a/SignalServiceKit/src/Messages/OWSMessageHandler.m b/SignalServiceKit/src/Messages/OWSMessageHandler.m index 69fe9a900..95e0f9c21 100644 --- a/SignalServiceKit/src/Messages/OWSMessageHandler.m +++ b/SignalServiceKit/src/Messages/OWSMessageHandler.m @@ -117,6 +117,8 @@ NSString *envelopeAddress(OWSSignalServiceProtosEnvelope *envelope) [description appendString:@"GroupRequest"]; } else if (syncMessage.request.type == OWSSignalServiceProtosSyncMessageRequestTypeBlocked) { [description appendString:@"BlockedRequest"]; + } else if (syncMessage.request.type == OWSSignalServiceProtosSyncMessageRequestTypeConfiguration) { + [description appendString:@"ConfigurationRequest"]; } else { // Shouldn't happen OWSFail(@"Unknown sync message request type"); diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index 6b7192213..a44d800b6 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -605,7 +605,8 @@ NS_ASSUME_NONNULL_BEGIN // TODO DDLogWarn(@"%@ Received unsupported request for block list", self.tag); } else if (syncMessage.request.type == OWSSignalServiceProtosSyncMessageRequestTypeConfiguration) { - BOOL areReadReceiptsEnabled = [[OWSReadReceiptManager sharedManager] areReadReceiptsEnabled]; + BOOL areReadReceiptsEnabled = + [[OWSReadReceiptManager sharedManager] areReadReceiptsEnabledWithTransaction:transaction]; OWSSyncConfigurationMessage *syncConfigurationMessage = [[OWSSyncConfigurationMessage alloc] initWithReadReceiptsEnabled:areReadReceiptsEnabled]; [self.messageSender sendMessage:syncConfigurationMessage diff --git a/SignalServiceKit/src/Messages/OWSReadReceiptManager.h b/SignalServiceKit/src/Messages/OWSReadReceiptManager.h index 45bc80291..0201cb0cb 100644 --- a/SignalServiceKit/src/Messages/OWSReadReceiptManager.h +++ b/SignalServiceKit/src/Messages/OWSReadReceiptManager.h @@ -9,6 +9,7 @@ NS_ASSUME_NONNULL_BEGIN @class TSOutgoingMessage; @class TSThread; @class YapDatabaseReadWriteTransaction; +@class YapDatabaseReadTransaction; extern NSString *const kIncomingMessageMarkedAsReadNotification; @@ -74,6 +75,7 @@ extern NSString *const kIncomingMessageMarkedAsReadNotification; - (void)prepareCachedValues; - (BOOL)areReadReceiptsEnabled; +- (BOOL)areReadReceiptsEnabledWithTransaction:(YapDatabaseReadTransaction *)transaction; - (void)setAreReadReceiptsEnabled:(BOOL)value; @end diff --git a/SignalServiceKit/src/Messages/OWSReadReceiptManager.m b/SignalServiceKit/src/Messages/OWSReadReceiptManager.m index 512fe25e5..bc782c934 100644 --- a/SignalServiceKit/src/Messages/OWSReadReceiptManager.m +++ b/SignalServiceKit/src/Messages/OWSReadReceiptManager.m @@ -9,6 +9,7 @@ #import "OWSReadReceiptsForLinkedDevicesMessage.h" #import "OWSReadReceiptsForSenderMessage.h" #import "OWSSignalServiceProtos.pb.h" +#import "OWSSyncConfigurationMessage.h" #import "TSContactThread.h" #import "TSDatabaseView.h" #import "TSIncomingMessage.h" @@ -559,8 +560,22 @@ NSString *const OWSReadReceiptManagerAreReadReceiptsEnabled = @"areReadReceiptsE // We don't need to worry about races around this cached value. if (!self.areReadReceiptsEnabledCached) { // Default to NO. - self.areReadReceiptsEnabledCached = @([self.dbConnection boolForKey:OWSReadReceiptManagerAreReadReceiptsEnabled - inCollection:OWSReadReceiptManagerCollection]); + self.areReadReceiptsEnabledCached = + @([self.dbConnection boolForKey:OWSReadReceiptManagerAreReadReceiptsEnabled + inCollection:OWSReadReceiptManagerAreReadReceiptsEnabled]); + } + + return [self.areReadReceiptsEnabledCached boolValue]; +} + +- (BOOL)areReadReceiptsEnabledWithTransaction:(YapDatabaseReadTransaction *)transaction +{ + if (!self.areReadReceiptsEnabledCached) { + [self.dbConnection readWithBlock:^(YapDatabaseReadTransaction *_Nonnull transaction) { + // Default to NO. + self.areReadReceiptsEnabledCached = [transaction objectForKey:OWSReadReceiptManagerAreReadReceiptsEnabled + inCollection:OWSReadReceiptManagerAreReadReceiptsEnabled]; + }]; } return [self.areReadReceiptsEnabledCached boolValue]; @@ -568,11 +583,22 @@ NSString *const OWSReadReceiptManagerAreReadReceiptsEnabled = @"areReadReceiptsE - (void)setAreReadReceiptsEnabled:(BOOL)value { - DDLogInfo(@"%@ areReadReceiptsEnabled: %d.", self.tag, value); + DDLogInfo(@"%@ setAreReadReceiptsEnabled: %d.", self.tag, value); [self.dbConnection setBool:value forKey:OWSReadReceiptManagerAreReadReceiptsEnabled inCollection:OWSReadReceiptManagerCollection]; + + OWSSyncConfigurationMessage *syncConfigurationMessage = + [[OWSSyncConfigurationMessage alloc] initWithReadReceiptsEnabled:value]; + [self.messageSender sendMessage:syncConfigurationMessage + success:^{ + DDLogInfo(@"%@ Successfully sent Configuration syncMessage.", self.tag); + } + failure:^(NSError *error) { + DDLogError(@"%@ Failed to send Configuration syncMessage with error: %@", self.tag, error); + }]; + self.areReadReceiptsEnabledCached = @(value); }