Fix freeze due to nested transaction
Not a fan of this solution; we need to clean up display name management
This commit is contained in:
parent
04a960c78c
commit
fb7326a3b0
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue