diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index fdea04f58..7a4a28361 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -733,6 +733,12 @@ typedef enum : NSUInteger { [self.headerView updateSubtitleForCurrentStatus]; }); } + + if ([self.thread isKindOfClass:TSContactThread.class]) { + [LKStorage writeWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + [SSKEnvironment.shared.profileManager ensureProfileCachedForContactWithID:self.thread.contactIdentifier with:transaction]; + }]; + } } - (void)createContents diff --git a/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift b/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift index ddee84e3d..d82a5f8f0 100644 --- a/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift +++ b/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift @@ -165,19 +165,21 @@ public final class MultiDeviceProtocol : NSObject { let recipient = SignalRecipient.getOrBuildUnsavedRecipient(forRecipientId: hexEncodedPublicKey, transaction: transaction) let udManager = SSKEnvironment.shared.udManager let senderCertificate = udManager.getSenderCertificate() + SSKEnvironment.shared.profileManager.ensureProfileCachedForContact(withID: hexEncodedPublicKey, with: transaction) // Prevent the line below from starting a write transaction let (promise, seal) = Promise.pending() - var recipientUDAccess: OWSUDAccess? - if let senderCertificate = senderCertificate { - SSKEnvironment.shared.profileManager.ensureProfileCachedForContact(withID: hexEncodedPublicKey, with: transaction) // Prevent the line below from starting a write transaction - recipientUDAccess = udManager.udAccess(forRecipientId: hexEncodedPublicKey, requireSyncAccess: true) + LokiAPI.workQueue.async { + var recipientUDAccess: OWSUDAccess? + if let senderCertificate = senderCertificate { + recipientUDAccess = udManager.udAccess(forRecipientId: hexEncodedPublicKey, requireSyncAccess: true) + } + let messageSend = OWSMessageSend(message: message, thread: thread, recipient: recipient, senderCertificate: senderCertificate, + udAccess: recipientUDAccess, localNumber: getUserHexEncodedPublicKey(), success: { + externalSeal?.fulfill(()) + }, failure: { error in + externalSeal?.reject(error) + }) + seal.fulfill(messageSend) } - let messageSend = OWSMessageSend(message: message, thread: thread, recipient: recipient, senderCertificate: senderCertificate, - udAccess: recipientUDAccess, localNumber: getUserHexEncodedPublicKey(), success: { - externalSeal?.fulfill(()) - }, failure: { error in - externalSeal?.reject(error) - }) - seal.fulfill(messageSend) return promise }