mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			69 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Swift
		
	
| 
 | |
| @objc(LKUserDisplayNameUtilities)
 | |
| public final class UserDisplayNameUtilities : NSObject {
 | |
|     
 | |
|     override private init() { }
 | |
|     
 | |
|     private static var userPublicKey: String {
 | |
|         return getUserHexEncodedPublicKey()
 | |
|     }
 | |
|     
 | |
|     private static var userDisplayName: String? {
 | |
|         return SSKEnvironment.shared.profileManager.localProfileName()
 | |
|     }
 | |
|     
 | |
|     // 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
 | |
|         } else {
 | |
|             return SSKEnvironment.shared.profileManager.profileNameForRecipient(withID: publicKey)
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     // MARK: Open Groups
 | |
|     @objc public static func getPublicChatDisplayName(for publicKey: String, in channel: UInt64, on server: String) -> String? {
 | |
|         var result: String?
 | |
|         OWSPrimaryStorage.shared().dbReadConnection.read { transaction in
 | |
|             result = getPublicChatDisplayName(for: publicKey, in: channel, on: server, using: transaction)
 | |
|         }
 | |
|         return result
 | |
|     }
 | |
|     
 | |
|     @objc public static func getPublicChatDisplayName(for publicKey: String, in channel: UInt64, on server: String, using transaction: YapDatabaseReadTransaction) -> String? {
 | |
|         if publicKey == userPublicKey {
 | |
|             return userDisplayName
 | |
|         } else {
 | |
|             let collection = "\(server).\(channel)"
 | |
|             return transaction.object(forKey: publicKey, inCollection: collection) as! String?
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| @objc(LKGroupDisplayNameUtilities)
 | |
| public final class GroupDisplayNameUtilities : NSObject {
 | |
|     
 | |
|     override private init() { }
 | |
|     
 | |
|     // MARK: Closed Groups
 | |
|     @objc public static func getDefaultDisplayName(for group: TSGroupThread) -> String {
 | |
|         let members = group.groupModel.groupMemberIds
 | |
|         let displayNames = members.map { hexEncodedPublicKey -> String in
 | |
|             guard let displayName = UserDisplayNameUtilities.getPrivateChatDisplayName(for: hexEncodedPublicKey) else { return hexEncodedPublicKey }
 | |
|             let regex = try! NSRegularExpression(pattern: ".* \\(\\.\\.\\.[0-9a-fA-F]*\\)")
 | |
|             guard regex.hasMatch(input: displayName) else { return displayName }
 | |
|             return String(displayName[displayName.startIndex..<(displayName.index(displayName.endIndex, offsetBy: -14))])
 | |
|         }.sorted()
 | |
|         return displayNames.joined(separator: ", ")
 | |
|     }
 | |
| }
 |