parent
540a0a8e48
commit
6ec756de44
|
@ -77,6 +77,8 @@
|
|||
34CCAF381F0C0599004084F4 /* AppUpdateNag.m in Sources */ = {isa = PBXBuildFile; fileRef = 34CCAF371F0C0599004084F4 /* AppUpdateNag.m */; };
|
||||
34CCAF3B1F0C2748004084F4 /* OWSAddToContactViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34CCAF3A1F0C2748004084F4 /* OWSAddToContactViewController.m */; };
|
||||
34CE88E71F2FB9A10098030F /* ProfileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34CE88E61F2FB9A10098030F /* ProfileViewController.m */; };
|
||||
34CE88EC1F3237260098030F /* OWSProfileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 34CE88EA1F3237260098030F /* OWSProfileManager.m */; };
|
||||
34CE88ED1F3237260098030F /* ProfileFetcherJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34CE88EB1F3237260098030F /* ProfileFetcherJob.swift */; };
|
||||
34D5CC961EA6AFAD005515DB /* OWSContactsSyncing.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D5CC951EA6AFAD005515DB /* OWSContactsSyncing.m */; };
|
||||
34D5CCA91EAE3D30005515DB /* AvatarViewHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D5CCA81EAE3D30005515DB /* AvatarViewHelper.m */; };
|
||||
34D5CCB11EAE7E7F005515DB /* SelectRecipientViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D5CCB01EAE7E7F005515DB /* SelectRecipientViewController.m */; };
|
||||
|
@ -168,7 +170,6 @@
|
|||
45855F371D9498A40084F340 /* OWSContactAvatarBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 45855F361D9498A40084F340 /* OWSContactAvatarBuilder.m */; };
|
||||
45855F381D9498A40084F340 /* OWSContactAvatarBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 45855F361D9498A40084F340 /* OWSContactAvatarBuilder.m */; };
|
||||
4585C4601ED4FD0400896AEA /* OWS104CreateRecipientIdentities.m in Sources */ = {isa = PBXBuildFile; fileRef = 4585C45F1ED4FD0400896AEA /* OWS104CreateRecipientIdentities.m */; };
|
||||
4585C4661ED5DF7A00896AEA /* ProfileFetcherJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4585C4651ED5DF7A00896AEA /* ProfileFetcherJob.swift */; };
|
||||
4585C4681ED8F8D200896AEA /* SafetyNumberConfirmationAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4585C4671ED8F8D200896AEA /* SafetyNumberConfirmationAlert.swift */; };
|
||||
458967111DC117CC00E9DD21 /* AccountManagerTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 458967101DC117CC00E9DD21 /* AccountManagerTest.swift */; };
|
||||
458DE9D61DEE3FD00071BB03 /* PeerConnectionClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 458DE9D51DEE3FD00071BB03 /* PeerConnectionClient.swift */; };
|
||||
|
@ -506,6 +507,9 @@
|
|||
34CCAF3A1F0C2748004084F4 /* OWSAddToContactViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSAddToContactViewController.m; sourceTree = "<group>"; };
|
||||
34CE88E51F2FB9A10098030F /* ProfileViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProfileViewController.h; sourceTree = "<group>"; };
|
||||
34CE88E61F2FB9A10098030F /* ProfileViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProfileViewController.m; sourceTree = "<group>"; };
|
||||
34CE88E91F3237260098030F /* OWSProfileManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSProfileManager.h; sourceTree = "<group>"; };
|
||||
34CE88EA1F3237260098030F /* OWSProfileManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSProfileManager.m; sourceTree = "<group>"; };
|
||||
34CE88EB1F3237260098030F /* ProfileFetcherJob.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProfileFetcherJob.swift; sourceTree = "<group>"; };
|
||||
34D5CC941EA6AFAD005515DB /* OWSContactsSyncing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSContactsSyncing.h; sourceTree = "<group>"; };
|
||||
34D5CC951EA6AFAD005515DB /* OWSContactsSyncing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSContactsSyncing.m; sourceTree = "<group>"; };
|
||||
34D5CC981EA6EB79005515DB /* OWSMessageCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSMessageCollectionViewCell.h; sourceTree = "<group>"; };
|
||||
|
@ -1074,6 +1078,16 @@
|
|||
path = TSMessageAdapters;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
34CE88E81F3237260098030F /* Profiles */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
34CE88E91F3237260098030F /* OWSProfileManager.h */,
|
||||
34CE88EA1F3237260098030F /* OWSProfileManager.m */,
|
||||
34CE88EB1F3237260098030F /* ProfileFetcherJob.swift */,
|
||||
);
|
||||
path = Profiles;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
34D8C0221ED3673300188D7C /* DebugUI */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -1274,21 +1288,22 @@
|
|||
76EB03C118170B33006006FC /* src */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
45CD81A41DBFF8CF004C9430 /* Storyboards */,
|
||||
76EB03C218170B33006006FC /* AppDelegate.h */,
|
||||
76EB03C318170B33006006FC /* AppDelegate.m */,
|
||||
76EB03FE18170B33006006FC /* call */,
|
||||
76EB040318170B33006006FC /* contact */,
|
||||
70DBA29918CFE98500771DAD /* crypto */,
|
||||
76EB041118170B33006006FC /* environment */,
|
||||
76EB041D18170B33006006FC /* network */,
|
||||
B60959791C2C0FA9004E8797 /* rating */,
|
||||
76EB04C818170B33006006FC /* util */,
|
||||
45D231751DC7E8C50034FA89 /* Jobs */,
|
||||
457F3AC01D14A0F700C51351 /* Models */,
|
||||
450DF2061E0DD28D003D14BE /* UserInterface */,
|
||||
76EB041D18170B33006006FC /* network */,
|
||||
45BFFFA51D898AB8004A12A7 /* Observers */,
|
||||
34CE88E81F3237260098030F /* Profiles */,
|
||||
B60959791C2C0FA9004E8797 /* rating */,
|
||||
45B201741DAECBFD00C461E0 /* Signal-Bridging-Header.h */,
|
||||
45CD81A41DBFF8CF004C9430 /* Storyboards */,
|
||||
450DF2061E0DD28D003D14BE /* UserInterface */,
|
||||
76EB04C818170B33006006FC /* util */,
|
||||
);
|
||||
path = src;
|
||||
sourceTree = "<group>";
|
||||
|
@ -2123,7 +2138,6 @@
|
|||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
34B3F8761E8DF1700035BE1A /* CodeVerificationViewController.m in Sources */,
|
||||
4585C4661ED5DF7A00896AEA /* ProfileFetcherJob.swift in Sources */,
|
||||
76EB063E18170B33006006FC /* Operation.m in Sources */,
|
||||
34B3F8741E8DF1700035BE1A /* AttachmentSharing.m in Sources */,
|
||||
34D8C02B1ED3685800188D7C /* DebugUIContacts.m in Sources */,
|
||||
|
@ -2139,10 +2153,12 @@
|
|||
3456710A1E8A9F5D006EE662 /* TSGenericAttachmentAdapter.m in Sources */,
|
||||
450DF2091E0DD2C6003D14BE /* UserNotificationsAdaptee.swift in Sources */,
|
||||
340CB2241EAC155C0001CAA1 /* ContactsViewHelper.m in Sources */,
|
||||
34CE88EC1F3237260098030F /* OWSProfileManager.m in Sources */,
|
||||
45CD81F21DC03A22004C9430 /* OWSLogger.m in Sources */,
|
||||
4542F0941EB9372700C7EE92 /* SystemContactsFetcher.swift in Sources */,
|
||||
B60C16651988999D00E97A6C /* VersionMigrations.m in Sources */,
|
||||
B97940271832BD2400BD66CB /* UIUtil.m in Sources */,
|
||||
34CE88ED1F3237260098030F /* ProfileFetcherJob.swift in Sources */,
|
||||
34B3F8791E8DF1700035BE1A /* CountryCodeViewController.m in Sources */,
|
||||
4CE0E3771B954546007210CF /* TSAnimatedAdapter.m in Sources */,
|
||||
4531C9C41DD8E6D800F08304 /* JSQMessagesCollectionViewCell+OWS.m in Sources */,
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#import "NotificationsManager.h"
|
||||
#import "OWSContactsManager.h"
|
||||
#import "OWSContactsSyncing.h"
|
||||
#import "OWSProfileManager.h"
|
||||
#import "OWSStaleNotificationObserver.h"
|
||||
#import "Pastelog.h"
|
||||
#import "PropertyListPreferences.h"
|
||||
|
@ -28,7 +29,6 @@
|
|||
#import <SignalServiceKit/OWSFailedMessagesJob.h>
|
||||
#import <SignalServiceKit/OWSIncomingMessageReadObserver.h>
|
||||
#import <SignalServiceKit/OWSMessageSender.h>
|
||||
#import <SignalServiceKit/OWSProfilesManager.h>
|
||||
#import <SignalServiceKit/TSAccountManager.h>
|
||||
#import <SignalServiceKit/TSDatabaseView.h>
|
||||
#import <SignalServiceKit/TSMessagesManager.h>
|
||||
|
@ -161,7 +161,6 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
|
|||
DDLogInfo(@"%@ application: didFinishLaunchingWithOptions completed.", self.tag);
|
||||
|
||||
[OWSAnalytics appLaunchDidBegin];
|
||||
[OWSProfilesManager.sharedManager appLaunchDidBegin];
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
@ -236,7 +235,8 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
|
|||
[[TextSecureKitEnv alloc] initWithCallMessageHandler:[Environment getCurrent].callMessageHandler
|
||||
contactsManager:[Environment getCurrent].contactsManager
|
||||
messageSender:[Environment getCurrent].messageSender
|
||||
notificationsManager:[Environment getCurrent].notificationsManager];
|
||||
notificationsManager:[Environment getCurrent].notificationsManager
|
||||
profileManager:OWSProfileManager.sharedManager];
|
||||
[TextSecureKitEnv setSharedEnv:sharedEnv];
|
||||
|
||||
[[TSStorageManager sharedManager] setupDatabaseWithSafeBlockingMigrations:^{
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import <SignalServiceKit/ProfileManagerProtocol.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
extern NSString *const kNSNotificationName_LocalProfileDidChange;
|
||||
|
@ -10,7 +12,7 @@ extern NSString *const kNSNotificationName_OtherUsersProfileDidChange;
|
|||
@class TSThread;
|
||||
|
||||
// This class can be safely accessed and used from any thread.
|
||||
@interface OWSProfilesManager : NSObject
|
||||
@interface OWSProfileManager : NSObject <ProfileManagerProtocol>
|
||||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
|
||||
|
@ -33,9 +35,6 @@ extern NSString *const kNSNotificationName_OtherUsersProfileDidChange;
|
|||
success:(void (^)())successBlock
|
||||
failure:(void (^)())failureBlock;
|
||||
|
||||
// This method should only be called from the main thread.
|
||||
- (void)appLaunchDidBegin;
|
||||
|
||||
#pragma mark - Profile Whitelist
|
||||
|
||||
- (void)addUserToProfileWhitelist:(NSString *)recipientId;
|
||||
|
@ -50,7 +49,7 @@ extern NSString *const kNSNotificationName_OtherUsersProfileDidChange;
|
|||
|
||||
#pragma mark - Other User's Profiles
|
||||
|
||||
+ (void)setProfileKey:(NSData *)profileKey forRecipientId:(NSString *)recipientId;
|
||||
- (void)setProfileKey:(NSData *)profileKey forRecipientId:(NSString *)recipientId;
|
||||
|
||||
- (nullable NSData *)profileKeyForRecipientId:(NSString *)recipientId;
|
||||
|
|
@ -2,16 +2,18 @@
|
|||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "OWSProfilesManager.h"
|
||||
#import "NSData+hexString.h"
|
||||
#import "NSDate+OWS.h"
|
||||
#import "OWSMessageSender.h"
|
||||
#import "SecurityUtils.h"
|
||||
#import "TSGroupThread.h"
|
||||
#import "TSStorageManager.h"
|
||||
#import "TSThread.h"
|
||||
#import "TSYapDatabaseObject.h"
|
||||
#import "TextSecureKitEnv.h"
|
||||
#import "OWSProfileManager.h"
|
||||
#import "Environment.h"
|
||||
#import <SignalServiceKit/NSData+hexString.h>
|
||||
#import <SignalServiceKit/NSDate+OWS.h>
|
||||
#import <SignalServiceKit/OWSMessageSender.h>
|
||||
#import <SignalServiceKit/SecurityUtils.h>
|
||||
#import <SignalServiceKit/TSGroupThread.h>
|
||||
#import <SignalServiceKit/TSStorageManager.h>
|
||||
#import <SignalServiceKit/TSStorageManager.h>
|
||||
#import <SignalServiceKit/TSThread.h>
|
||||
#import <SignalServiceKit/TSYapDatabaseObject.h>
|
||||
#import <SignalServiceKit/TextSecureKitEnv.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
|
@ -27,7 +29,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
@property (nonatomic, nullable) NSString *avatarUrl;
|
||||
@property (nonatomic, nullable) NSString *avatarDigest;
|
||||
|
||||
// This filename is relative to OWSProfilesManager.profileAvatarsDirPath.
|
||||
// This filename is relative to OWSProfileManager.profileAvatarsDirPath.
|
||||
@property (nonatomic, nullable) NSString *avatarFileName;
|
||||
|
||||
// This should reflect when either:
|
||||
|
@ -85,13 +87,13 @@ NSString *const kNSNotificationName_LocalProfileUniqueId = @"kNSNotificationName
|
|||
NSString *const kNSNotificationName_LocalProfileDidChange = @"kNSNotificationName_LocalProfileDidChange";
|
||||
NSString *const kNSNotificationName_OtherUsersProfileDidChange = @"kNSNotificationName_OtherUsersProfileDidChange";
|
||||
|
||||
NSString *const kOWSProfilesManager_UserWhitelistCollection = @"kOWSProfilesManager_UserWhitelistCollection";
|
||||
NSString *const kOWSProfilesManager_GroupWhitelistCollection = @"kOWSProfilesManager_GroupWhitelistCollection";
|
||||
NSString *const kOWSProfileManager_UserWhitelistCollection = @"kOWSProfileManager_UserWhitelistCollection";
|
||||
NSString *const kOWSProfileManager_GroupWhitelistCollection = @"kOWSProfileManager_GroupWhitelistCollection";
|
||||
|
||||
// TODO:
|
||||
static const NSInteger kProfileKeyLength = 16;
|
||||
|
||||
@interface OWSProfilesManager ()
|
||||
@interface OWSProfileManager ()
|
||||
|
||||
@property (nonatomic, readonly) OWSMessageSender *messageSender;
|
||||
@property (nonatomic, readonly) YapDatabaseConnection *dbConnection;
|
||||
|
@ -113,11 +115,11 @@ static const NSInteger kProfileKeyLength = 16;
|
|||
|
||||
#pragma mark -
|
||||
|
||||
@implementation OWSProfilesManager
|
||||
@implementation OWSProfileManager
|
||||
|
||||
+ (instancetype)sharedManager
|
||||
{
|
||||
static OWSProfilesManager *sharedMyManager = nil;
|
||||
static OWSProfileManager *sharedMyManager = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
sharedMyManager = [[self alloc] initDefault];
|
||||
|
@ -128,7 +130,7 @@ static const NSInteger kProfileKeyLength = 16;
|
|||
- (instancetype)initDefault
|
||||
{
|
||||
TSStorageManager *storageManager = [TSStorageManager sharedManager];
|
||||
OWSMessageSender *messageSender = [TextSecureKitEnv sharedEnv].messageSender;
|
||||
OWSMessageSender *messageSender = [Environment getCurrent].messageSender;
|
||||
|
||||
return [self initWithStorageManager:storageManager messageSender:messageSender];
|
||||
}
|
||||
|
@ -157,7 +159,7 @@ static const NSInteger kProfileKeyLength = 16;
|
|||
self.localUserProfile = [self getOrCreateUserProfileForRecipientId:kNSNotificationName_LocalProfileUniqueId];
|
||||
OWSAssert(self.localUserProfile);
|
||||
if (!self.localUserProfile.profileKey) {
|
||||
self.localUserProfile.profileKey = [OWSProfilesManager generateLocalProfileKey];
|
||||
self.localUserProfile.profileKey = [OWSProfileManager generateLocalProfileKey];
|
||||
// Make sure to save on the local db connection for consistency.
|
||||
//
|
||||
// NOTE: we do an async read/write here to avoid blocking during app launch path.
|
||||
|
@ -183,11 +185,6 @@ static const NSInteger kProfileKeyLength = 16;
|
|||
object:nil];
|
||||
}
|
||||
|
||||
- (void)appLaunchDidBegin
|
||||
{
|
||||
// Do nothing; we only want to make sure this singleton is created on startup.
|
||||
}
|
||||
|
||||
#pragma mark - User Profile Accessor
|
||||
|
||||
// This method can be safely called from any thread.
|
||||
|
@ -422,7 +419,7 @@ static const NSInteger kProfileKeyLength = 16;
|
|||
OWSAssert([NSThread isMainThread]);
|
||||
OWSAssert(recipientId.length > 0);
|
||||
|
||||
[self.dbConnection setBool:YES forKey:recipientId inCollection:kOWSProfilesManager_UserWhitelistCollection];
|
||||
[self.dbConnection setBool:YES forKey:recipientId inCollection:kOWSProfileManager_UserWhitelistCollection];
|
||||
self.userProfileWhitelistCache[recipientId] = @(YES);
|
||||
}
|
||||
|
||||
|
@ -444,7 +441,7 @@ static const NSInteger kProfileKeyLength = 16;
|
|||
|
||||
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
||||
for (NSString *recipientId in recipientIds) {
|
||||
[transaction setObject:@(YES) forKey:recipientId inCollection:kOWSProfilesManager_UserWhitelistCollection];
|
||||
[transaction setObject:@(YES) forKey:recipientId inCollection:kOWSProfileManager_UserWhitelistCollection];
|
||||
self.userProfileWhitelistCache[recipientId] = @(YES);
|
||||
}
|
||||
}];
|
||||
|
@ -459,7 +456,7 @@ static const NSInteger kProfileKeyLength = 16;
|
|||
return [value boolValue];
|
||||
}
|
||||
|
||||
value = @([self.dbConnection hasObjectForKey:recipientId inCollection:kOWSProfilesManager_UserWhitelistCollection]);
|
||||
value = @([self.dbConnection hasObjectForKey:recipientId inCollection:kOWSProfileManager_UserWhitelistCollection]);
|
||||
self.userProfileWhitelistCache[recipientId] = value;
|
||||
return [value boolValue];
|
||||
}
|
||||
|
@ -469,7 +466,7 @@ static const NSInteger kProfileKeyLength = 16;
|
|||
OWSAssert(groupId.length > 0);
|
||||
|
||||
NSString *groupIdKey = [groupId hexadecimalString];
|
||||
[self.dbConnection setObject:@(1) forKey:groupIdKey inCollection:kOWSProfilesManager_GroupWhitelistCollection];
|
||||
[self.dbConnection setObject:@(1) forKey:groupIdKey inCollection:kOWSProfileManager_GroupWhitelistCollection];
|
||||
self.groupProfileWhitelistCache[groupIdKey] = @(YES);
|
||||
}
|
||||
|
||||
|
@ -484,7 +481,7 @@ static const NSInteger kProfileKeyLength = 16;
|
|||
}
|
||||
|
||||
value =
|
||||
@(nil != [self.dbConnection objectForKey:groupIdKey inCollection:kOWSProfilesManager_GroupWhitelistCollection]);
|
||||
@(nil != [self.dbConnection objectForKey:groupIdKey inCollection:kOWSProfileManager_GroupWhitelistCollection]);
|
||||
self.groupProfileWhitelistCache[groupIdKey] = value;
|
||||
return [value boolValue];
|
||||
}
|
||||
|
@ -496,10 +493,10 @@ static const NSInteger kProfileKeyLength = 16;
|
|||
if (thread.isGroupThread) {
|
||||
TSGroupThread *groupThread = (TSGroupThread *)thread;
|
||||
NSData *groupId = groupThread.groupModel.groupId;
|
||||
return [OWSProfilesManager.sharedManager isGroupIdInProfileWhitelist:groupId];
|
||||
return [self isGroupIdInProfileWhitelist:groupId];
|
||||
} else {
|
||||
NSString *recipientId = thread.contactIdentifier;
|
||||
return [OWSProfilesManager.sharedManager isUserInProfileWhitelist:recipientId];
|
||||
return [self isUserInProfileWhitelist:recipientId];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -507,7 +504,7 @@ static const NSInteger kProfileKeyLength = 16;
|
|||
{
|
||||
OWSAssert([NSThread isMainThread]);
|
||||
OWSAssert(contactRecipientIds);
|
||||
|
||||
|
||||
// TODO: The persisted whitelist could either be:
|
||||
//
|
||||
// * Just users manually added to the whitelist.
|
||||
|
@ -518,32 +515,26 @@ static const NSInteger kProfileKeyLength = 16;
|
|||
|
||||
#pragma mark - Other User's Profiles
|
||||
|
||||
+ (void)setProfileKey:(NSData *)profileKey forRecipientId:(NSString *)recipientId
|
||||
{
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[[self sharedManager] setProfileKey:profileKey forRecipientId:recipientId];
|
||||
});
|
||||
}
|
||||
|
||||
- (void)setProfileKey:(NSData *)profileKey forRecipientId:(NSString *)recipientId
|
||||
{
|
||||
OWSAssert([NSThread isMainThread]);
|
||||
OWSAssert(profileKey.length == kProfileKeyLength);
|
||||
OWSAssert(recipientId.length > 0);
|
||||
if (profileKey.length != kProfileKeyLength) {
|
||||
return;
|
||||
}
|
||||
|
||||
UserProfile *userProfile = [self getOrCreateUserProfileForRecipientId:recipientId];
|
||||
OWSAssert(userProfile);
|
||||
if (userProfile.profileKey && [userProfile.profileKey isEqual:profileKey]) {
|
||||
// Ignore redundant update.
|
||||
return;
|
||||
}
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
UserProfile *userProfile = [self getOrCreateUserProfileForRecipientId:recipientId];
|
||||
OWSAssert(userProfile);
|
||||
if (userProfile.profileKey && [userProfile.profileKey isEqual:profileKey]) {
|
||||
// Ignore redundant update.
|
||||
return;
|
||||
}
|
||||
|
||||
userProfile.profileKey = profileKey;
|
||||
userProfile.profileKey = profileKey;
|
||||
|
||||
[self saveUserProfile:userProfile];
|
||||
[self saveUserProfile:userProfile];
|
||||
});
|
||||
}
|
||||
|
||||
- (nullable NSData *)profileKeyForRecipientId:(NSString *)recipientId
|
|
@ -75,7 +75,6 @@
|
|||
#import <SignalServiceKit/OWSDisappearingMessagesConfiguration.h>
|
||||
#import <SignalServiceKit/OWSIdentityManager.h>
|
||||
#import <SignalServiceKit/OWSMessageSender.h>
|
||||
#import <SignalServiceKit/OWSProfilesManager.h>
|
||||
#import <SignalServiceKit/OWSUnknownContactBlockOfferMessage.h>
|
||||
#import <SignalServiceKit/OWSVerificationStateChangeMessage.h>
|
||||
#import <SignalServiceKit/SignalRecipient.h>
|
||||
|
@ -967,7 +966,6 @@ typedef enum : NSUInteger {
|
|||
}
|
||||
[self updateNavigationBarSubtitleLabel];
|
||||
[ProfileFetcherJob runWithThread:self.thread networkManager:self.networkManager];
|
||||
[OWSProfilesManager.sharedManager refreshProfilesForThread:self.thread];
|
||||
|
||||
[self markVisibleMessagesAsRead];
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#import "OWSAvatarBuilder.h"
|
||||
#import "OWSBlockingManager.h"
|
||||
#import "OWSContactsManager.h"
|
||||
#import "OWSProfileManager.h"
|
||||
#import "PhoneNumber.h"
|
||||
#import "ShowGroupMembersViewController.h"
|
||||
#import "Signal-Swift.h"
|
||||
|
@ -24,7 +25,6 @@
|
|||
#import <SignalServiceKit/OWSDisappearingMessagesConfiguration.h>
|
||||
#import <SignalServiceKit/OWSMessageSender.h>
|
||||
#import <SignalServiceKit/OWSNotifyRemoteOfUpdatedDisappearingConfigurationJob.h>
|
||||
#import <SignalServiceKit/OWSProfilesManager.h>
|
||||
#import <SignalServiceKit/TSGroupThread.h>
|
||||
#import <SignalServiceKit/TSOutgoingMessage.h>
|
||||
#import <SignalServiceKit/TSStorageManager.h>
|
||||
|
@ -294,7 +294,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
}]];
|
||||
}
|
||||
|
||||
if ([OWSProfilesManager.sharedManager isThreadInProfileWhitelist:self.thread]) {
|
||||
if ([OWSProfileManager.sharedManager isThreadInProfileWhitelist:self.thread]) {
|
||||
[mainSection addItem:[OWSTableItem itemWithCustomCellBlock:^{
|
||||
return [weakSelf
|
||||
labelCellWithName:(self.isGroupThread
|
||||
|
@ -804,10 +804,10 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
if (self.isGroupThread) {
|
||||
TSGroupThread *groupThread = (TSGroupThread *)self.thread;
|
||||
NSData *groupId = groupThread.groupModel.groupId;
|
||||
[OWSProfilesManager.sharedManager addGroupIdToProfileWhitelist:groupId];
|
||||
[OWSProfileManager.sharedManager addGroupIdToProfileWhitelist:groupId];
|
||||
} else {
|
||||
NSString *recipientId = self.thread.contactIdentifier;
|
||||
[OWSProfilesManager.sharedManager addUserToProfileWhitelist:recipientId];
|
||||
[OWSProfileManager.sharedManager addUserToProfileWhitelist:recipientId];
|
||||
}
|
||||
|
||||
[self updateTableContents];
|
||||
|
|
|
@ -4,12 +4,12 @@
|
|||
|
||||
#import "ProfileViewController.h"
|
||||
#import "AvatarViewHelper.h"
|
||||
#import "OWSProfileManager.h"
|
||||
#import "Signal-Swift.h"
|
||||
#import "UIColor+OWS.h"
|
||||
#import "UIFont+OWS.h"
|
||||
#import "UIView+OWS.h"
|
||||
#import "UIViewController+OWS.h"
|
||||
#import <SignalServiceKit/OWSProfilesManager.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
|
@ -46,7 +46,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
_avatarViewHelper = [AvatarViewHelper new];
|
||||
_avatarViewHelper.delegate = self;
|
||||
|
||||
_avatar = [OWSProfilesManager.sharedManager localProfileAvatarImage];
|
||||
_avatar = [OWSProfileManager.sharedManager localProfileAvatarImage];
|
||||
|
||||
[self createViews];
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
_nameTextField.placeholder = NSLocalizedString(
|
||||
@"PROFILE_VIEW_NAME_DEFAULT_TEXT", @"Default text for the profile name field of the profile view.");
|
||||
_nameTextField.delegate = self;
|
||||
_nameTextField.text = [OWSProfilesManager.sharedManager localProfileName];
|
||||
_nameTextField.text = [OWSProfileManager.sharedManager localProfileName];
|
||||
[_nameTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
|
||||
|
||||
_avatarView = [AvatarImageView new];
|
||||
|
@ -212,14 +212,14 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
- (void)updateProfile
|
||||
{
|
||||
__weak ProfileViewController *weakSelf = self;
|
||||
[OWSProfilesManager.sharedManager updateLocalProfileName:self.nameTextField.text
|
||||
avatarImage:self.avatar
|
||||
success:^{
|
||||
[weakSelf.navigationController popViewControllerAnimated:YES];
|
||||
}
|
||||
failure:^{
|
||||
// TODO: Handle failure.
|
||||
}];
|
||||
[OWSProfileManager.sharedManager updateLocalProfileName:self.nameTextField.text
|
||||
avatarImage:self.avatar
|
||||
success:^{
|
||||
[weakSelf.navigationController popViewControllerAnimated:YES];
|
||||
}
|
||||
failure:^{
|
||||
// TODO: Handle failure.
|
||||
}];
|
||||
}
|
||||
|
||||
#pragma mark - UITextFieldDelegate
|
||||
|
|
|
@ -4,12 +4,12 @@
|
|||
|
||||
#import "OWSContactsManager.h"
|
||||
#import "Environment.h"
|
||||
#import "OWSProfileManager.h"
|
||||
#import "Signal-Swift.h"
|
||||
#import "Util.h"
|
||||
#import "ViewControllerUtils.h"
|
||||
#import <SignalServiceKit/ContactsUpdater.h>
|
||||
#import <SignalServiceKit/OWSError.h>
|
||||
#import <SignalServiceKit/OWSProfilesManager.h>
|
||||
#import <SignalServiceKit/SignalAccount.h>
|
||||
#import <SignalServiceKit/TSStorageManager.h>
|
||||
|
||||
|
@ -206,7 +206,7 @@ NSString *const kTSStorageManager_AccountLastNames = @"kTSStorageManager_Account
|
|||
self.signalAccountMap = [signalAccountMap copy];
|
||||
self.signalAccounts = [signalAccounts copy];
|
||||
|
||||
[OWSProfilesManager.sharedManager setContactRecipientIds:signalAccountMap.allKeys];
|
||||
[OWSProfileManager.sharedManager setContactRecipientIds:signalAccountMap.allKeys];
|
||||
|
||||
[self updateCachedDisplayNames];
|
||||
});
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#import "TestUtil.h"
|
||||
|
||||
@implementation ExceptionsTest
|
||||
|
||||
- (void)testContracts {
|
||||
ows_require(1 + 1 == 2);
|
||||
@try {
|
||||
|
|
|
@ -5,12 +5,13 @@
|
|||
#import "TSOutgoingMessage.h"
|
||||
#import "NSDate+millisecondTimeStamp.h"
|
||||
#import "OWSOutgoingSyncMessage.h"
|
||||
#import "OWSProfilesManager.h"
|
||||
#import "OWSSignalServiceProtos.pb.h"
|
||||
#import "ProfileManagerProtocol.h"
|
||||
#import "SignalRecipient.h"
|
||||
#import "TSAttachmentStream.h"
|
||||
#import "TSContactThread.h"
|
||||
#import "TSGroupThread.h"
|
||||
#import "TextSecureKitEnv.h"
|
||||
#import <YapDatabase/YapDatabase.h>
|
||||
#import <YapDatabase/YapDatabaseTransaction.h>
|
||||
|
||||
|
@ -464,7 +465,10 @@ NSString *const kTSOutgoingMessageSentRecipientAll = @"kTSOutgoingMessageSentRec
|
|||
OWSAssert(contentBuilder);
|
||||
OWSAssert(recipient);
|
||||
|
||||
OWSAssert(OWSProfilesManager.sharedManager.localProfileKey.length > 0);
|
||||
id<ProfileManagerProtocol> profileManager = [TextSecureKitEnv sharedEnv].profileManager;
|
||||
NSData *localProfileKey = profileManager.localProfileKey;
|
||||
|
||||
OWSAssert(localProfileKey.length > 0);
|
||||
BOOL shouldIncludeProfileKey = NO;
|
||||
|
||||
if ([self isKindOfClass:[OWSOutgoingSyncMessage class]]) {
|
||||
|
@ -478,15 +482,15 @@ NSString *const kTSOutgoingMessageSentRecipientAll = @"kTSOutgoingMessageSentRec
|
|||
//
|
||||
// For Group threads, we want to include the profile key IFF the
|
||||
// recipient OR the group is in the whitelist.
|
||||
if ([OWSProfilesManager.sharedManager isUserInProfileWhitelist:recipient.recipientId]) {
|
||||
if ([profileManager isUserInProfileWhitelist:recipient.recipientId]) {
|
||||
shouldIncludeProfileKey = YES;
|
||||
} else if ([OWSProfilesManager.sharedManager isThreadInProfileWhitelist:self.thread]) {
|
||||
} else if ([profileManager isThreadInProfileWhitelist:self.thread]) {
|
||||
shouldIncludeProfileKey = YES;
|
||||
}
|
||||
}
|
||||
|
||||
if (shouldIncludeProfileKey) {
|
||||
[contentBuilder setProfileKey:OWSProfilesManager.sharedManager.localProfileKey];
|
||||
[contentBuilder setProfileKey:localProfileKey];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,12 +19,12 @@
|
|||
#import "OWSIncomingMessageFinder.h"
|
||||
#import "OWSIncomingSentMessageTranscript.h"
|
||||
#import "OWSMessageSender.h"
|
||||
#import "OWSProfilesManager.h"
|
||||
#import "OWSReadReceiptsProcessor.h"
|
||||
#import "OWSRecordTranscriptJob.h"
|
||||
#import "OWSSyncContactsMessage.h"
|
||||
#import "OWSSyncGroupsMessage.h"
|
||||
#import "OWSSyncGroupsRequestMessage.h"
|
||||
#import "ProfileManagerProtocol.h"
|
||||
#import "TSAccountManager.h"
|
||||
#import "TSAttachmentStream.h"
|
||||
#import "TSCall.h"
|
||||
|
@ -499,7 +499,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
if ([content hasProfileKey]) {
|
||||
NSData *profileKey = [content profileKey];
|
||||
NSString *recipientId = envelope.source;
|
||||
[OWSProfilesManager setProfileKey:profileKey forRecipientId:recipientId];
|
||||
id<ProfileManagerProtocol> profileManager = [TextSecureKitEnv sharedEnv].profileManager;
|
||||
[profileManager setProfileKey:profileKey forRecipientId:recipientId];
|
||||
}
|
||||
|
||||
if (content.hasSyncMessage) {
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
@class TSThread;
|
||||
|
||||
@protocol ProfileManagerProtocol <NSObject>
|
||||
|
||||
- (NSData *)localProfileKey;
|
||||
|
||||
- (void)setProfileKey:(NSData *)profileKey forRecipientId:(NSString *)recipientId;
|
||||
|
||||
- (BOOL)isUserInProfileWhitelist:(NSString *)recipientId;
|
||||
|
||||
- (BOOL)isThreadInProfileWhitelist:(TSThread *)thread;
|
||||
|
||||
@end
|
|
@ -8,13 +8,15 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
@class OWSMessageSender;
|
||||
@protocol NotificationsProtocol;
|
||||
@protocol OWSCallMessageHandler;
|
||||
@protocol ProfileManagerProtocol;
|
||||
|
||||
@interface TextSecureKitEnv : NSObject
|
||||
|
||||
- (instancetype)initWithCallMessageHandler:(id<OWSCallMessageHandler>)callMessageHandler
|
||||
contactsManager:(id<ContactsManagerProtocol>)contactsManager
|
||||
messageSender:(OWSMessageSender *)messageSender
|
||||
notificationsManager:(id<NotificationsProtocol>)notificationsManager NS_DESIGNATED_INITIALIZER;
|
||||
notificationsManager:(id<NotificationsProtocol>)notificationsManager
|
||||
profileManager:(id<ProfileManagerProtocol>)profileManager NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
|
||||
|
@ -25,6 +27,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
@property (nonatomic, readonly) id<ContactsManagerProtocol> contactsManager;
|
||||
@property (nonatomic, readonly) OWSMessageSender *messageSender;
|
||||
@property (nonatomic, readonly) id<NotificationsProtocol> notificationsManager;
|
||||
@property (nonatomic, readonly) id<ProfileManagerProtocol> profileManager;
|
||||
|
||||
@end
|
||||
|
||||
|
|
|
@ -11,12 +11,14 @@ static TextSecureKitEnv *TextSecureKitEnvSharedInstance;
|
|||
@implementation TextSecureKitEnv
|
||||
|
||||
@synthesize callMessageHandler = _callMessageHandler, contactsManager = _contactsManager,
|
||||
messageSender = _messageSender, notificationsManager = _notificationsManager;
|
||||
messageSender = _messageSender, notificationsManager = _notificationsManager,
|
||||
profileManager = _profileManager;
|
||||
|
||||
- (instancetype)initWithCallMessageHandler:(id<OWSCallMessageHandler>)callMessageHandler
|
||||
contactsManager:(id<ContactsManagerProtocol>)contactsManager
|
||||
messageSender:(OWSMessageSender *)messageSender
|
||||
notificationsManager:(id<NotificationsProtocol>)notificationsManager
|
||||
profileManager:(id<ProfileManagerProtocol>)profileManager
|
||||
{
|
||||
self = [super init];
|
||||
if (!self) {
|
||||
|
@ -27,6 +29,7 @@ static TextSecureKitEnv *TextSecureKitEnvSharedInstance;
|
|||
_contactsManager = contactsManager;
|
||||
_messageSender = messageSender;
|
||||
_notificationsManager = notificationsManager;
|
||||
_profileManager = profileManager;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
@ -71,6 +74,12 @@ static TextSecureKitEnv *TextSecureKitEnvSharedInstance;
|
|||
return _notificationsManager;
|
||||
}
|
||||
|
||||
- (id<ProfileManagerProtocol>)profileManager
|
||||
{
|
||||
NSAssert(_profileManager, @"Trying to access the profileManager before it's set.");
|
||||
return _profileManager;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
|
Loading…
Reference in New Issue