diff --git a/SignalServiceKit/src/Contacts/TSThread.m b/SignalServiceKit/src/Contacts/TSThread.m index 06d172ad5..a8504165c 100644 --- a/SignalServiceKit/src/Contacts/TSThread.m +++ b/SignalServiceKit/src/Contacts/TSThread.m @@ -67,7 +67,7 @@ NS_ASSUME_NONNULL_BEGIN return self; } - if (!_conversationColorName) { + if (_conversationColorName.length == 0) { NSString *_Nullable contactId = self.contactIdentifier; if (contactId.length > 0) { // To be consistent with colors synced to desktop diff --git a/SignalServiceKit/src/Contacts/Threads/TSContactThread.h b/SignalServiceKit/src/Contacts/Threads/TSContactThread.h index e8c94e1c1..0c28b19b2 100644 --- a/SignalServiceKit/src/Contacts/Threads/TSContactThread.h +++ b/SignalServiceKit/src/Contacts/Threads/TSContactThread.h @@ -20,7 +20,7 @@ NS_ASSUME_NONNULL_BEGIN relay:(nullable NSString *)relay; // Unlike getOrCreateThreadWithContactId, this will _NOT_ create a thread if one does not already exist. -+ (nullable instancetype)getThreadWithContactId:(NSString *)contactId; ++ (nullable instancetype)getThreadWithContactId:(NSString *)contactId transaction:(YapDatabaseReadTransaction *)transaction; - (NSString *)contactIdentifier; diff --git a/SignalServiceKit/src/Contacts/Threads/TSContactThread.m b/SignalServiceKit/src/Contacts/Threads/TSContactThread.m index 2570a0c4e..1fbf3dc36 100644 --- a/SignalServiceKit/src/Contacts/Threads/TSContactThread.m +++ b/SignalServiceKit/src/Contacts/Threads/TSContactThread.m @@ -83,17 +83,9 @@ NS_ASSUME_NONNULL_BEGIN return thread; } -+ (nullable instancetype)getThreadWithContactId:(NSString *)contactId ++ (nullable instancetype)getThreadWithContactId:(NSString *)contactId transaction:(YapDatabaseReadTransaction *)transaction; { - OWSAssert(contactId.length > 0); - - __block TSContactThread *_Nullable thread; - [[self dbReadWriteConnection] readWithBlock:^(YapDatabaseReadTransaction *transaction) { - thread = - [TSContactThread fetchObjectWithUniqueID:[self threadIdFromContactId:contactId] transaction:transaction]; - }]; - - return thread; + return [TSContactThread fetchObjectWithUniqueID:[self threadIdFromContactId:contactId] transaction:transaction]; } - (NSString *)contactIdentifier { diff --git a/SignalServiceKit/src/Devices/OWSContactsOutputStream.h b/SignalServiceKit/src/Devices/OWSContactsOutputStream.h index abbbda025..46fe918fe 100644 --- a/SignalServiceKit/src/Devices/OWSContactsOutputStream.h +++ b/SignalServiceKit/src/Devices/OWSContactsOutputStream.h @@ -6,6 +6,7 @@ NS_ASSUME_NONNULL_BEGIN +@class OWSDisappearingMessagesConfiguration; @class OWSRecipientIdentity; @class SignalAccount; @@ -17,7 +18,9 @@ NS_ASSUME_NONNULL_BEGIN recipientIdentity:(nullable OWSRecipientIdentity *)recipientIdentity profileKeyData:(nullable NSData *)profileKeyData contactsManager:(id)contactsManager - conversationColorName:(NSString *)conversationColorName; + conversationColorName:(NSString *)conversationColorName +disappearingMessagesConfiguration:(nullable OWSDisappearingMessagesConfiguration *)disappearingMessagesConfiguration; + @end diff --git a/SignalServiceKit/src/Devices/OWSContactsOutputStream.m b/SignalServiceKit/src/Devices/OWSContactsOutputStream.m index 62d9af284..87cda89df 100644 --- a/SignalServiceKit/src/Devices/OWSContactsOutputStream.m +++ b/SignalServiceKit/src/Devices/OWSContactsOutputStream.m @@ -25,6 +25,7 @@ NS_ASSUME_NONNULL_BEGIN profileKeyData:(nullable NSData *)profileKeyData contactsManager:(id)contactsManager conversationColorName:(NSString *)conversationColorName +disappearingMessagesConfiguration:(nullable OWSDisappearingMessagesConfiguration *)disappearingMessagesConfiguration { OWSAssert(signalAccount); OWSAssert(signalAccount.contact); @@ -67,14 +68,8 @@ NS_ASSUME_NONNULL_BEGIN // legacy client "not specifying". [contactBuilder setExpireTimer:0]; - TSContactThread *_Nullable contactThread = [TSContactThread getThreadWithContactId:signalAccount.recipientId]; - if (contactThread) { - OWSDisappearingMessagesConfiguration *_Nullable disappearingMessagesConfiguration = - [OWSDisappearingMessagesConfiguration fetchObjectWithUniqueID:contactThread.uniqueId]; - - if (disappearingMessagesConfiguration && disappearingMessagesConfiguration.isEnabled) { - [contactBuilder setExpireTimer:disappearingMessagesConfiguration.durationSeconds]; - } + if (disappearingMessagesConfiguration && disappearingMessagesConfiguration.isEnabled) { + [contactBuilder setExpireTimer:disappearingMessagesConfiguration.durationSeconds]; } if ([OWSBlockingManager.sharedManager isRecipientIdBlocked:signalAccount.recipientId]) { diff --git a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.m b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.m index 6dbf0cd49..3b0a3d948 100644 --- a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.m +++ b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.m @@ -88,21 +88,23 @@ NS_ASSUME_NONNULL_BEGIN NSData *_Nullable profileKeyData = [self.profileManager profileKeyDataForRecipientId:signalAccount.recipientId]; - NSString *conversationColorName = (NSString *)^() { - TSContactThread *_Nullable contactThread = - [TSContactThread fetchObjectWithUniqueID:signalAccount.recipientId transaction:transaction]; - if (contactThread) { - return contactThread.conversationColorName; - } else { - return [TSThread stableConversationColorNameForString:signalAccount.recipientId]; - } - }(); + OWSDisappearingMessagesConfiguration *_Nullable disappearingMessagesConfiguration; + NSString *conversationColorName; + + TSContactThread *_Nullable contactThread = [TSContactThread getThreadWithContactId:signalAccount.recipientId transaction:transaction]; + if (contactThread) { + conversationColorName = contactThread.conversationColorName; + disappearingMessagesConfiguration = [contactThread disappearingMessagesConfigurationWithTransaction:transaction]; + } else { + conversationColorName = [TSThread stableConversationColorNameForString:signalAccount.recipientId]; + } [contactsOutputStream writeSignalAccount:signalAccount recipientIdentity:recipientIdentity profileKeyData:profileKeyData contactsManager:contactsManager - conversationColorName:conversationColorName]; + conversationColorName:conversationColorName + disappearingMessagesConfiguration:disappearingMessagesConfiguration]; } [contactsOutputStream flush];