// // Copyright (c) 2018 Open Whisper Systems. All rights reserved. // #import NS_ASSUME_NONNULL_BEGIN extern NSString *const kNSNotificationName_ProfileWhitelistDidChange; extern NSString *const kNSNotificationName_ProfileKeyDidChange; extern const NSUInteger kOWSProfileManager_NameDataLength; extern const NSUInteger kOWSProfileManager_MaxAvatarDiameter; @class OWSAES256Key; @class OWSMessageSender; @class OWSPrimaryStorage; @class TSNetworkManager; @class TSThread; @class YapDatabaseReadWriteTransaction; // This class can be safely accessed and used from any thread. @interface OWSProfileManager : NSObject - (instancetype)init NS_UNAVAILABLE; - (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage; + (instancetype)sharedManager; #pragma mark - Local Profile // localUserProfileExists is true if there is _ANY_ local profile. - (BOOL)localProfileExists; // hasLocalProfile is true if there is a local profile with a name or avatar. - (BOOL)hasLocalProfile; // This method is used to update the "local profile" state on the client // and the service. Client state is only updated if service state is // successfully updated. // // This method should only be called from the main thread. - (void)updateLocalProfileName:(nullable NSString *)profileName avatarImage:(nullable UIImage *)avatarImage success:(void (^)(void))successBlock failure:(void (^)(NSError *))failureBlock requiresSync:(BOOL)requiresSync; - (BOOL)isProfileNameTooLong:(nullable NSString *)profileName; - (void)regenerateLocalProfile; #pragma mark - Other Users' Profiles - (nullable UIImage *)profileAvatarForRecipientId:(NSString *)recipientId; - (nullable NSData *)profileAvatarDataForRecipientId:(NSString *)recipientId; - (void)updateProfileForRecipientId:(NSString *)recipientId profileNameEncrypted:(nullable NSData *)profileNameEncrypted avatarUrlPath:(nullable NSString *)avatarUrlPath; #pragma mark - Other - (void)downloadAvatarForUserProfile:(SNContact *)contact; @end NS_ASSUME_NONNULL_END