diff --git a/SignalMessaging/profiles/OWSProfileManager.h b/SignalMessaging/profiles/OWSProfileManager.h index d52ba1a78..afe8b2faf 100644 --- a/SignalMessaging/profiles/OWSProfileManager.h +++ b/SignalMessaging/profiles/OWSProfileManager.h @@ -74,6 +74,7 @@ extern const NSUInteger kOWSProfileManager_MaxAvatarDiameter; - (nullable OWSAES256Key *)profileKeyForRecipientId:(NSString *)recipientId; +- (nullable NSString *)profileNameForRecipientWithID:(NSString *)recipientID avoidWriteTransaction:(BOOL)avoidWriteTransaction; - (nullable NSString *)profileNameForRecipientWithID:(NSString *)recipientID; - (nullable NSString *)profileNameForRecipientWithID:(NSString *)recipientID transaction:(YapDatabaseReadWriteTransaction *)transaction; diff --git a/SignalMessaging/profiles/OWSProfileManager.m b/SignalMessaging/profiles/OWSProfileManager.m index b1776bc6e..58017d509 100644 --- a/SignalMessaging/profiles/OWSProfileManager.m +++ b/SignalMessaging/profiles/OWSProfileManager.m @@ -1025,6 +1025,11 @@ typedef void (^ProfileManagerFailureBlock)(NSError *error); } - (nullable NSString *)profileNameForRecipientWithID:(NSString *)recipientID +{ + return [self profileNameForRecipientWithID:recipientID avoidingWriteTransaction:NO]; +} + +- (nullable NSString *)profileNameForRecipientWithID:(NSString *)recipientID avoidingWriteTransaction:(BOOL)avoidWriteTransaction { if ([self.tsAccountManager.localNumber isEqualToString:recipientID]) { return self.localUserProfile.profileName; @@ -1047,18 +1052,22 @@ typedef void (^ProfileManagerFailureBlock)(NSError *error); } } - __block NSString *result; + if (!avoidWriteTransaction) { + __block NSString *result; - [LKStorage writeSyncWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { - result = [self profileNameForRecipientWithID:recipientID transaction:transaction]; - } error:nil]; + [LKStorage writeSyncWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + result = [self profileNameForRecipientWithID:recipientID transaction:transaction]; + } error:nil]; - NSString *shortID = [recipientID substringWithRange:NSMakeRange(recipientID.length - 8, 8)]; - NSString *suffix = [NSString stringWithFormat:@" (...%@)", shortID]; - if ([result hasSuffix:suffix]) { - return [result substringToIndex:result.length - suffix.length]; + NSString *shortID = [recipientID substringWithRange:NSMakeRange(recipientID.length - 8, 8)]; + NSString *suffix = [NSString stringWithFormat:@" (...%@)", shortID]; + if ([result hasSuffix:suffix]) { + return [result substringToIndex:result.length - suffix.length]; + } else { + return result; + } } else { - return result; + return recipientID; } } diff --git a/SignalServiceKit/src/Loki/Utilities/DisplayNameUtilities.swift b/SignalServiceKit/src/Loki/Utilities/DisplayNameUtilities.swift index 2ca72032f..f4866b5be 100644 --- a/SignalServiceKit/src/Loki/Utilities/DisplayNameUtilities.swift +++ b/SignalServiceKit/src/Loki/Utilities/DisplayNameUtilities.swift @@ -13,6 +13,15 @@ public final class UserDisplayNameUtilities : NSObject { } // MARK: Sessions + @objc(getPrivateChatDisplayNameAvoidWriteTransaction:) + public static func getPrivateChatDisplayNameAvoidingWriteTransaction(for publicKey: String) -> String? { + if publicKey == userPublicKey { + return userDisplayName + } else { + return SSKEnvironment.shared.profileManager.profileNameForRecipient(withID: publicKey, avoidingWriteTransaction: true) + } + } + @objc public static func getPrivateChatDisplayName(for publicKey: String) -> String? { if publicKey == userPublicKey { return userDisplayName diff --git a/SignalServiceKit/src/Messages/TSGroupModel.m b/SignalServiceKit/src/Messages/TSGroupModel.m index c2e233665..6157d55b4 100644 --- a/SignalServiceKit/src/Messages/TSGroupModel.m +++ b/SignalServiceKit/src/Messages/TSGroupModel.m @@ -133,7 +133,7 @@ const int32_t kGroupIdLength = 16; if ([membersWhoLeft count] > 0) { NSArray *oldMembersNames = [[membersWhoLeft allObjects] map:^NSString*(NSString* item) { - return [LKUserDisplayNameUtilities getPrivateChatDisplayNameFor:item]; + return [LKUserDisplayNameUtilities getPrivateChatDisplayNameAvoidWriteTransaction:item]; }]; updatedGroupInfoString = [updatedGroupInfoString stringByAppendingString:[NSString diff --git a/SignalServiceKit/src/Protocols/ProfileManagerProtocol.h b/SignalServiceKit/src/Protocols/ProfileManagerProtocol.h index b19d1af21..01694420a 100644 --- a/SignalServiceKit/src/Protocols/ProfileManagerProtocol.h +++ b/SignalServiceKit/src/Protocols/ProfileManagerProtocol.h @@ -14,6 +14,7 @@ NS_ASSUME_NONNULL_BEGIN - (OWSAES256Key *)localProfileKey; - (nullable NSString *)localProfileName; +- (nullable NSString *)profileNameForRecipientWithID:(NSString *)recipientID avoidingWriteTransaction:(BOOL)avoidWriteTransaction; - (nullable NSString *)profileNameForRecipientWithID:(NSString *)recipientID; - (nullable NSString *)profileNameForRecipientWithID:(NSString *)recipientID transaction:(YapDatabaseReadWriteTransaction *)transaction; - (nullable NSString *)profilePictureURL;