// // 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 // These two methods should only be called from the main thread. - (OWSAES256Key *)localProfileKey; // 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; - (nullable NSString *)localProfileName; - (nullable UIImage *)localProfileAvatarImage; - (nullable NSData *)localProfileAvatarData; - (nullable NSString *)profilePictureURL; // 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; #pragma mark - Profile Whitelist // These methods are for debugging. - (void)clearProfileWhitelist; - (void)logProfileWhitelist; - (void)regenerateLocalProfile; - (void)addThreadToProfileWhitelist:(TSThread *)thread; - (void)setContactRecipientIds:(NSArray *)contactRecipientIds; #pragma mark - Other User's Profiles // This method is for debugging. - (void)logUserProfiles; - (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; - (nullable UIImage *)profileAvatarForRecipientId:(NSString *)recipientId; - (nullable NSData *)profileAvatarDataForRecipientId:(NSString *)recipientId; - (void)updateProfileForRecipientId:(NSString *)recipientId profileNameEncrypted:(nullable NSData *)profileNameEncrypted avatarUrlPath:(nullable NSString *)avatarUrlPath; - (void)ensureProfileCachedForContactWithID:(NSString *)contactID with:(YapDatabaseReadWriteTransaction *)transaction; #pragma mark - User Interface - (void)presentAddThreadToProfileWhitelist:(TSThread *)thread fromViewController:(UIViewController *)fromViewController success:(void (^)(void))successHandler; @end NS_ASSUME_NONNULL_END