From 92705490a07aa35311f4d0e68387f5465e915a82 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Thu, 5 Jul 2018 16:40:08 -0600 Subject: [PATCH] No write transaction needed for syncing colors // FREEBIE --- SignalMessaging/contacts/OWSContactsSyncing.m | 2 +- SignalServiceKit/src/Contacts/TSThread.m | 17 +++++++++++++++-- .../DeviceSyncing/OWSSyncContactsMessage.h | 2 +- .../DeviceSyncing/OWSSyncContactsMessage.m | 16 +++++++++++++--- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/SignalMessaging/contacts/OWSContactsSyncing.m b/SignalMessaging/contacts/OWSContactsSyncing.m index b1061fc74..f2285ab09 100644 --- a/SignalMessaging/contacts/OWSContactsSyncing.m +++ b/SignalMessaging/contacts/OWSContactsSyncing.m @@ -126,7 +126,7 @@ NSString *const kOWSPrimaryStorageOWSContactsSyncingLastMessageKey __block NSData *messageData; __block NSData *lastMessageData; - [self.editingDatabaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { + [self.editingDatabaseConnection readWithBlock:^(YapDatabaseReadTransaction *_Nonnull transaction) { messageData = [syncContactsMessage buildPlainTextAttachmentDataWithTransaction:transaction]; lastMessageData = [transaction objectForKey:kOWSPrimaryStorageOWSContactsSyncingLastMessageKey inCollection:kOWSPrimaryStorageOWSContactsSyncingCollection]; diff --git a/SignalServiceKit/src/Contacts/TSThread.m b/SignalServiceKit/src/Contacts/TSThread.m index d0ef2ea89..06d172ad5 100644 --- a/SignalServiceKit/src/Contacts/TSThread.m +++ b/SignalServiceKit/src/Contacts/TSThread.m @@ -47,7 +47,14 @@ NS_ASSUME_NONNULL_BEGIN _lastMessageDate = nil; _creationDate = [NSDate date]; _messageDraft = nil; - _conversationColorName = [self.class randomConversationColorName]; + + NSString *_Nullable contactId = self.contactIdentifier; + if (contactId.length > 0) { + // To be consistent with colors synced to desktop + _conversationColorName = [self.class stableConversationColorNameForString:contactId]; + } else { + _conversationColorName = [self.class stableConversationColorNameForString:self.uniqueId]; + } } return self; @@ -61,7 +68,13 @@ NS_ASSUME_NONNULL_BEGIN } if (!_conversationColorName) { - _conversationColorName = [self.class stableConversationColorNameForString:self.uniqueId]; + NSString *_Nullable contactId = self.contactIdentifier; + if (contactId.length > 0) { + // To be consistent with colors synced to desktop + _conversationColorName = [self.class stableConversationColorNameForString:contactId]; + } else { + _conversationColorName = [self.class stableConversationColorNameForString:self.uniqueId]; + } } return self; diff --git a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.h b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.h index c1b8bc027..e536c1685 100644 --- a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.h +++ b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.h @@ -21,7 +21,7 @@ NS_ASSUME_NONNULL_BEGIN - (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER; -- (NSData *)buildPlainTextAttachmentDataWithTransaction:(YapDatabaseReadWriteTransaction *)transaction; +- (NSData *)buildPlainTextAttachmentDataWithTransaction:(YapDatabaseReadTransaction *)transaction; @end diff --git a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.m b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.m index 288b29ee8..6dbf0cd49 100644 --- a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.m +++ b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.m @@ -71,7 +71,7 @@ NS_ASSUME_NONNULL_BEGIN return syncMessageBuilder; } -- (NSData *)buildPlainTextAttachmentDataWithTransaction:(YapDatabaseReadWriteTransaction *)transaction +- (NSData *)buildPlainTextAttachmentDataWithTransaction:(YapDatabaseReadTransaction *)transaction { id contactsManager = TextSecureKitEnv.sharedEnv.contactsManager; @@ -87,12 +87,22 @@ NS_ASSUME_NONNULL_BEGIN [self.identityManager recipientIdentityForRecipientId:signalAccount.recipientId]; NSData *_Nullable profileKeyData = [self.profileManager profileKeyDataForRecipientId:signalAccount.recipientId]; - TSContactThread *contactThread = [TSContactThread getOrCreateThreadWithContactId:signalAccount.recipientId transaction:transaction]; + + NSString *conversationColorName = (NSString *)^() { + TSContactThread *_Nullable contactThread = + [TSContactThread fetchObjectWithUniqueID:signalAccount.recipientId transaction:transaction]; + if (contactThread) { + return contactThread.conversationColorName; + } else { + return [TSThread stableConversationColorNameForString:signalAccount.recipientId]; + } + }(); + [contactsOutputStream writeSignalAccount:signalAccount recipientIdentity:recipientIdentity profileKeyData:profileKeyData contactsManager:contactsManager - conversationColorName:contactThread.conversationColorName]; + conversationColorName:conversationColorName]; } [contactsOutputStream flush];