diff --git a/SignalMessaging/profiles/OWSProfileManager.m b/SignalMessaging/profiles/OWSProfileManager.m index 13472e66e..5e0fa88e5 100644 --- a/SignalMessaging/profiles/OWSProfileManager.m +++ b/SignalMessaging/profiles/OWSProfileManager.m @@ -346,11 +346,13 @@ typedef void (^ProfileManagerFailureBlock)(NSError *error); [self.localUserProfile updateWithProfileName:displayName transaction:transaction]; } -- (void)updateUserPofileKeyData:(NSData *)profileKeyData avatarURL:(nullable NSString *)avatarURL transaction:(YapDatabaseReadWriteTransaction *)transaction { +- (void)updateUserProfileKeyData:(NSData *)profileKeyData avatarURL:(nullable NSString *)avatarURL transaction:(YapDatabaseReadWriteTransaction *)transaction { OWSAES256Key *profileKey = [OWSAES256Key keyWithData:profileKeyData]; if (profileKey != nil) { [self.localUserProfile updateWithProfileKey:profileKey transaction:transaction completion:^{ - [self.localUserProfile updateWithAvatarUrlPath:avatarURL transaction:transaction]; + [self.localUserProfile updateWithAvatarUrlPath:avatarURL transaction:transaction completion:^{ + [self downloadAvatarForUserProfile:self.localUserProfile]; + }]; }]; } } @@ -469,6 +471,10 @@ typedef void (^ProfileManagerFailureBlock)(NSError *error); successBlock(); } +- (void)updateServiceWithProfileName:(nullable NSString *)localProfileName avatarUrl:(nullable NSString *)avatarURL { + [self updateServiceWithProfileName:localProfileName avatarUrl:avatarURL success:^{} failure:^(NSError * _Nonnull error) {}]; +} + - (void)fetchLocalUsersProfile { OWSAssertIsOnMainThread(); diff --git a/SignalMessaging/profiles/OWSUserProfile.h b/SignalMessaging/profiles/OWSUserProfile.h index 80ef6d71e..8cd728dc7 100644 --- a/SignalMessaging/profiles/OWSUserProfile.h +++ b/SignalMessaging/profiles/OWSUserProfile.h @@ -82,7 +82,7 @@ extern NSString *const kLocalProfileUniqueId; completion:(nullable OWSUserProfileCompletion)completion; - (void)updateWithProfileName:(nullable NSString *)profileName transaction:(YapDatabaseReadWriteTransaction*)transaction; -- (void)updateWithAvatarUrlPath:(NSString *)avatarUrlPath transaction:(YapDatabaseReadWriteTransaction*)transaction; +- (void)updateWithAvatarUrlPath:(NSString *)avatarUrlPath transaction:(YapDatabaseReadWriteTransaction*)transaction completion:(nullable OWSUserProfileCompletion)completion; #pragma mark - Profile Avatars Directory diff --git a/SignalMessaging/profiles/OWSUserProfile.m b/SignalMessaging/profiles/OWSUserProfile.m index cb73a9765..79ae3d9dc 100644 --- a/SignalMessaging/profiles/OWSUserProfile.m +++ b/SignalMessaging/profiles/OWSUserProfile.m @@ -321,13 +321,13 @@ NSString *const kLocalProfileUniqueId = @"kLocalProfileUniqueId"; [self updateWithProfileName:profileName avatarUrlPath:self.avatarUrlPath avatarFileName:self.avatarFileName transaction:transaction completion:nil]; } -- (void)updateWithAvatarUrlPath:(NSString *)avatarUrlPath transaction:(YapDatabaseReadWriteTransaction*)transaction { +- (void)updateWithAvatarUrlPath:(NSString *)avatarUrlPath transaction:(YapDatabaseReadWriteTransaction*)transaction completion:(nullable OWSUserProfileCompletion)completion { [self applyChanges:^(OWSUserProfile *userProfile) { [userProfile setAvatarUrlPath:avatarUrlPath]; } functionName:__PRETTY_FUNCTION__ transaction:transaction - completion:nil]; + completion:completion]; } - (void)updateWithAvatarUrlPath:(nullable NSString *)avatarUrlPath diff --git a/SignalServiceKit/src/Loki/API/Public Chat/LokiPublicChatPoller.swift b/SignalServiceKit/src/Loki/API/Public Chat/LokiPublicChatPoller.swift index 17dd3cacd..a883e15c7 100644 --- a/SignalServiceKit/src/Loki/API/Public Chat/LokiPublicChatPoller.swift +++ b/SignalServiceKit/src/Loki/API/Public Chat/LokiPublicChatPoller.swift @@ -163,6 +163,13 @@ public final class LokiPublicChatPoller : NSObject { transaction.setObject(senderDisplayName, forKey: senderHexEncodedPublicKey, inCollection: publicChat.id) let messageServerID = message.serverID SSKEnvironment.shared.messageManager.throws_processEnvelope(try! envelope.build(), plaintextData: try! content.build().serializedData(), wasReceivedByUD: false, transaction: transaction, serverID: messageServerID ?? 0) + + // If we got a message from our primary device then we should use its avatar + if let avatar = message.avatar, masterHexEncodedPublicKey == message.hexEncodedPublicKey { + SSKEnvironment.shared.profileManager.updateUserProfile(withDisplayName: message.displayName, transaction: transaction) + SSKEnvironment.shared.profileManager.updateUserProfileKeyData(avatar.profileKey, avatarURL: avatar.url, transaction: transaction) + SSKEnvironment.shared.profileManager.updateService(withProfileName: message.displayName, avatarUrl: avatar.url) + } } } } diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index 4fe4b6241..1862676f9 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -930,7 +930,7 @@ NS_ASSUME_NONNULL_BEGIN NSString *profilePictureURL = profile.profilePicture; [self.profileManager updateUserProfileWithDisplayName:displayName transaction:transaction]; if ([dataMessage hasProfileKey]) { - [self.profileManager updateUserPofileKeyData:dataMessage.profileKey avatarURL:profilePictureURL transaction:transaction]; + [self.profileManager updateUserProfileKeyData:dataMessage.profileKey avatarURL:profilePictureURL transaction:transaction]; } }); } diff --git a/SignalServiceKit/src/Protocols/ProfileManagerProtocol.h b/SignalServiceKit/src/Protocols/ProfileManagerProtocol.h index 3afb804ea..5f2cebc44 100644 --- a/SignalServiceKit/src/Protocols/ProfileManagerProtocol.h +++ b/SignalServiceKit/src/Protocols/ProfileManagerProtocol.h @@ -33,8 +33,9 @@ NS_ASSUME_NONNULL_BEGIN - (void)fetchProfileForRecipientId:(NSString *)recipientId; - (void)updateUserProfileWithDisplayName:(nullable NSString*)displayName transaction:(YapDatabaseReadWriteTransaction *)transaction; -- (void)updateUserPofileKeyData:(NSData *)profileKeyData avatarURL:(nullable NSString *)avatarURL transaction:(YapDatabaseReadWriteTransaction *)transaction; +- (void)updateUserProfileKeyData:(NSData *)profileKeyData avatarURL:(nullable NSString *)avatarURL transaction:(YapDatabaseReadWriteTransaction *)transaction; - (void)updateProfileForContactWithID:(NSString *)contactID displayName:(NSString *)displayName with:(YapDatabaseReadWriteTransaction *)transaction; +- (void)updateServiceWithProfileName:(nullable NSString *)localProfileName avatarUrl:(nullable NSString *)avatarURL; @end