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.
		
		
		
		
		
			
		
			
				
	
	
		
			73 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			73 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Swift
		
	
import SessionUtilitiesKit
 | 
						|
 | 
						|
public extension VisibleMessage {
 | 
						|
 | 
						|
    @objc(SNProfile)
 | 
						|
    class Profile : NSObject, NSCoding {
 | 
						|
        public var displayName: String?
 | 
						|
        public var profileKey: Data?
 | 
						|
        public var profilePictureURL: String?
 | 
						|
 | 
						|
        internal init(displayName: String, profileKey: Data? = nil, profilePictureURL: String? = nil) {
 | 
						|
            self.displayName = displayName
 | 
						|
            self.profileKey = profileKey
 | 
						|
            self.profilePictureURL = profilePictureURL
 | 
						|
        }
 | 
						|
 | 
						|
        public required init?(coder: NSCoder) {
 | 
						|
            if let displayName = coder.decodeObject(forKey: "displayName") as! String? { self.displayName = displayName }
 | 
						|
            if let profileKey = coder.decodeObject(forKey: "profileKey") as! Data? { self.profileKey = profileKey }
 | 
						|
            if let profilePictureURL = coder.decodeObject(forKey: "profilePictureURL") as! String? { self.profilePictureURL = profilePictureURL }
 | 
						|
        }
 | 
						|
 | 
						|
        public func encode(with coder: NSCoder) {
 | 
						|
            coder.encode(displayName, forKey: "displayName")
 | 
						|
            coder.encode(profileKey, forKey: "profileKey")
 | 
						|
            coder.encode(profilePictureURL, forKey: "profilePictureURL")
 | 
						|
        }
 | 
						|
 | 
						|
        public static func fromProto(_ proto: SNProtoDataMessage) -> Profile? {
 | 
						|
            guard let profileProto = proto.profile, let displayName = profileProto.displayName else { return nil }
 | 
						|
            let profileKey = proto.profileKey
 | 
						|
            let profilePictureURL = profileProto.profilePicture
 | 
						|
            if let profileKey = profileKey, let profilePictureURL = profilePictureURL {
 | 
						|
                return Profile(displayName: displayName, profileKey: profileKey, profilePictureURL: profilePictureURL)
 | 
						|
            } else {
 | 
						|
                return Profile(displayName: displayName)
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public func toProto() -> SNProtoDataMessage? {
 | 
						|
            guard let displayName = displayName else {
 | 
						|
                SNLog("Couldn't construct profile proto from: \(self).")
 | 
						|
                return nil
 | 
						|
            }
 | 
						|
            let dataMessageProto = SNProtoDataMessage.builder()
 | 
						|
            let profileProto = SNProtoDataMessageLokiProfile.builder()
 | 
						|
            profileProto.setDisplayName(displayName)
 | 
						|
            if let profileKey = profileKey, let profilePictureURL = profilePictureURL {
 | 
						|
                dataMessageProto.setProfileKey(profileKey)
 | 
						|
                profileProto.setProfilePicture(profilePictureURL)
 | 
						|
            }
 | 
						|
            do {
 | 
						|
                dataMessageProto.setProfile(try profileProto.build())
 | 
						|
                return try dataMessageProto.build()
 | 
						|
            } catch {
 | 
						|
                SNLog("Couldn't construct profile proto from: \(self).")
 | 
						|
                return nil
 | 
						|
            }
 | 
						|
        }
 | 
						|
        
 | 
						|
        // MARK: Description
 | 
						|
        public override var description: String {
 | 
						|
            """
 | 
						|
            Profile(
 | 
						|
                displayName: \(displayName ?? "null")
 | 
						|
                profileKey: \(profileKey?.description ?? "null")
 | 
						|
                profilePictureURL: \(profilePictureURL ?? "null")
 | 
						|
            )
 | 
						|
            """
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |