Fix profile handling

This commit is contained in:
Niels Andriesse 2020-11-26 15:16:35 +11:00
parent ab56e12ff4
commit 341782f255
16 changed files with 61 additions and 57 deletions

View File

@ -46,7 +46,7 @@
#import <SignalUtilitiesKit/OWSFormat.h> #import <SignalUtilitiesKit/OWSFormat.h>
#import <SignalUtilitiesKit/OWSNavigationController.h> #import <SignalUtilitiesKit/OWSNavigationController.h>
#import <SignalUtilitiesKit/OWSUnreadIndicator.h> #import <SignalUtilitiesKit/OWSUnreadIndicator.h>
#import <SignalUtilitiesKit/OWSUserProfile.h> #import <SessionMessagingKit/OWSUserProfile.h>
#import <SignalUtilitiesKit/SignalUtilitiesKit-Swift.h> #import <SignalUtilitiesKit/SignalUtilitiesKit-Swift.h>
#import <SignalUtilitiesKit/UIUtil.h> #import <SignalUtilitiesKit/UIUtil.h>
#import <SignalUtilitiesKit/UIViewController+OWS.h> #import <SignalUtilitiesKit/UIViewController+OWS.h>

View File

@ -19,7 +19,7 @@
#import <SignalUtilitiesKit/OWSProfileManager.h> #import <SignalUtilitiesKit/OWSProfileManager.h>
#import <SessionMessagingKit/OWSSounds.h> #import <SessionMessagingKit/OWSSounds.h>
#import <SignalUtilitiesKit/OWSUserProfile.h> #import <SessionMessagingKit/OWSUserProfile.h>
#import <SignalUtilitiesKit/SignalUtilitiesKit-Swift.h> #import <SignalUtilitiesKit/SignalUtilitiesKit-Swift.h>
#import <SignalUtilitiesKit/UIUtil.h> #import <SignalUtilitiesKit/UIUtil.h>
#import <SessionMessagingKit/OWSDisappearingConfigurationUpdateInfoMessage.h> #import <SessionMessagingKit/OWSDisappearingConfigurationUpdateInfoMessage.h>

View File

@ -6,7 +6,7 @@
#import "DateUtil.h" #import "DateUtil.h"
#import <SignalCoreKit/NSDate+OWS.h> #import <SignalCoreKit/NSDate+OWS.h>
#import <SignalUtilitiesKit/OWSProfileManager.h> #import <SignalUtilitiesKit/OWSProfileManager.h>
#import <SignalUtilitiesKit/OWSUserProfile.h> #import <SessionMessagingKit/OWSUserProfile.h>
#import <SessionMessagingKit/AppReadiness.h> #import <SessionMessagingKit/AppReadiness.h>
#import <SignalUtilitiesKit/AppVersion.h> #import <SignalUtilitiesKit/AppVersion.h>
#import <SessionUtilitiesKit/SessionUtilitiesKit.h> #import <SessionUtilitiesKit/SessionUtilitiesKit.h>

View File

@ -25,4 +25,12 @@ extension Storage {
public func getUserDisplayName() -> String? { public func getUserDisplayName() -> String? {
return SSKEnvironment.shared.profileManager.localProfileName() return SSKEnvironment.shared.profileManager.localProfileName()
} }
public func getUserProfileKey() -> Data? {
return SSKEnvironment.shared.profileManager.localProfileKey().keyData
}
public func getUserProfilePictureURL() -> String? {
return SSKEnvironment.shared.profileManager.profilePictureURL()
}
} }

View File

@ -3,16 +3,20 @@ public extension TSIncomingMessage {
static func from(_ visibleMessage: VisibleMessage, associatedWith thread: TSThread) -> TSIncomingMessage { static func from(_ visibleMessage: VisibleMessage, associatedWith thread: TSThread) -> TSIncomingMessage {
let sender = visibleMessage.sender! let sender = visibleMessage.sender!
var expiration: UInt32 = 0
Storage.read { transaction in
expiration = thread.disappearingMessagesDuration(with: transaction)
}
let result = TSIncomingMessage( let result = TSIncomingMessage(
timestamp: visibleMessage.sentTimestamp!, timestamp: visibleMessage.sentTimestamp!,
in: thread, in: thread,
authorId: sender, authorId: sender,
sourceDeviceId: 1, sourceDeviceId: 1,
messageBody: visibleMessage.text!, messageBody: visibleMessage.text!,
attachmentIds: [], attachmentIds: visibleMessage.attachmentIDs,
expiresInSeconds: 0, expiresInSeconds: expiration,
quotedMessage: TSQuotedMessage.from(visibleMessage.quote), quotedMessage: TSQuotedMessage.from(visibleMessage.quote),
linkPreview: nil, linkPreview: OWSLinkPreview.from(visibleMessage.linkPreview),
serverTimestamp: nil, serverTimestamp: nil,
wasReceivedByUD: true wasReceivedByUD: true
) )

View File

@ -11,13 +11,13 @@
outgoingMessageWithTimestamp: visibleMessage.sentTimestamp!, outgoingMessageWithTimestamp: visibleMessage.sentTimestamp!,
in: thread, in: thread,
messageBody: visibleMessage.text, messageBody: visibleMessage.text,
attachmentIds: NSMutableArray(), attachmentIds: NSMutableArray(array: visibleMessage.attachmentIDs),
expiresInSeconds: expiration, expiresInSeconds: expiration,
expireStartedAt: 0, expireStartedAt: 0,
isVoiceMessage: false, isVoiceMessage: false,
groupMetaMessage: .unspecified, groupMetaMessage: .unspecified,
quotedMessage: TSQuotedMessage.from(visibleMessage.quote), quotedMessage: TSQuotedMessage.from(visibleMessage.quote),
linkPreview: nil linkPreview: OWSLinkPreview.from(visibleMessage.linkPreview)
) )
} }
} }

View File

@ -27,6 +27,7 @@ FOUNDATION_EXPORT const unsigned char SessionMessagingKitVersionString[];
#import <SessionMessagingKit/OWSSounds.h> #import <SessionMessagingKit/OWSSounds.h>
#import <SessionMessagingKit/OWSStorage.h> #import <SessionMessagingKit/OWSStorage.h>
#import <SessionMessagingKit/OWSStorage+Subclass.h> #import <SessionMessagingKit/OWSStorage+Subclass.h>
#import <SessionMessagingKit/OWSUserProfile.h>
#import <SessionMessagingKit/OWSWindowManager.h> #import <SessionMessagingKit/OWSWindowManager.h>
#import <SessionMessagingKit/ProfileManagerProtocol.h> #import <SessionMessagingKit/ProfileManagerProtocol.h>
#import <SessionMessagingKit/ProtoUtils.h> #import <SessionMessagingKit/ProtoUtils.h>

View File

@ -44,8 +44,6 @@ extern NSString *const kOWSBlockingManager_BlockListCollection;
- (BOOL)isGroupIdBlocked:(NSData *)groupId; - (BOOL)isGroupIdBlocked:(NSData *)groupId;
- (BOOL)isThreadBlocked:(TSThread *)thread; - (BOOL)isThreadBlocked:(TSThread *)thread;
- (void)syncBlockList;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,7 @@
extension OWSLinkPreview {
public static func from(_ linkPreview: VisibleMessage.LinkPreview?) -> OWSLinkPreview? {
return nil // TODO: Implement
}
}

View File

@ -146,12 +146,14 @@ extension MessageReceiver {
let attachmentIDs = storage.persist(attachments, using: transaction) let attachmentIDs = storage.persist(attachments, using: transaction)
message.attachmentIDs = attachmentIDs message.attachmentIDs = attachmentIDs
// Update profile if needed // Update profile if needed
if let profile = message.profile { if let newProfile = message.profile {
let profileManager = SSKEnvironment.shared.profileManager let profileManager = SSKEnvironment.shared.profileManager
if let displayName = profile.displayName { let oldProfile = OWSUserProfile.fetch(uniqueId: message.sender!, transaction: transaction)
if let displayName = newProfile.displayName, displayName != oldProfile?.profileName {
profileManager.updateProfileForContact(withID: message.sender!, displayName: displayName, with: transaction) profileManager.updateProfileForContact(withID: message.sender!, displayName: displayName, with: transaction)
} }
if let profileKey = profile.profileKey, let profilePictureURL = profile.profilePictureURL, profileKey.count == kAES256_KeyByteLength { if let profileKey = newProfile.profileKey, let profilePictureURL = newProfile.profilePictureURL, profileKey.count == kAES256_KeyByteLength,
profileKey != oldProfile?.profileKey?.keyData {
profileManager.setProfileKeyData(profileKey, forRecipientId: message.sender!, avatarURL: profilePictureURL) profileManager.setProfileKeyData(profileKey, forRecipientId: message.sender!, avatarURL: profilePictureURL)
} }
} }

View File

@ -74,6 +74,15 @@ public final class MessageSender : NSObject {
} }
// Validate the message // Validate the message
guard message.isValid else { seal.reject(Error.invalidMessage); return promise } guard message.isValid else { seal.reject(Error.invalidMessage); return promise }
// Attach the user's profile if needed
if let message = message as? VisibleMessage {
let displayName = storage.getUserDisplayName()!
if let profileKey = storage.getUserProfileKey(), let profilePictureURL = storage.getUserProfilePictureURL() {
message.profile = VisibleMessage.Profile(displayName: displayName, profileKey: profileKey, profilePictureURL: profilePictureURL)
} else {
message.profile = VisibleMessage.Profile(displayName: displayName)
}
}
// Convert it to protobuf // Convert it to protobuf
guard let proto = message.toProto() else { seal.reject(Error.protoConversionFailed); return promise } guard let proto = message.toProto() else { seal.reject(Error.protoConversionFailed); return promise }
// Serialize the protobuf // Serialize the protobuf

View File

@ -12,6 +12,8 @@ public protocol SessionMessagingKitStorageProtocol {
func getUserPublicKey() -> String? func getUserPublicKey() -> String?
func getUserKeyPair() -> ECKeyPair? func getUserKeyPair() -> ECKeyPair?
func getUserDisplayName() -> String? func getUserDisplayName() -> String?
func getUserProfileKey() -> Data?
func getUserProfilePictureURL() -> String?
// MARK: - Signal Protocol // MARK: - Signal Protocol

View File

@ -4,16 +4,13 @@
#import "OWSUserProfile.h" #import "OWSUserProfile.h"
#import <PromiseKit/AnyPromise.h> #import <PromiseKit/AnyPromise.h>
#import <SessionUtilitiesKit/AppContext.h>
#import <SessionUtilitiesKit/NSNotificationCenter+OWS.h>
#import <SessionUtilitiesKit/NSString+SSK.h>
#import <SessionUtilitiesKit/OWSFileSystem.h>
#import <SessionMessagingKit/OWSPrimaryStorage.h> #import <SessionMessagingKit/OWSPrimaryStorage.h>
#import <SessionMessagingKit/SSKEnvironment.h> #import <SessionMessagingKit/SSKEnvironment.h>
#import <SignalUtilitiesKit/SignalUtilitiesKit-Swift.h>
#import <SessionMessagingKit/TSAccountManager.h> #import <SessionMessagingKit/TSAccountManager.h>
#import <SessionUtilitiesKit/SessionUtilitiesKit.h>
#import <SignalCoreKit/Cryptography.h>
#import <SignalCoreKit/NSObject+OWS.h>
#import <SignalCoreKit/NSString+OWS.h>
#import <YapDatabase/YapDatabaseConnection.h> #import <YapDatabase/YapDatabaseConnection.h>
#import <YapDatabase/YapDatabaseTransaction.h> #import <YapDatabase/YapDatabaseTransaction.h>
@ -73,8 +70,6 @@ NSString *const kLocalProfileUniqueId = @"kLocalProfileUniqueId";
+ (OWSUserProfile *)getOrBuildUserProfileForRecipientId:(NSString *)recipientId transaction:(YapDatabaseReadWriteTransaction *)transaction + (OWSUserProfile *)getOrBuildUserProfileForRecipientId:(NSString *)recipientId transaction:(YapDatabaseReadWriteTransaction *)transaction
{ {
OWSAssertDebug(recipientId.length > 0);
OWSUserProfile *userProfile = [OWSUserProfile fetchObjectWithUniqueID:recipientId transaction:transaction]; OWSUserProfile *userProfile = [OWSUserProfile fetchObjectWithUniqueID:recipientId transaction:transaction];
if (!userProfile) { if (!userProfile) {
@ -87,8 +82,6 @@ NSString *const kLocalProfileUniqueId = @"kLocalProfileUniqueId";
} }
} }
OWSAssertDebug(userProfile);
return userProfile; return userProfile;
} }
@ -110,7 +103,6 @@ NSString *const kLocalProfileUniqueId = @"kLocalProfileUniqueId";
return self; return self;
} }
OWSAssertDebug(recipientId.length > 0);
_recipientId = recipientId; _recipientId = recipientId;
return self; return self;
@ -120,8 +112,6 @@ NSString *const kLocalProfileUniqueId = @"kLocalProfileUniqueId";
- (TSAccountManager *)tsAccountManager - (TSAccountManager *)tsAccountManager
{ {
OWSAssertDebug(SSKEnvironment.shared.tsAccountManager);
return SSKEnvironment.shared.tsAccountManager; return SSKEnvironment.shared.tsAccountManager;
} }
@ -223,7 +213,6 @@ NSString *const kLocalProfileUniqueId = @"kLocalProfileUniqueId";
NSDictionary *afterSnapshot = [latestInstance.dictionaryValue copy]; NSDictionary *afterSnapshot = [latestInstance.dictionaryValue copy];
if ([beforeSnapshot isEqual:afterSnapshot]) { if ([beforeSnapshot isEqual:afterSnapshot]) {
OWSLogVerbose(@"Ignoring redundant update in %s: %@", functionName, self.debugDescription);
didChange = NO; didChange = NO;
} else { } else {
[latestInstance saveWithTransaction:transaction]; [latestInstance saveWithTransaction:transaction];
@ -373,8 +362,6 @@ NSString *const kLocalProfileUniqueId = @"kLocalProfileUniqueId";
transaction:(YapDatabaseReadWriteTransaction *)transaction transaction:(YapDatabaseReadWriteTransaction *)transaction
completion:(nullable OWSUserProfileCompletion)completion completion:(nullable OWSUserProfileCompletion)completion
{ {
OWSAssertDebug(profileKey);
[self applyChanges:^(OWSUserProfile *userProfile) { [self applyChanges:^(OWSUserProfile *userProfile) {
[userProfile setProfileKey:profileKey]; [userProfile setProfileKey:profileKey];
} }
@ -387,29 +374,21 @@ NSString *const kLocalProfileUniqueId = @"kLocalProfileUniqueId";
- (YapDatabaseConnection *)dbReadConnection - (YapDatabaseConnection *)dbReadConnection
{ {
OWSFailDebug(@"UserProfile should always use OWSProfileManager's database connection.");
return TSYapDatabaseObject.dbReadConnection; return TSYapDatabaseObject.dbReadConnection;
} }
+ (YapDatabaseConnection *)dbReadConnection + (YapDatabaseConnection *)dbReadConnection
{ {
OWSFailDebug(@"UserProfile should always use OWSProfileManager's database connection.");
return TSYapDatabaseObject.dbReadConnection; return TSYapDatabaseObject.dbReadConnection;
} }
- (YapDatabaseConnection *)dbReadWriteConnection - (YapDatabaseConnection *)dbReadWriteConnection
{ {
OWSFailDebug(@"UserProfile should always use OWSProfileManager's database connection.");
return TSYapDatabaseObject.dbReadWriteConnection; return TSYapDatabaseObject.dbReadWriteConnection;
} }
+ (YapDatabaseConnection *)dbReadWriteConnection + (YapDatabaseConnection *)dbReadWriteConnection
{ {
OWSFailDebug(@"UserProfile should always use OWSProfileManager's database connection.");
return TSYapDatabaseObject.dbReadWriteConnection; return TSYapDatabaseObject.dbReadWriteConnection;
} }
@ -417,7 +396,7 @@ NSString *const kLocalProfileUniqueId = @"kLocalProfileUniqueId";
- (NSString *)debugDescription - (NSString *)debugDescription
{ {
return [NSString stringWithFormat:@"%@ %p %@ %lu %@ %@ %@", return [NSString stringWithFormat:@"%@ %p %@ %lu %@ %@ %@",
self.logTag, @"OWSUserProfile",
self, self,
self.recipientId, self.recipientId,
(unsigned long)self.profileKey.keyData.length, (unsigned long)self.profileKey.keyData.length,
@ -463,8 +442,6 @@ NSString *const kLocalProfileUniqueId = @"kLocalProfileUniqueId";
+ (nullable NSError *)migrateToSharedData + (nullable NSError *)migrateToSharedData
{ {
OWSLogInfo(@"");
return [OWSFileSystem moveAppFilePath:self.legacyProfileAvatarsDirPath return [OWSFileSystem moveAppFilePath:self.legacyProfileAvatarsDirPath
sharedDataFilePath:self.sharedDataProfileAvatarsDirPath]; sharedDataFilePath:self.sharedDataProfileAvatarsDirPath];
} }
@ -485,13 +462,8 @@ NSString *const kLocalProfileUniqueId = @"kLocalProfileUniqueId";
+ (void)resetProfileStorage + (void)resetProfileStorage
{ {
OWSAssertIsOnMainThread();
NSError *error; NSError *error;
[[NSFileManager defaultManager] removeItemAtPath:[self profileAvatarsDirPath] error:&error]; [[NSFileManager defaultManager] removeItemAtPath:[self profileAvatarsDirPath] error:&error];
if (error) {
OWSLogError(@"Failed to delete database: %@", error.description);
}
} }
+ (NSSet<NSString *> *)allProfileAvatarFilePaths + (NSSet<NSString *> *)allProfileAvatarFilePaths
@ -504,8 +476,6 @@ NSString *const kLocalProfileUniqueId = @"kLocalProfileUniqueId";
enumerateCollectionObjectsWithTransaction:transaction enumerateCollectionObjectsWithTransaction:transaction
usingBlock:^(id object, BOOL *stop) { usingBlock:^(id object, BOOL *stop) {
if (![object isKindOfClass:[OWSUserProfile class]]) { if (![object isKindOfClass:[OWSUserProfile class]]) {
OWSFailDebug(
@"unexpected object in user profiles: %@", [object class]);
return; return;
} }
OWSUserProfile *userProfile = object; OWSUserProfile *userProfile = object;

View File

@ -242,6 +242,9 @@
B85357BF23A1AE0800AAF6CD /* SeedReminderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B85357BE23A1AE0800AAF6CD /* SeedReminderView.swift */; }; B85357BF23A1AE0800AAF6CD /* SeedReminderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B85357BE23A1AE0800AAF6CD /* SeedReminderView.swift */; };
B85357C323A1BD1200AAF6CD /* SeedVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B85357C223A1BD1200AAF6CD /* SeedVC.swift */; }; B85357C323A1BD1200AAF6CD /* SeedVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B85357C223A1BD1200AAF6CD /* SeedVC.swift */; };
B8544E3323D50E4900299F14 /* AppearanceUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8544E3223D50E4900299F14 /* AppearanceUtilities.swift */; }; B8544E3323D50E4900299F14 /* AppearanceUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8544E3223D50E4900299F14 /* AppearanceUtilities.swift */; };
B8566C63256F55930045A0B9 /* OWSLinkPreview+Conversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8566C62256F55930045A0B9 /* OWSLinkPreview+Conversion.swift */; };
B8566C6C256F60F50045A0B9 /* OWSUserProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = C38EF2D1255B6DAF007E1867 /* OWSUserProfile.m */; };
B8566C7D256F62030045A0B9 /* OWSUserProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = C38EF2D3255B6DAF007E1867 /* OWSUserProfile.h */; settings = {ATTRIBUTES = (Public, ); }; };
B86BD08423399ACF000F5AE3 /* Modal.swift in Sources */ = {isa = PBXBuildFile; fileRef = B86BD08323399ACF000F5AE3 /* Modal.swift */; }; B86BD08423399ACF000F5AE3 /* Modal.swift in Sources */ = {isa = PBXBuildFile; fileRef = B86BD08323399ACF000F5AE3 /* Modal.swift */; };
B86BD08623399CEF000F5AE3 /* SeedModal.swift in Sources */ = {isa = PBXBuildFile; fileRef = B86BD08523399CEF000F5AE3 /* SeedModal.swift */; }; B86BD08623399CEF000F5AE3 /* SeedModal.swift in Sources */ = {isa = PBXBuildFile; fileRef = B86BD08523399CEF000F5AE3 /* SeedModal.swift */; };
B8783E9E23EB948D00404FB8 /* UILabel+Interaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8783E9D23EB948D00404FB8 /* UILabel+Interaction.swift */; }; B8783E9E23EB948D00404FB8 /* UILabel+Interaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8783E9D23EB948D00404FB8 /* UILabel+Interaction.swift */; };
@ -612,9 +615,7 @@
C38EF2B3255B6D9C007E1867 /* UIViewController+Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = C38EF2B1255B6D9C007E1867 /* UIViewController+Utilities.swift */; }; C38EF2B3255B6D9C007E1867 /* UIViewController+Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = C38EF2B1255B6D9C007E1867 /* UIViewController+Utilities.swift */; };
C38EF2B4255B6D9C007E1867 /* UIView+Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = C38EF2B2255B6D9C007E1867 /* UIView+Utilities.swift */; }; C38EF2B4255B6D9C007E1867 /* UIView+Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = C38EF2B2255B6D9C007E1867 /* UIView+Utilities.swift */; };
C38EF2D4255B6DAF007E1867 /* OWSProfileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C38EF2CF255B6DAE007E1867 /* OWSProfileManager.m */; }; C38EF2D4255B6DAF007E1867 /* OWSProfileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C38EF2CF255B6DAE007E1867 /* OWSProfileManager.m */; };
C38EF2D6255B6DAF007E1867 /* OWSUserProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = C38EF2D1255B6DAF007E1867 /* OWSUserProfile.m */; };
C38EF2D7255B6DAF007E1867 /* OWSProfileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C38EF2D2255B6DAF007E1867 /* OWSProfileManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; C38EF2D7255B6DAF007E1867 /* OWSProfileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C38EF2D2255B6DAF007E1867 /* OWSProfileManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
C38EF2D8255B6DAF007E1867 /* OWSUserProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = C38EF2D3255B6DAF007E1867 /* OWSUserProfile.h */; settings = {ATTRIBUTES = (Public, ); }; };
C38EF30C255B6DBF007E1867 /* OWSScreenLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = C38EF2E2255B6DB9007E1867 /* OWSScreenLock.swift */; }; C38EF30C255B6DBF007E1867 /* OWSScreenLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = C38EF2E2255B6DB9007E1867 /* OWSScreenLock.swift */; };
C38EF30D255B6DBF007E1867 /* OWSUnreadIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = C38EF2E3255B6DB9007E1867 /* OWSUnreadIndicator.m */; }; C38EF30D255B6DBF007E1867 /* OWSUnreadIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = C38EF2E3255B6DB9007E1867 /* OWSUnreadIndicator.m */; };
C38EF30E255B6DBF007E1867 /* FullTextSearcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C38EF2E4255B6DB9007E1867 /* FullTextSearcher.swift */; }; C38EF30E255B6DBF007E1867 /* FullTextSearcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C38EF2E4255B6DB9007E1867 /* FullTextSearcher.swift */; };
@ -1348,6 +1349,7 @@
B85357C223A1BD1200AAF6CD /* SeedVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeedVC.swift; sourceTree = "<group>"; }; B85357C223A1BD1200AAF6CD /* SeedVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeedVC.swift; sourceTree = "<group>"; };
B8544E3023D16CA500299F14 /* DeviceUtilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceUtilities.swift; sourceTree = "<group>"; }; B8544E3023D16CA500299F14 /* DeviceUtilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceUtilities.swift; sourceTree = "<group>"; };
B8544E3223D50E4900299F14 /* AppearanceUtilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppearanceUtilities.swift; sourceTree = "<group>"; }; B8544E3223D50E4900299F14 /* AppearanceUtilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppearanceUtilities.swift; sourceTree = "<group>"; };
B8566C62256F55930045A0B9 /* OWSLinkPreview+Conversion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OWSLinkPreview+Conversion.swift"; sourceTree = "<group>"; };
B86BD08323399ACF000F5AE3 /* Modal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modal.swift; sourceTree = "<group>"; }; B86BD08323399ACF000F5AE3 /* Modal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modal.swift; sourceTree = "<group>"; };
B86BD08523399CEF000F5AE3 /* SeedModal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeedModal.swift; sourceTree = "<group>"; }; B86BD08523399CEF000F5AE3 /* SeedModal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeedModal.swift; sourceTree = "<group>"; };
B8783E9D23EB948D00404FB8 /* UILabel+Interaction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UILabel+Interaction.swift"; sourceTree = "<group>"; }; B8783E9D23EB948D00404FB8 /* UILabel+Interaction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UILabel+Interaction.swift"; sourceTree = "<group>"; };
@ -1725,9 +1727,9 @@
C38EF2BE255B6DA6007E1867 /* TSUnreadIndicatorInteraction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TSUnreadIndicatorInteraction.h; path = "SessionMessagingKit/Sending & Receiving/Read Tracking/TSUnreadIndicatorInteraction.h"; sourceTree = SOURCE_ROOT; }; C38EF2BE255B6DA6007E1867 /* TSUnreadIndicatorInteraction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TSUnreadIndicatorInteraction.h; path = "SessionMessagingKit/Sending & Receiving/Read Tracking/TSUnreadIndicatorInteraction.h"; sourceTree = SOURCE_ROOT; };
C38EF2C1255B6DA6007E1867 /* TSUnreadIndicatorInteraction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TSUnreadIndicatorInteraction.m; path = "SessionMessagingKit/Sending & Receiving/Read Tracking/TSUnreadIndicatorInteraction.m"; sourceTree = SOURCE_ROOT; }; C38EF2C1255B6DA6007E1867 /* TSUnreadIndicatorInteraction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TSUnreadIndicatorInteraction.m; path = "SessionMessagingKit/Sending & Receiving/Read Tracking/TSUnreadIndicatorInteraction.m"; sourceTree = SOURCE_ROOT; };
C38EF2CF255B6DAE007E1867 /* OWSProfileManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWSProfileManager.m; path = "SignalUtilitiesKit/To Do/OWSProfileManager.m"; sourceTree = SOURCE_ROOT; }; C38EF2CF255B6DAE007E1867 /* OWSProfileManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWSProfileManager.m; path = "SignalUtilitiesKit/To Do/OWSProfileManager.m"; sourceTree = SOURCE_ROOT; };
C38EF2D1255B6DAF007E1867 /* OWSUserProfile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWSUserProfile.m; path = "SignalUtilitiesKit/To Do/OWSUserProfile.m"; sourceTree = SOURCE_ROOT; }; C38EF2D1255B6DAF007E1867 /* OWSUserProfile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWSUserProfile.m; path = "SessionMessagingKit/To Do/OWSUserProfile.m"; sourceTree = SOURCE_ROOT; };
C38EF2D2255B6DAF007E1867 /* OWSProfileManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OWSProfileManager.h; path = "SignalUtilitiesKit/To Do/OWSProfileManager.h"; sourceTree = SOURCE_ROOT; }; C38EF2D2255B6DAF007E1867 /* OWSProfileManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OWSProfileManager.h; path = "SignalUtilitiesKit/To Do/OWSProfileManager.h"; sourceTree = SOURCE_ROOT; };
C38EF2D3255B6DAF007E1867 /* OWSUserProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OWSUserProfile.h; path = "SignalUtilitiesKit/To Do/OWSUserProfile.h"; sourceTree = SOURCE_ROOT; }; C38EF2D3255B6DAF007E1867 /* OWSUserProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OWSUserProfile.h; path = "SessionMessagingKit/To Do/OWSUserProfile.h"; sourceTree = SOURCE_ROOT; };
C38EF2E2255B6DB9007E1867 /* OWSScreenLock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OWSScreenLock.swift; path = SignalUtilitiesKit/OWSScreenLock.swift; sourceTree = SOURCE_ROOT; }; C38EF2E2255B6DB9007E1867 /* OWSScreenLock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OWSScreenLock.swift; path = SignalUtilitiesKit/OWSScreenLock.swift; sourceTree = SOURCE_ROOT; };
C38EF2E3255B6DB9007E1867 /* OWSUnreadIndicator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWSUnreadIndicator.m; path = SignalUtilitiesKit/OWSUnreadIndicator.m; sourceTree = SOURCE_ROOT; }; C38EF2E3255B6DB9007E1867 /* OWSUnreadIndicator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWSUnreadIndicator.m; path = SignalUtilitiesKit/OWSUnreadIndicator.m; sourceTree = SOURCE_ROOT; };
C38EF2E4255B6DB9007E1867 /* FullTextSearcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FullTextSearcher.swift; path = SignalUtilitiesKit/FullTextSearcher.swift; sourceTree = SOURCE_ROOT; }; C38EF2E4255B6DB9007E1867 /* FullTextSearcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FullTextSearcher.swift; path = SignalUtilitiesKit/FullTextSearcher.swift; sourceTree = SOURCE_ROOT; };
@ -2820,6 +2822,8 @@
C33FDAFF255A580600E217F9 /* DisplayNameUtilities.swift */, C33FDAFF255A580600E217F9 /* DisplayNameUtilities.swift */,
C33FDAA0255A57FF00E217F9 /* OWSRecipientIdentity.h */, C33FDAA0255A57FF00E217F9 /* OWSRecipientIdentity.h */,
C33FDBEC255A581B00E217F9 /* OWSRecipientIdentity.m */, C33FDBEC255A581B00E217F9 /* OWSRecipientIdentity.m */,
C38EF2D3255B6DAF007E1867 /* OWSUserProfile.h */,
C38EF2D1255B6DAF007E1867 /* OWSUserProfile.m */,
C32C5C92256DD12D003C73A2 /* OWSUDManager.swift */, C32C5C92256DD12D003C73A2 /* OWSUDManager.swift */,
C33FDBB9255A581600E217F9 /* ProfileManagerProtocol.h */, C33FDBB9255A581600E217F9 /* ProfileManagerProtocol.h */,
C33FDAEC255A580500E217F9 /* SignalRecipient.h */, C33FDAEC255A580500E217F9 /* SignalRecipient.h */,
@ -2858,6 +2862,7 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
C33FDBA8255A581500E217F9 /* OWSLinkPreview.swift */, C33FDBA8255A581500E217F9 /* OWSLinkPreview.swift */,
B8566C62256F55930045A0B9 /* OWSLinkPreview+Conversion.swift */,
); );
path = "Link Previews"; path = "Link Previews";
sourceTree = "<group>"; sourceTree = "<group>";
@ -3205,8 +3210,6 @@
C38EF3EB255B6DF6007E1867 /* ContactTableViewCell.m */, C38EF3EB255B6DF6007E1867 /* ContactTableViewCell.m */,
C38EF2D2255B6DAF007E1867 /* OWSProfileManager.h */, C38EF2D2255B6DAF007E1867 /* OWSProfileManager.h */,
C38EF2CF255B6DAE007E1867 /* OWSProfileManager.m */, C38EF2CF255B6DAE007E1867 /* OWSProfileManager.m */,
C38EF2D3255B6DAF007E1867 /* OWSUserProfile.h */,
C38EF2D1255B6DAF007E1867 /* OWSUserProfile.m */,
C33FDBBB255A581600E217F9 /* OWSPrimaryStorage+Loki.h */, C33FDBBB255A581600E217F9 /* OWSPrimaryStorage+Loki.h */,
C33FDB58255A580E00E217F9 /* OWSPrimaryStorage+Loki.m */, C33FDB58255A580E00E217F9 /* OWSPrimaryStorage+Loki.m */,
); );
@ -3907,7 +3910,6 @@
C33FDD5B255A582000E217F9 /* OWSOperation.h in Headers */, C33FDD5B255A582000E217F9 /* OWSOperation.h in Headers */,
C38EF291255B6D86007E1867 /* SignalKeyingStorage.h in Headers */, C38EF291255B6D86007E1867 /* SignalKeyingStorage.h in Headers */,
C33FDC89255A582000E217F9 /* OWSAttachmentDownloads.h in Headers */, C33FDC89255A582000E217F9 /* OWSAttachmentDownloads.h in Headers */,
C38EF2D8255B6DAF007E1867 /* OWSUserProfile.h in Headers */,
C38EF313255B6DBF007E1867 /* OWSUnreadIndicator.h in Headers */, C38EF313255B6DBF007E1867 /* OWSUnreadIndicator.h in Headers */,
C33FDD7C255A582000E217F9 /* SSKAsserts.h in Headers */, C33FDD7C255A582000E217F9 /* SSKAsserts.h in Headers */,
C33FDDA9255A582000E217F9 /* TSStorageKeys.h in Headers */, C33FDDA9255A582000E217F9 /* TSStorageKeys.h in Headers */,
@ -4051,6 +4053,7 @@
B8856D3D256F11B2001CE70E /* Environment.h in Headers */, B8856D3D256F11B2001CE70E /* Environment.h in Headers */,
C32C5E7E256DE023003C73A2 /* YapDatabaseTransaction+OWS.h in Headers */, C32C5E7E256DE023003C73A2 /* YapDatabaseTransaction+OWS.h in Headers */,
C32C5CAD256DD1DF003C73A2 /* TSAccountManager.h in Headers */, C32C5CAD256DD1DF003C73A2 /* TSAccountManager.h in Headers */,
B8566C7D256F62030045A0B9 /* OWSUserProfile.h in Headers */,
C3A3A0F5256E194C004D228D /* OWSRecipientIdentity.h in Headers */, C3A3A0F5256E194C004D228D /* OWSRecipientIdentity.h in Headers */,
C32C5AB4256DBE8F003C73A2 /* TSOutgoingMessage.h in Headers */, C32C5AB4256DBE8F003C73A2 /* TSOutgoingMessage.h in Headers */,
C32C5EA0256DE0D6003C73A2 /* OWSPrimaryStorage.h in Headers */, C32C5EA0256DE0D6003C73A2 /* OWSPrimaryStorage.h in Headers */,
@ -5014,7 +5017,6 @@
C33FDD14255A582000E217F9 /* OWSUDManager.swift in Sources */, C33FDD14255A582000E217F9 /* OWSUDManager.swift in Sources */,
C33FDDAE255A582000E217F9 /* DisplayNameUtilities2.swift in Sources */, C33FDDAE255A582000E217F9 /* DisplayNameUtilities2.swift in Sources */,
C38EF35C255B6DCC007E1867 /* SelectThreadViewController.m in Sources */, C38EF35C255B6DCC007E1867 /* SelectThreadViewController.m in Sources */,
C38EF2D6255B6DAF007E1867 /* OWSUserProfile.m in Sources */,
C38EF30E255B6DBF007E1867 /* FullTextSearcher.swift in Sources */, C38EF30E255B6DBF007E1867 /* FullTextSearcher.swift in Sources */,
C33FDDD9255A582000E217F9 /* LokiSessionRestorationImplementation.swift in Sources */, C33FDDD9255A582000E217F9 /* LokiSessionRestorationImplementation.swift in Sources */,
C38EF3FA255B6DF7007E1867 /* DirectionalPanGestureRecognizer.swift in Sources */, C38EF3FA255B6DF7007E1867 /* DirectionalPanGestureRecognizer.swift in Sources */,
@ -5196,6 +5198,7 @@
C3A71D1E25589AC30043A11F /* WebSocketProto.swift in Sources */, C3A71D1E25589AC30043A11F /* WebSocketProto.swift in Sources */,
C3A721382558BDFA0043A11F /* OpenGroupMessage.swift in Sources */, C3A721382558BDFA0043A11F /* OpenGroupMessage.swift in Sources */,
C3C2A7852553AAF300C340D1 /* SessionProtos.pb.swift in Sources */, C3C2A7852553AAF300C340D1 /* SessionProtos.pb.swift in Sources */,
B8566C63256F55930045A0B9 /* OWSLinkPreview+Conversion.swift in Sources */,
C32C5B3F256DC1DF003C73A2 /* TSQuotedMessage+Conversion.swift in Sources */, C32C5B3F256DC1DF003C73A2 /* TSQuotedMessage+Conversion.swift in Sources */,
C3C2A7712553A41E00C340D1 /* ControlMessage.swift in Sources */, C3C2A7712553A41E00C340D1 /* ControlMessage.swift in Sources */,
C32C5D19256DD493003C73A2 /* OWSLinkPreview.swift in Sources */, C32C5D19256DD493003C73A2 /* OWSLinkPreview.swift in Sources */,
@ -5217,6 +5220,7 @@
C32C5A88256DBCF9003C73A2 /* MessageReceiver+Handling.swift in Sources */, C32C5A88256DBCF9003C73A2 /* MessageReceiver+Handling.swift in Sources */,
C32C5C1B256DC9E0003C73A2 /* GeneralUtilities.swift in Sources */, C32C5C1B256DC9E0003C73A2 /* GeneralUtilities.swift in Sources */,
C32C5A02256DB658003C73A2 /* MessageSender+Handling.swift in Sources */, C32C5A02256DB658003C73A2 /* MessageSender+Handling.swift in Sources */,
B8566C6C256F60F50045A0B9 /* OWSUserProfile.m in Sources */,
C32C5D2E256DD4EA003C73A2 /* TSUnreadIndicatorInteraction.m in Sources */, C32C5D2E256DD4EA003C73A2 /* TSUnreadIndicatorInteraction.m in Sources */,
C32C599E256DB02B003C73A2 /* TypingIndicators.swift in Sources */, C32C599E256DB02B003C73A2 /* TypingIndicators.swift in Sources */,
C300A5DD2554B06600555489 /* ClosedGroupUpdate.swift in Sources */, C300A5DD2554B06600555489 /* ClosedGroupUpdate.swift in Sources */,

View File

@ -35,7 +35,6 @@ FOUNDATION_EXPORT const unsigned char SignalUtilitiesKitVersionString[];
#import <SignalUtilitiesKit/OWSTextView.h> #import <SignalUtilitiesKit/OWSTextView.h>
#import <SignalUtilitiesKit/OWSUnreadIndicator.h> #import <SignalUtilitiesKit/OWSUnreadIndicator.h>
#import <SignalUtilitiesKit/OWSUploadOperation.h> #import <SignalUtilitiesKit/OWSUploadOperation.h>
#import <SignalUtilitiesKit/OWSUserProfile.h>
#import <SignalUtilitiesKit/OWSViewController.h> #import <SignalUtilitiesKit/OWSViewController.h>
#import <SignalUtilitiesKit/ScreenLockViewController.h> #import <SignalUtilitiesKit/ScreenLockViewController.h>
#import <SignalUtilitiesKit/SelectRecipientViewController.h> #import <SignalUtilitiesKit/SelectRecipientViewController.h>