mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
Merge branch 'charlesmchen/fix-ssk-tests-l'
This commit is contained in:
commit
a0a48431ca
87 changed files with 649 additions and 493 deletions
2
Pods
2
Pods
|
@ -1 +1 @@
|
|||
Subproject commit 2a6302d1cf33633b229749b89e5f00fa0c4c6163
|
||||
Subproject commit d391491cd90264d3676106f35edc1f575ff7572d
|
|
@ -93,8 +93,6 @@
|
|||
3461293E1FD1D72B00532771 /* ExperienceUpgradeFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3461293D1FD1D72B00532771 /* ExperienceUpgradeFinder.swift */; };
|
||||
3461295A1FD1D74C00532771 /* Environment.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129401FD1D74B00532771 /* Environment.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
3461295B1FD1D74C00532771 /* Environment.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129411FD1D74B00532771 /* Environment.m */; };
|
||||
3461296F1FD1D74C00532771 /* Release.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129561FD1D74B00532771 /* Release.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
346129701FD1D74C00532771 /* Release.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129571FD1D74B00532771 /* Release.m */; };
|
||||
346129711FD1D74C00532771 /* SignalKeyingStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 346129581FD1D74B00532771 /* SignalKeyingStorage.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
346129721FD1D74C00532771 /* SignalKeyingStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 346129591FD1D74B00532771 /* SignalKeyingStorage.m */; };
|
||||
346129731FD1E01700532771 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 451DE9F11DC1585F00810E42 /* PromiseKit.framework */; };
|
||||
|
@ -156,6 +154,7 @@
|
|||
347850721FDAEB17007B8332 /* OWSUserProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 347850701FDAEB16007B8332 /* OWSUserProfile.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
34843B2421432293004DED45 /* SignalBaseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 34843B2221432292004DED45 /* SignalBaseTest.m */; };
|
||||
34843B26214327C9004DED45 /* OWSOrphanDataCleanerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 34843B25214327C9004DED45 /* OWSOrphanDataCleanerTest.m */; };
|
||||
34843B2C214FE296004DED45 /* MockEnvironment.m in Sources */ = {isa = PBXBuildFile; fileRef = 34843B2A214FE295004DED45 /* MockEnvironment.m */; };
|
||||
348570A820F67575004FF32B /* OWSMessageHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 348570A620F67574004FF32B /* OWSMessageHeaderView.m */; };
|
||||
348BB25D20A0C5530047AEC2 /* ContactShareViewHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 348BB25C20A0C5530047AEC2 /* ContactShareViewHelper.swift */; };
|
||||
3491D9A121022DB7001EF5A1 /* CDSSigningCertificateTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 3491D9A021022DB7001EF5A1 /* CDSSigningCertificateTest.m */; };
|
||||
|
@ -729,8 +728,6 @@
|
|||
3461293D1FD1D72B00532771 /* ExperienceUpgradeFinder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ExperienceUpgradeFinder.swift; path = ExperienceUpgrades/ExperienceUpgradeFinder.swift; sourceTree = "<group>"; };
|
||||
346129401FD1D74B00532771 /* Environment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Environment.h; sourceTree = "<group>"; };
|
||||
346129411FD1D74B00532771 /* Environment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Environment.m; sourceTree = "<group>"; };
|
||||
346129561FD1D74B00532771 /* Release.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Release.h; sourceTree = "<group>"; };
|
||||
346129571FD1D74B00532771 /* Release.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Release.m; sourceTree = "<group>"; };
|
||||
346129581FD1D74B00532771 /* SignalKeyingStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignalKeyingStorage.h; sourceTree = "<group>"; };
|
||||
346129591FD1D74B00532771 /* SignalKeyingStorage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignalKeyingStorage.m; sourceTree = "<group>"; };
|
||||
346129931FD1E30000532771 /* OWSDatabaseMigration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSDatabaseMigration.h; sourceTree = "<group>"; };
|
||||
|
@ -795,6 +792,8 @@
|
|||
34843B2221432292004DED45 /* SignalBaseTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignalBaseTest.m; sourceTree = "<group>"; };
|
||||
34843B2321432293004DED45 /* SignalBaseTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignalBaseTest.h; sourceTree = "<group>"; };
|
||||
34843B25214327C9004DED45 /* OWSOrphanDataCleanerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSOrphanDataCleanerTest.m; sourceTree = "<group>"; };
|
||||
34843B2A214FE295004DED45 /* MockEnvironment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MockEnvironment.m; sourceTree = "<group>"; };
|
||||
34843B2B214FE295004DED45 /* MockEnvironment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MockEnvironment.h; sourceTree = "<group>"; };
|
||||
348570A620F67574004FF32B /* OWSMessageHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSMessageHeaderView.m; sourceTree = "<group>"; };
|
||||
348570A720F67574004FF32B /* OWSMessageHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSMessageHeaderView.h; sourceTree = "<group>"; };
|
||||
348BB25C20A0C5530047AEC2 /* ContactShareViewHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactShareViewHelper.swift; sourceTree = "<group>"; };
|
||||
|
@ -1630,8 +1629,6 @@
|
|||
45F170AB1E2F0351003FC1F2 /* OWSAudioSession.swift */,
|
||||
34074F60203D0CBE004596AE /* OWSSounds.h */,
|
||||
34074F5F203D0CBD004596AE /* OWSSounds.m */,
|
||||
346129561FD1D74B00532771 /* Release.h */,
|
||||
346129571FD1D74B00532771 /* Release.m */,
|
||||
346129581FD1D74B00532771 /* SignalKeyingStorage.h */,
|
||||
346129591FD1D74B00532771 /* SignalKeyingStorage.m */,
|
||||
346129E01FD5C0BE00532771 /* VersionMigrations.h */,
|
||||
|
@ -1728,6 +1725,15 @@
|
|||
path = Views;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
34843B29214FE295004DED45 /* mocks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
34843B2B214FE295004DED45 /* MockEnvironment.h */,
|
||||
34843B2A214FE295004DED45 /* MockEnvironment.m */,
|
||||
);
|
||||
path = mocks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
34B3F8331E8DF1700035BE1A /* ViewControllers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -2308,15 +2314,16 @@
|
|||
B660F66C1C29867F00687D6E /* test */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
34843B2321432293004DED45 /* SignalBaseTest.h */,
|
||||
34843B2221432292004DED45 /* SignalBaseTest.m */,
|
||||
4C3EF8002109184A0007EBF7 /* SSKTests */,
|
||||
34C6B0A41FA0E46F00D35993 /* Assets */,
|
||||
B660F6731C29867F00687D6E /* call */,
|
||||
B660F6751C29867F00687D6E /* contact */,
|
||||
34843B29214FE295004DED45 /* mocks */,
|
||||
458E38381D6699110094BD24 /* Models */,
|
||||
B660F69B1C29868000687D6E /* push */,
|
||||
34843B2321432293004DED45 /* SignalBaseTest.h */,
|
||||
34843B2221432292004DED45 /* SignalBaseTest.m */,
|
||||
4589670F1DC117CC00E9DD21 /* SignalTests-Bridging-Header.h */,
|
||||
4C3EF8002109184A0007EBF7 /* SSKTests */,
|
||||
B660F69D1C29868000687D6E /* Supporting Files */,
|
||||
B660F6A01C29868000687D6E /* TestUtil.h */,
|
||||
B660F6A21C29868000687D6E /* util */,
|
||||
|
@ -2527,7 +2534,6 @@
|
|||
451F8A3C1FD71392005CB9DA /* UIUtil.h in Headers */,
|
||||
346129D61FD20ADC00532771 /* UIViewController+OWS.h in Headers */,
|
||||
3421981421061A0700C57195 /* JSQMessagesAvatarImage.h in Headers */,
|
||||
3461296F1FD1D74C00532771 /* Release.h in Headers */,
|
||||
34612A061FD7238600532771 /* OWSContactsSyncing.h in Headers */,
|
||||
34480B571FD0A7A400BC14EF /* OWSScrubbingLogFormatter.h in Headers */,
|
||||
346129FC1FD5F31400532771 /* OWS101ExistingUsersBlockOnIdentityChange.h in Headers */,
|
||||
|
@ -3181,7 +3187,6 @@
|
|||
34AC09DF211B39B100997B47 /* OWSNavigationController.m in Sources */,
|
||||
34074F61203D0CBE004596AE /* OWSSounds.m in Sources */,
|
||||
346129B51FD1F7E800532771 /* OWSProfileManager.m in Sources */,
|
||||
346129701FD1D74C00532771 /* Release.m in Sources */,
|
||||
342950832124C9750000B063 /* OWSTextView.m in Sources */,
|
||||
3421981321061A0700C57195 /* JSQMessagesAvatarImageFactory.m in Sources */,
|
||||
452EC6E1205FF5DC000E787C /* Bench.swift in Sources */,
|
||||
|
@ -3475,6 +3480,7 @@
|
|||
45360B901F9527DA00FA666C /* SearcherTest.swift in Sources */,
|
||||
B660F7561C29988E00687D6E /* PushManager.m in Sources */,
|
||||
34DB0BED2011548B007B313F /* OWSDatabaseConverterTest.m in Sources */,
|
||||
34843B2C214FE296004DED45 /* MockEnvironment.m in Sources */,
|
||||
45360B911F952AA900FA666C /* MarqueeLabel.swift in Sources */,
|
||||
454EBAB41F2BE14C00ACE0BB /* OWSAnalytics.swift in Sources */,
|
||||
954AEE6A1DF33E01002E5410 /* ContactsPickerTest.swift in Sources */,
|
||||
|
|
|
@ -29,7 +29,6 @@
|
|||
#import <SignalMessaging/OWSNavigationController.h>
|
||||
#import <SignalMessaging/OWSPreferences.h>
|
||||
#import <SignalMessaging/OWSProfileManager.h>
|
||||
#import <SignalMessaging/Release.h>
|
||||
#import <SignalMessaging/SignalMessaging.h>
|
||||
#import <SignalMessaging/VersionMigrations.h>
|
||||
#import <SignalServiceKit/AppReadiness.h>
|
||||
|
@ -157,11 +156,9 @@ static NSTimeInterval launchStartedAt;
|
|||
// This block will be cleared in storageIsReady.
|
||||
[DeviceSleepManager.sharedInstance addBlockWithBlockObject:self];
|
||||
|
||||
[AppSetup setupEnvironmentWithCallMessageHandlerBlock:^{
|
||||
return SignalApp.sharedApp.callMessageHandler;
|
||||
}
|
||||
notificationsProtocolBlock:^{
|
||||
return SignalApp.sharedApp.notificationsManager;
|
||||
[AppSetup
|
||||
setupEnvironmentWithAppSpecificSingletonBlock:^{
|
||||
[SignalApp.sharedApp createSingletons];
|
||||
}
|
||||
migrationCompletion:^{
|
||||
OWSAssertIsOnMainThread();
|
||||
|
|
|
@ -16,7 +16,7 @@ class ConversationConfigurationSyncOperation: OWSOperation {
|
|||
}
|
||||
|
||||
private var messageSender: MessageSender {
|
||||
return Environment.shared.messageSender
|
||||
return SSKEnvironment.shared.messageSender
|
||||
}
|
||||
|
||||
private var contactsManager: OWSContactsManager {
|
||||
|
|
|
@ -59,7 +59,6 @@
|
|||
#import <SignalMessaging/OWSQuotedReplyModel.h>
|
||||
#import <SignalMessaging/OWSSounds.h>
|
||||
#import <SignalMessaging/OWSViewController.h>
|
||||
#import <SignalMessaging/Release.h>
|
||||
#import <SignalMessaging/ThreadUtil.h>
|
||||
#import <SignalMessaging/UIColor+OWS.h>
|
||||
#import <SignalMessaging/UIFont+OWS.h>
|
||||
|
|
|
@ -10,20 +10,18 @@ import Foundation
|
|||
@objc(OWSCallNotificationsAdapter)
|
||||
public class CallNotificationsAdapter: NSObject {
|
||||
|
||||
let adaptee: OWSCallNotificationsAdaptee
|
||||
|
||||
override init() {
|
||||
// TODO We can't mix UILocalNotification (NotificationManager) with the UNNotifications
|
||||
var adaptee: OWSCallNotificationsAdaptee {
|
||||
// TODO: We may eventually want to use UserNotificationsAdaptee instead.
|
||||
//
|
||||
// We can't mix UILocalNotification (NotificationManager) with the UNNotifications
|
||||
// Because registering message categories in one, clobbers the registered categories from the other
|
||||
// We have to first port *all* the existing UINotification categories to UNNotifications
|
||||
// which is a good thing to do, but in trying to limit the scope of changes that's been
|
||||
// which is a good thing to do, but in trying to limit the scope of changes that's been
|
||||
// left out for now.
|
||||
// if #available(iOS 10.0, *) {
|
||||
// adaptee = UserNotificationsAdaptee()
|
||||
// } else {
|
||||
adaptee = SignalApp.shared().notificationsManager
|
||||
// }
|
||||
return SignalApp.shared().notificationsManager
|
||||
}
|
||||
|
||||
@objc public override init() {
|
||||
super.init()
|
||||
|
||||
SwiftSingletons.register(self)
|
||||
|
|
|
@ -273,11 +273,10 @@ typedef enum : NSUInteger {
|
|||
|
||||
- (void)commonInit
|
||||
{
|
||||
|
||||
_viewControllerCreatedAt = CACurrentMediaTime();
|
||||
_contactsManager = Environment.shared.contactsManager;
|
||||
_contactsUpdater = Environment.shared.contactsUpdater;
|
||||
_messageSender = Environment.shared.messageSender;
|
||||
_contactsUpdater = SSKEnvironment.shared.contactsUpdater;
|
||||
_messageSender = SSKEnvironment.shared.messageSender;
|
||||
_outboundCallInitiator = SignalApp.sharedApp.outboundCallInitiator;
|
||||
_primaryStorage = [OWSPrimaryStorage sharedManager];
|
||||
_networkManager = [TSNetworkManager sharedManager];
|
||||
|
|
|
@ -11,7 +11,7 @@ class DebugUICalling: DebugUIPage {
|
|||
// MARK: Dependencies
|
||||
|
||||
var messageSender: MessageSender {
|
||||
return Environment.shared.messageSender
|
||||
return SSKEnvironment.shared.messageSender
|
||||
}
|
||||
|
||||
// MARK: Overrides
|
||||
|
|
|
@ -242,7 +242,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
OWSSyncGroupsRequestMessage *syncGroupsRequestMessage =
|
||||
[[OWSSyncGroupsRequestMessage alloc] initWithThread:thread
|
||||
groupId:[Randomness generateRandomBytes:16]];
|
||||
[Environment.shared.messageSender enqueueMessage:syncGroupsRequestMessage
|
||||
[SSKEnvironment.shared.messageSender enqueueMessage:syncGroupsRequestMessage
|
||||
success:^{
|
||||
OWSLogWarn(@"Successfully sent Request Group Info message.");
|
||||
}
|
||||
|
@ -326,7 +326,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
NSString *randomText = [self randomText];
|
||||
NSString *text = [[[@(counter) description] stringByAppendingString:@" "] stringByAppendingString:randomText];
|
||||
OWSMessageSender *messageSender = Environment.shared.messageSender;
|
||||
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
|
||||
TSOutgoingMessage *message =
|
||||
[ThreadUtil sendMessageWithText:text inThread:thread quotedReplyModel:nil messageSender:messageSender];
|
||||
OWSLogError(@"sendTextMessageInThread timestamp: %llu.", message.timestamp);
|
||||
|
@ -364,7 +364,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
OWSAssertDebug(filePath);
|
||||
OWSAssertDebug(thread);
|
||||
|
||||
OWSMessageSender *messageSender = Environment.shared.messageSender;
|
||||
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
|
||||
NSString *filename = [filePath lastPathComponent];
|
||||
NSString *utiType = [MIMETypeUtil utiTypeForFileExtension:filename.pathExtension];
|
||||
DataSource *_Nullable dataSource = [DataSourcePath dataSourceWithFilePath:filePath shouldDeleteOnDeallocation:NO];
|
||||
|
@ -1743,7 +1743,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
OWSAssertDebug(thread);
|
||||
|
||||
SignalAttachment *attachment = [self signalAttachmentForFilePath:filePath];
|
||||
OWSMessageSender *messageSender = Environment.shared.messageSender;
|
||||
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
|
||||
[ThreadUtil sendMessageWithAttachment:attachment
|
||||
inThread:thread
|
||||
quotedReplyModel:nil
|
||||
|
@ -3150,7 +3150,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
|||
ActionFailureBlock failure) {
|
||||
OWSContact *contact = contactBlock(transaction);
|
||||
OWSLogVerbose(@"sending contact: %@", contact.debugDescription);
|
||||
OWSMessageSender *messageSender = Environment.shared.messageSender;
|
||||
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
|
||||
[ThreadUtil sendMessageWithContactShare:contact inThread:thread messageSender:messageSender completion:nil];
|
||||
|
||||
success();
|
||||
|
@ -3342,7 +3342,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
|||
|
||||
+ (void)sendOversizeTextMessage:(TSThread *)thread
|
||||
{
|
||||
OWSMessageSender *messageSender = Environment.shared.messageSender;
|
||||
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
|
||||
NSString *message = [self randomOversizeText];
|
||||
DataSource *_Nullable dataSource = [DataSourceValue dataSourceWithOversizeText:message];
|
||||
SignalAttachment *attachment =
|
||||
|
@ -3374,7 +3374,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
|||
|
||||
+ (void)sendRandomAttachment:(TSThread *)thread uti:(NSString *)uti length:(NSUInteger)length
|
||||
{
|
||||
OWSMessageSender *messageSender = Environment.shared.messageSender;
|
||||
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
|
||||
DataSource *_Nullable dataSource =
|
||||
[DataSourceValue dataSourceWithData:[self createRandomNSDataOfSize:length] utiType:uti];
|
||||
SignalAttachment *attachment =
|
||||
|
@ -3860,7 +3860,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
|||
[TSOutgoingMessage outgoingMessageInThread:thread groupMetaMessage:TSGroupMetaMessageNew expiresInSeconds:0];
|
||||
[message updateWithCustomMessage:NSLocalizedString(@"GROUP_CREATED", nil)];
|
||||
|
||||
OWSMessageSender *messageSender = Environment.shared.messageSender;
|
||||
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
|
||||
void (^completion)(void) = ^{
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)1.f * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
|
||||
[ThreadUtil sendMessageWithText:[@(counter) description]
|
||||
|
@ -4401,7 +4401,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
|||
}
|
||||
NSString *filename = filenames.lastObject;
|
||||
[filenames removeLastObject];
|
||||
OWSMessageSender *messageSender = Environment.shared.messageSender;
|
||||
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
|
||||
NSString *utiType = (NSString *)kUTTypeData;
|
||||
const NSUInteger kDataLength = 32;
|
||||
DataSource *_Nullable dataSource =
|
||||
|
|
|
@ -230,7 +230,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
return;
|
||||
}
|
||||
|
||||
OWSMessageSender *messageSender = Environment.shared.messageSender;
|
||||
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
|
||||
NSString *utiType = [MIMETypeUtil utiTypeForFileExtension:fileName.pathExtension];
|
||||
DataSource *_Nullable dataSource = [DataSourcePath dataSourceWithFilePath:filePath shouldDeleteOnDeallocation:YES];
|
||||
[dataSource setSourceFilename:fileName];
|
||||
|
@ -259,7 +259,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
return;
|
||||
}
|
||||
|
||||
OWSMessageSender *messageSender = Environment.shared.messageSender;
|
||||
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
|
||||
NSString *utiType = [MIMETypeUtil utiTypeForFileExtension:fileName.pathExtension];
|
||||
DataSource *_Nullable dataSource = [DataSourcePath dataSourceWithFilePath:filePath shouldDeleteOnDeallocation:YES];
|
||||
[dataSource setSourceFilename:fileName];
|
||||
|
|
|
@ -17,7 +17,7 @@ class DebugUINotifications: DebugUIPage {
|
|||
return SignalApp.shared().callService.notificationsAdapter
|
||||
}
|
||||
var messageSender: MessageSender {
|
||||
return Environment.shared.messageSender
|
||||
return SSKEnvironment.shared.messageSender
|
||||
}
|
||||
var contactsManager: OWSContactsManager {
|
||||
return Environment.shared.contactsManager
|
||||
|
|
|
@ -11,7 +11,7 @@ class DebugUIProfile: DebugUIPage {
|
|||
// MARK: Dependencies
|
||||
|
||||
var messageSender: MessageSender {
|
||||
return Environment.shared.messageSender
|
||||
return SSKEnvironment.shared.messageSender
|
||||
}
|
||||
var profileManager: OWSProfileManager {
|
||||
return OWSProfileManager.shared()
|
||||
|
|
|
@ -70,7 +70,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
[OWSTableItem itemWithTitle:@"Send session reset"
|
||||
actionBlock:^{
|
||||
[OWSSessionResetJob runWithContactThread:thread
|
||||
messageSender:Environment.shared.messageSender
|
||||
messageSender:SSKEnvironment.shared.messageSender
|
||||
primaryStorage:[OWSPrimaryStorage sharedManager]];
|
||||
}],
|
||||
]];
|
||||
|
|
|
@ -471,7 +471,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
{
|
||||
OWSAssertDebug(message);
|
||||
|
||||
OWSMessageSender *messageSender = Environment.shared.messageSender;
|
||||
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
|
||||
[messageSender enqueueMessage:message
|
||||
success:^{
|
||||
OWSLogInfo(@"Successfully sent message.");
|
||||
|
|
|
@ -64,7 +64,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
+ (OWSMessageSender *)messageSender
|
||||
{
|
||||
return Environment.shared.messageSender;
|
||||
return SSKEnvironment.shared.messageSender;
|
||||
}
|
||||
|
||||
+ (OWSContactsManager *)contactsManager
|
||||
|
|
|
@ -147,7 +147,7 @@ NSString *const kArchivedConversationsReuseIdentifier = @"kArchivedConversations
|
|||
{
|
||||
_accountManager = SignalApp.sharedApp.accountManager;
|
||||
_contactsManager = Environment.shared.contactsManager;
|
||||
_messageSender = Environment.shared.messageSender;
|
||||
_messageSender = SSKEnvironment.shared.messageSender;
|
||||
_blocklistCache = [OWSBlockListCache new];
|
||||
[_blocklistCache startObservingAndSyncStateWithDelegate:self];
|
||||
_threadViewModelCache = [NSCache new];
|
||||
|
|
|
@ -86,7 +86,7 @@ const NSUInteger kNewGroupViewControllerAvatarWidth = 68;
|
|||
|
||||
- (void)commonInit
|
||||
{
|
||||
_messageSender = Environment.shared.messageSender;
|
||||
_messageSender = SSKEnvironment.shared.messageSender;
|
||||
_contactsViewHelper = [[ContactsViewHelper alloc] initWithDelegate:self];
|
||||
_avatarViewHelper = [AvatarViewHelper new];
|
||||
_avatarViewHelper.delegate = self;
|
||||
|
|
|
@ -104,7 +104,7 @@ const CGFloat kIconViewLength = 24;
|
|||
{
|
||||
_accountManager = [TSAccountManager sharedInstance];
|
||||
_contactsManager = Environment.shared.contactsManager;
|
||||
_messageSender = Environment.shared.messageSender;
|
||||
_messageSender = SSKEnvironment.shared.messageSender;
|
||||
_blockingManager = [OWSBlockingManager sharedManager];
|
||||
_contactsViewHelper = [[ContactsViewHelper alloc] initWithDelegate:self];
|
||||
|
||||
|
|
|
@ -83,7 +83,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
- (void)commonInit
|
||||
{
|
||||
_messageSender = Environment.shared.messageSender;
|
||||
_messageSender = SSKEnvironment.shared.messageSender;
|
||||
_contactsViewHelper = [[ContactsViewHelper alloc] initWithDelegate:self];
|
||||
_avatarViewHelper = [AvatarViewHelper new];
|
||||
_avatarViewHelper.delegate = self;
|
||||
|
|
|
@ -17,6 +17,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
@class OutboundCallInitiator;
|
||||
@class TSThread;
|
||||
|
||||
// TODO: Pull out singletons to MainAppEnvironment?
|
||||
@interface SignalApp : NSObject
|
||||
|
||||
@property (nonatomic, nullable, weak) HomeViewController *homeViewController;
|
||||
|
@ -35,6 +36,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
+ (instancetype)sharedApp;
|
||||
|
||||
- (void)createSingletons;
|
||||
|
||||
#pragma mark - Conversation Presentation
|
||||
|
||||
- (void)presentConversationForRecipientId:(NSString *)recipientId animated:(BOOL)isAnimated;
|
||||
|
|
|
@ -55,97 +55,89 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
#pragma mark - Singletons
|
||||
|
||||
- (void)createSingletons
|
||||
{
|
||||
OWSAssertDebug(SSKEnvironment.shared.messageSender);
|
||||
OWSAssertDebug(Environment.shared.contactsManager);
|
||||
OWSAssertDebug(Environment.shared.preferences);
|
||||
OWSAssertDebug(SSKEnvironment.shared.networkManager);
|
||||
OWSAssertDebug(SSKEnvironment.shared.contactsUpdater);
|
||||
|
||||
_accountManager = [[AccountManager alloc] initWithTextSecureAccountManager:[TSAccountManager sharedInstance]
|
||||
preferences:Environment.shared.preferences];
|
||||
|
||||
_notificationsManager = [NotificationsManager new];
|
||||
SSKEnvironment.shared.notificationsManager = self.notificationsManager;
|
||||
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(didChangeCallLoggingPreference:)
|
||||
name:OWSPreferencesCallLoggingDidChangeNotification
|
||||
object:nil];
|
||||
_callService = [[CallService alloc] initWithAccountManager:self.accountManager
|
||||
contactsManager:Environment.shared.contactsManager
|
||||
messageSender:SSKEnvironment.shared.messageSender
|
||||
notificationsAdapter:[OWSCallNotificationsAdapter new]];
|
||||
|
||||
_callMessageHandler =
|
||||
[[OWSWebRTCCallMessageHandler alloc] initWithAccountManager:self.accountManager
|
||||
callService:self.callService
|
||||
messageSender:SSKEnvironment.shared.messageSender];
|
||||
SSKEnvironment.shared.callMessageHandler = self.callMessageHandler;
|
||||
|
||||
_outboundCallInitiator =
|
||||
[[OutboundCallInitiator alloc] initWithContactsManager:Environment.shared.contactsManager
|
||||
contactsUpdater:SSKEnvironment.shared.contactsUpdater];
|
||||
|
||||
_messageFetcherJob = [[OWSMessageFetcherJob alloc] initWithMessageReceiver:[OWSMessageReceiver sharedInstance]
|
||||
networkManager:SSKEnvironment.shared.networkManager
|
||||
signalService:[OWSSignalService sharedInstance]];
|
||||
}
|
||||
|
||||
- (OWSWebRTCCallMessageHandler *)callMessageHandler
|
||||
{
|
||||
@synchronized(self)
|
||||
{
|
||||
if (!_callMessageHandler) {
|
||||
_callMessageHandler =
|
||||
[[OWSWebRTCCallMessageHandler alloc] initWithAccountManager:self.accountManager
|
||||
callService:self.callService
|
||||
messageSender:Environment.shared.messageSender];
|
||||
}
|
||||
}
|
||||
OWSAssertDebug(_callMessageHandler);
|
||||
|
||||
return _callMessageHandler;
|
||||
}
|
||||
|
||||
- (CallService *)callService
|
||||
{
|
||||
@synchronized(self)
|
||||
{
|
||||
if (!_callService) {
|
||||
OWSAssertDebug(self.accountManager);
|
||||
OWSAssertDebug(Environment.shared.contactsManager);
|
||||
OWSAssertDebug(Environment.shared.messageSender);
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didChangeCallLoggingPreference:) name:OWSPreferencesCallLoggingDidChangeNotification object:nil];
|
||||
|
||||
_callService = [[CallService alloc] initWithAccountManager:self.accountManager
|
||||
contactsManager:Environment.shared.contactsManager
|
||||
messageSender:Environment.shared.messageSender
|
||||
notificationsAdapter:[OWSCallNotificationsAdapter new]];
|
||||
}
|
||||
}
|
||||
OWSAssertDebug(_callService);
|
||||
|
||||
return _callService;
|
||||
}
|
||||
|
||||
- (CallUIAdapter *)callUIAdapter
|
||||
{
|
||||
OWSAssertDebug(self.callService.callUIAdapter);
|
||||
|
||||
return self.callService.callUIAdapter;
|
||||
}
|
||||
|
||||
- (OutboundCallInitiator *)outboundCallInitiator
|
||||
{
|
||||
@synchronized(self)
|
||||
{
|
||||
if (!_outboundCallInitiator) {
|
||||
OWSAssertDebug(Environment.shared.contactsManager);
|
||||
OWSAssertDebug(Environment.shared.contactsUpdater);
|
||||
_outboundCallInitiator =
|
||||
[[OutboundCallInitiator alloc] initWithContactsManager:Environment.shared.contactsManager
|
||||
contactsUpdater:Environment.shared.contactsUpdater];
|
||||
}
|
||||
}
|
||||
OWSAssertDebug(_outboundCallInitiator);
|
||||
|
||||
return _outboundCallInitiator;
|
||||
}
|
||||
|
||||
- (OWSMessageFetcherJob *)messageFetcherJob
|
||||
{
|
||||
@synchronized(self)
|
||||
{
|
||||
if (!_messageFetcherJob) {
|
||||
_messageFetcherJob =
|
||||
[[OWSMessageFetcherJob alloc] initWithMessageReceiver:[OWSMessageReceiver sharedInstance]
|
||||
networkManager:Environment.shared.networkManager
|
||||
signalService:[OWSSignalService sharedInstance]];
|
||||
}
|
||||
}
|
||||
OWSAssertDebug(_messageFetcherJob);
|
||||
|
||||
return _messageFetcherJob;
|
||||
}
|
||||
|
||||
- (NotificationsManager *)notificationsManager
|
||||
{
|
||||
@synchronized(self)
|
||||
{
|
||||
if (!_notificationsManager) {
|
||||
_notificationsManager = [NotificationsManager new];
|
||||
}
|
||||
}
|
||||
OWSAssertDebug(_notificationsManager);
|
||||
|
||||
return _notificationsManager;
|
||||
}
|
||||
|
||||
- (AccountManager *)accountManager
|
||||
{
|
||||
@synchronized(self)
|
||||
{
|
||||
if (!_accountManager) {
|
||||
_accountManager = [[AccountManager alloc] initWithTextSecureAccountManager:[TSAccountManager sharedInstance]
|
||||
preferences:Environment.shared.preferences];
|
||||
}
|
||||
}
|
||||
OWSAssertDebug(_accountManager);
|
||||
|
||||
return _accountManager;
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@ NSString *const Signal_Message_MarkAsRead_Identifier = @"Signal_Message_MarkAsRe
|
|||
{
|
||||
return [self initWithMessageFetcherJob:SignalApp.sharedApp.messageFetcherJob
|
||||
primaryStorage:[OWSPrimaryStorage sharedManager]
|
||||
messageSender:Environment.shared.messageSender
|
||||
messageSender:SSKEnvironment.shared.messageSender
|
||||
notificationsManager:SignalApp.sharedApp.notificationsManager];
|
||||
}
|
||||
|
||||
|
|
|
@ -226,7 +226,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
[MultiDeviceProfileKeyUpdateJob runWithProfileKey:profileKey
|
||||
identityManager:OWSIdentityManager.sharedManager
|
||||
messageSender:Environment.shared.messageSender
|
||||
messageSender:SSKEnvironment.shared.messageSender
|
||||
profileManager:OWSProfileManager.sharedManager];
|
||||
}
|
||||
|
||||
|
|
|
@ -520,7 +520,7 @@ typedef void (^DebugLogUploadFailure)(DebugLogUploader *uploader, NSError *error
|
|||
return;
|
||||
}
|
||||
NSString *recipientId = [TSAccountManager localNumber];
|
||||
OWSMessageSender *messageSender = Environment.shared.messageSender;
|
||||
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
|
||||
|
||||
DispatchMainThreadSafe(^{
|
||||
__block TSThread *thread = nil;
|
||||
|
@ -549,7 +549,7 @@ typedef void (^DebugLogUploadFailure)(DebugLogUploader *uploader, NSError *error
|
|||
}];
|
||||
DispatchMainThreadSafe(^{
|
||||
if (thread) {
|
||||
OWSMessageSender *messageSender = Environment.shared.messageSender;
|
||||
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
|
||||
[ThreadUtil sendMessageWithText:url.absoluteString
|
||||
inThread:thread
|
||||
quotedReplyModel:nil
|
||||
|
|
|
@ -103,9 +103,6 @@ class AccountManagerTest: SignalBaseTest {
|
|||
}
|
||||
|
||||
func testSuccessfulRegistration() {
|
||||
Environment.clearSharedForTests()
|
||||
Environment.shared = Release.releaseEnvironment()
|
||||
|
||||
let tsAccountManager = TokenObtainingTSAccountManager(networkManager: TSNetworkManager.shared(), primaryStorage: OWSPrimaryStorage.shared())
|
||||
|
||||
let accountManager = AccountManager(textSecureAccountManager: tsAccountManager, preferences: self.preferences)
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MockEnvironment.h"
|
||||
#import <SignalServiceKit/MockSSKEnvironment.h>
|
||||
#import <XCTest/XCTest.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
|
|
@ -18,15 +18,24 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
[super setUp];
|
||||
|
||||
ClearCurrentAppContextForTests();
|
||||
[Environment clearSharedForTests];
|
||||
[SSKEnvironment clearSharedForTests];
|
||||
|
||||
SetCurrentAppContext([TestAppContext new]);
|
||||
|
||||
[MockEnvironment activate];
|
||||
[MockSSKEnvironment activate];
|
||||
}
|
||||
|
||||
- (void)tearDown
|
||||
{
|
||||
NSLog(@"%@ tearDown", self.logTag);
|
||||
|
||||
[SSKEnvironment.shared.primaryStorage closeStorageForTests];
|
||||
|
||||
ClearCurrentAppContextForTests();
|
||||
[Environment clearSharedForTests];
|
||||
[SSKEnvironment clearSharedForTests];
|
||||
|
||||
[super tearDown];
|
||||
}
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import <SignalMessaging/Release.h>
|
||||
|
||||
#define testPhoneNumber1 [PhoneNumber phoneNumberFromE164:@"+19027777777"]
|
||||
#define testPhoneNumber2 [PhoneNumber phoneNumberFromE164:@"+19028888888"]
|
||||
|
||||
|
|
17
Signal/test/mocks/MockEnvironment.h
Normal file
17
Signal/test/mocks/MockEnvironment.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Environment.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface MockEnvironment : Environment
|
||||
|
||||
+ (MockEnvironment *)activate;
|
||||
|
||||
- (instancetype)init;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
30
Signal/test/mocks/MockEnvironment.m
Normal file
30
Signal/test/mocks/MockEnvironment.m
Normal file
|
@ -0,0 +1,30 @@
|
|||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MockEnvironment.h"
|
||||
#import <SignalMessaging/OWSPreferences.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@implementation MockEnvironment
|
||||
|
||||
+ (MockEnvironment *)activate
|
||||
{
|
||||
MockEnvironment *instance = [MockEnvironment new];
|
||||
[self setShared:instance];
|
||||
return instance;
|
||||
}
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
// TODO: We should probably mock this out.
|
||||
OWSPreferences *preferences = [OWSPreferences new];
|
||||
self = [super initWithPreferences:preferences];
|
||||
OWSAssertDebug(self);
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -6,43 +6,9 @@ import XCTest
|
|||
@testable import Signal
|
||||
@testable import SignalMessaging
|
||||
|
||||
// TODO: We might be able to merge this with OWSFakeContactsManager.
|
||||
@objc
|
||||
class StubbableEnvironment: SSKEnvironment {
|
||||
let proxy: SSKEnvironment
|
||||
|
||||
init(proxy: SSKEnvironment) {
|
||||
self.proxy = proxy
|
||||
super.init(callMessageHandler: proxy.callMessageHandler, contactsManager: proxy.contactsManager, messageSender: proxy.messageSender, notificationsManager: proxy.notificationsManager, profileManager: proxy.profileManager)
|
||||
}
|
||||
|
||||
var stubbedCallMessageHandler: OWSCallMessageHandler?
|
||||
override var callMessageHandler: OWSCallMessageHandler {
|
||||
return stubbedCallMessageHandler ?? proxy.callMessageHandler
|
||||
}
|
||||
|
||||
var stubbedContactsManager: ContactsManagerProtocol?
|
||||
override var contactsManager: ContactsManagerProtocol {
|
||||
return stubbedContactsManager ?? proxy.contactsManager
|
||||
}
|
||||
|
||||
var stubbedMessageSender: MessageSender?
|
||||
override var messageSender: MessageSender {
|
||||
return stubbedMessageSender ?? proxy.messageSender
|
||||
}
|
||||
|
||||
var stubbedNotificationsManager: NotificationsProtocol?
|
||||
override var notificationsManager: NotificationsProtocol {
|
||||
return stubbedNotificationsManager ?? proxy.notificationsManager
|
||||
}
|
||||
|
||||
var stubbedProfileManager: ProfileManagerProtocol?
|
||||
override var profileManager: ProfileManagerProtocol {
|
||||
return stubbedProfileManager ?? proxy.profileManager
|
||||
}
|
||||
}
|
||||
|
||||
@objc
|
||||
class FakeContactsManager: NSObject, ContactsManagerProtocol {
|
||||
class ConversationSearcherContactsManager: NSObject, ContactsManagerProtocol {
|
||||
|
||||
func displayName(forPhoneIdentifier phoneNumber: String?) -> String {
|
||||
if phoneNumber == aliceRecipientId {
|
||||
|
@ -101,12 +67,8 @@ class ConversationSearcherTest: SignalBaseTest {
|
|||
|
||||
// MARK: - Test Life Cycle
|
||||
|
||||
var originalEnvironment: SSKEnvironment?
|
||||
|
||||
override func tearDown() {
|
||||
super.tearDown()
|
||||
|
||||
SSKEnvironment.shared = originalEnvironment!
|
||||
}
|
||||
|
||||
override func setUp() {
|
||||
|
@ -118,12 +80,8 @@ class ConversationSearcherTest: SignalBaseTest {
|
|||
TSGroupThread.removeAllObjectsInCollection()
|
||||
TSMessage.removeAllObjectsInCollection()
|
||||
|
||||
originalEnvironment = SSKEnvironment.shared
|
||||
assert(originalEnvironment != nil)
|
||||
|
||||
let testEnvironment: StubbableEnvironment = StubbableEnvironment(proxy: originalEnvironment!)
|
||||
testEnvironment.stubbedContactsManager = FakeContactsManager()
|
||||
SSKEnvironment.shared = testEnvironment
|
||||
// Replace this singleton.
|
||||
SSKEnvironment.shared.contactsManager = ConversationSearcherContactsManager()
|
||||
|
||||
self.dbConnection.readWrite { transaction in
|
||||
let bookModel = TSGroupModel(title: "Book Club", memberIds: [aliceRecipientId, bobRecipientId], image: nil, groupId: Randomness.generateRandomBytes(16))
|
||||
|
|
|
@ -45,7 +45,6 @@ FOUNDATION_EXPORT const unsigned char SignalMessagingVersionString[];
|
|||
#import <SignalMessaging/OWSUnreadIndicator.h>
|
||||
#import <SignalMessaging/OWSUserProfile.h>
|
||||
#import <SignalMessaging/OWSWindowManager.h>
|
||||
#import <SignalMessaging/Release.h>
|
||||
#import <SignalMessaging/ScreenLockViewController.h>
|
||||
#import <SignalMessaging/SelectRecipientViewController.h>
|
||||
#import <SignalMessaging/SharingThreadPickerViewController.h>
|
||||
|
|
|
@ -58,7 +58,7 @@ typedef void (^SendMessageBlock)(SendCompletionBlock completion);
|
|||
[super loadView];
|
||||
|
||||
_contactsManager = Environment.shared.contactsManager;
|
||||
_messageSender = Environment.shared.messageSender;
|
||||
_messageSender = SSKEnvironment.shared.messageSender;
|
||||
|
||||
_progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
|
||||
self.title = NSLocalizedString(@"SHARE_EXTENSION_VIEW_TITLE", @"Title for the 'share extension' view.");
|
||||
|
|
|
@ -10,6 +10,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
extern NSString *const OWSContactsManagerSignalAccountsDidChangeNotification;
|
||||
|
||||
@class ImageCache;
|
||||
@class OWSPrimaryStorage;
|
||||
@class SignalAccount;
|
||||
@class UIFont;
|
||||
|
||||
|
@ -20,6 +21,10 @@ extern NSString *const OWSContactsManagerSignalAccountsDidChangeNotification;
|
|||
|
||||
#pragma mark - Setup
|
||||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
|
||||
- (id)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage;
|
||||
|
||||
- (void)startObserving;
|
||||
|
||||
#pragma mark - Accessors
|
||||
|
|
|
@ -54,7 +54,7 @@ NSString *const OWSContactsManagerKeyNextFullIntersectionDate = @"OWSContactsMan
|
|||
|
||||
@implementation OWSContactsManager
|
||||
|
||||
- (id)init
|
||||
- (id)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage
|
||||
{
|
||||
self = [super init];
|
||||
if (!self) {
|
||||
|
@ -64,8 +64,8 @@ NSString *const OWSContactsManagerKeyNextFullIntersectionDate = @"OWSContactsMan
|
|||
// TODO: We need to configure the limits of this cache.
|
||||
_avatarCache = [ImageCache new];
|
||||
|
||||
_dbReadConnection = [OWSPrimaryStorage sharedManager].newDatabaseConnection;
|
||||
_dbWriteConnection = [OWSPrimaryStorage sharedManager].newDatabaseConnection;
|
||||
_dbReadConnection = primaryStorage.newDatabaseConnection;
|
||||
_dbWriteConnection = primaryStorage.newDatabaseConnection;
|
||||
|
||||
_allContacts = @[];
|
||||
_allContactsMap = @{};
|
||||
|
|
|
@ -49,7 +49,7 @@ NSString *const kOWSPrimaryStorageOWSContactsSyncingLastMessageKey
|
|||
{
|
||||
return [self initWithContactsManager:Environment.shared.contactsManager
|
||||
identityManager:OWSIdentityManager.sharedManager
|
||||
messageSender:Environment.shared.messageSender
|
||||
messageSender:SSKEnvironment.shared.messageSender
|
||||
profileManager:OWSProfileManager.sharedManager];
|
||||
}
|
||||
|
||||
|
|
|
@ -4,18 +4,11 @@
|
|||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@protocol OWSCallMessageHandler;
|
||||
@protocol NotificationsProtocol;
|
||||
|
||||
typedef id<OWSCallMessageHandler> _Nonnull (^CallMessageHandlerBlock)(void);
|
||||
typedef id<NotificationsProtocol> _Nonnull (^NotificationsManagerBlock)(void);
|
||||
|
||||
// This is _NOT_ a singleton and will be instantiated each time that the SAE is used.
|
||||
@interface AppSetup : NSObject
|
||||
|
||||
+ (void)setupEnvironmentWithCallMessageHandlerBlock:(CallMessageHandlerBlock)callMessageHandlerBlock
|
||||
notificationsProtocolBlock:(NotificationsManagerBlock)notificationsManagerBlock
|
||||
migrationCompletion:(dispatch_block_t)migrationCompletion;
|
||||
+ (void)setupEnvironmentWithAppSpecificSingletonBlock:(dispatch_block_t)appSpecificSingletonBlock
|
||||
migrationCompletion:(dispatch_block_t)migrationCompletion;
|
||||
|
||||
@end
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
#import "AppSetup.h"
|
||||
#import "Environment.h"
|
||||
#import "Release.h"
|
||||
#import "VersionMigrations.h"
|
||||
#import <AxolotlKit/SessionCipher.h>
|
||||
#import <SignalMessaging/OWSDatabaseMigration.h>
|
||||
|
@ -18,12 +17,10 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
@implementation AppSetup
|
||||
|
||||
+ (void)setupEnvironmentWithCallMessageHandlerBlock:(CallMessageHandlerBlock)callMessageHandlerBlock
|
||||
notificationsProtocolBlock:(NotificationsManagerBlock)notificationsManagerBlock
|
||||
migrationCompletion:(dispatch_block_t)migrationCompletion
|
||||
+ (void)setupEnvironmentWithAppSpecificSingletonBlock:(dispatch_block_t)appSpecificSingletonBlock
|
||||
migrationCompletion:(dispatch_block_t)migrationCompletion
|
||||
{
|
||||
OWSAssertDebug(callMessageHandlerBlock);
|
||||
OWSAssertDebug(notificationsManagerBlock);
|
||||
OWSAssertDebug(appSpecificSingletonBlock);
|
||||
OWSAssertDebug(migrationCompletion);
|
||||
|
||||
__block OWSBackgroundTask *_Nullable backgroundTask =
|
||||
|
@ -32,34 +29,56 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
// Order matters here.
|
||||
//
|
||||
// All of these "singletons" should have any dependencies used in their
|
||||
// initializers injected.
|
||||
[[OWSBackgroundTaskManager sharedManager] observeNotifications];
|
||||
|
||||
[Environment setShared:[Release releaseEnvironment]];
|
||||
OWSPrimaryStorage *primaryStorage = [[OWSPrimaryStorage alloc] initStorage];
|
||||
[OWSPrimaryStorage protectFiles];
|
||||
|
||||
id<OWSCallMessageHandler> callMessageHandler = callMessageHandlerBlock();
|
||||
id<NotificationsProtocol> notificationsManager = notificationsManagerBlock();
|
||||
OWSPreferences *preferences = [OWSPreferences new];
|
||||
|
||||
SSKEnvironment *shared = [[SSKEnvironment alloc] initWithCallMessageHandler:callMessageHandler
|
||||
contactsManager:Environment.shared.contactsManager
|
||||
messageSender:Environment.shared.messageSender
|
||||
notificationsManager:notificationsManager
|
||||
profileManager:OWSProfileManager.sharedManager];
|
||||
[SSKEnvironment setShared:shared];
|
||||
TSNetworkManager *networkManager = [[TSNetworkManager alloc] initDefault];
|
||||
OWSContactsManager *contactsManager = [[OWSContactsManager alloc] initWithPrimaryStorage:primaryStorage];
|
||||
ContactsUpdater *contactsUpdater = [ContactsUpdater new];
|
||||
OWSMessageSender *messageSender = [[OWSMessageSender alloc] initWithNetworkManager:networkManager
|
||||
primaryStorage:primaryStorage
|
||||
contactsManager:contactsManager];
|
||||
|
||||
OWSProfileManager *profileManager = [[OWSProfileManager alloc] initWithPrimaryStorage:primaryStorage
|
||||
messageSender:messageSender
|
||||
networkManager:networkManager];
|
||||
|
||||
[Environment setShared:[[Environment alloc] initWithPreferences:preferences]];
|
||||
|
||||
[SSKEnvironment setShared:[[SSKEnvironment alloc] initWithContactsManager:contactsManager
|
||||
messageSender:messageSender
|
||||
profileManager:profileManager
|
||||
primaryStorage:primaryStorage
|
||||
contactsUpdater:contactsUpdater
|
||||
networkManager:networkManager]];
|
||||
|
||||
appSpecificSingletonBlock();
|
||||
|
||||
OWSAssertDebug(SSKEnvironment.shared.isComplete);
|
||||
|
||||
// Register renamed classes.
|
||||
[NSKeyedUnarchiver setClass:[OWSUserProfile class] forClassName:[OWSUserProfile collection]];
|
||||
[NSKeyedUnarchiver setClass:[OWSDatabaseMigration class] forClassName:[OWSDatabaseMigration collection]];
|
||||
|
||||
[OWSStorage registerExtensionsWithMigrationBlock:^() {
|
||||
// Don't start database migrations until storage is ready.
|
||||
[VersionMigrations performUpdateCheckWithCompletion:^() {
|
||||
OWSAssertIsOnMainThread();
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
// Don't start database migrations until storage is ready.
|
||||
[VersionMigrations performUpdateCheckWithCompletion:^() {
|
||||
OWSAssertIsOnMainThread();
|
||||
|
||||
migrationCompletion();
|
||||
migrationCompletion();
|
||||
|
||||
OWSAssertDebug(backgroundTask);
|
||||
backgroundTask = nil;
|
||||
}];
|
||||
OWSAssertDebug(backgroundTask);
|
||||
backgroundTask = nil;
|
||||
}];
|
||||
});
|
||||
}];
|
||||
});
|
||||
}
|
||||
|
|
|
@ -2,7 +2,10 @@
|
|||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import <SignalServiceKit/TSStorageHeaders.h>
|
||||
#import <SignalServiceKit/SSKEnvironment.h>
|
||||
|
||||
@class OWSContactsManager;
|
||||
@class OWSPreferences;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -11,32 +14,21 @@
|
|||
* It also handles network configuration for testing/deployment server configurations.
|
||||
*
|
||||
**/
|
||||
|
||||
@class ContactsUpdater;
|
||||
@class OWSContactsManager;
|
||||
@class OWSMessageSender;
|
||||
@class OWSNavigationController;
|
||||
@class OWSPreferences;
|
||||
@class TSGroupThread;
|
||||
@class TSNetworkManager;
|
||||
@class TSThread;
|
||||
|
||||
// TODO: Rename to AppEnvironment?
|
||||
@interface Environment : NSObject
|
||||
|
||||
- (instancetype)initWithContactsManager:(OWSContactsManager *)contactsManager
|
||||
contactsUpdater:(ContactsUpdater *)contactsUpdater
|
||||
networkManager:(TSNetworkManager *)networkManager
|
||||
messageSender:(OWSMessageSender *)messageSender;
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
|
||||
- (instancetype)initWithPreferences:(OWSPreferences *)preferences;
|
||||
|
||||
@property (nonatomic, readonly) OWSContactsManager *contactsManager;
|
||||
@property (nonatomic, readonly) ContactsUpdater *contactsUpdater;
|
||||
@property (nonatomic, readonly) TSNetworkManager *networkManager;
|
||||
@property (nonatomic, readonly) OWSMessageSender *messageSender;
|
||||
@property (nonatomic, readonly) OWSPreferences *preferences;
|
||||
|
||||
@property (class, nonatomic) Environment *shared;
|
||||
|
||||
#ifdef DEBUG
|
||||
// Should only be called by tests.
|
||||
+ (void)clearSharedForTests;
|
||||
#endif
|
||||
|
||||
@end
|
||||
|
|
|
@ -3,31 +3,12 @@
|
|||
//
|
||||
|
||||
#import "Environment.h"
|
||||
#import "DebugLogger.h"
|
||||
#import "OWSPreferences.h"
|
||||
#import "SignalKeyingStorage.h"
|
||||
#import <SignalServiceKit/AppContext.h>
|
||||
#import <SignalServiceKit/ContactsUpdater.h>
|
||||
#import <SignalServiceKit/OWSMessageReceiver.h>
|
||||
#import <SignalServiceKit/OWSSignalService.h>
|
||||
#import <SignalServiceKit/TSContactThread.h>
|
||||
#import <SignalServiceKit/TSGroupThread.h>
|
||||
#import <SignalServiceKit/Threading.h>
|
||||
#import <SignalServiceKit/SSKEnvironment.h>
|
||||
|
||||
static Environment *sharedEnvironment = nil;
|
||||
|
||||
@interface Environment ()
|
||||
|
||||
@property (nonatomic) OWSContactsManager *contactsManager;
|
||||
@property (nonatomic) ContactsUpdater *contactsUpdater;
|
||||
@property (nonatomic) TSNetworkManager *networkManager;
|
||||
@property (nonatomic) OWSMessageSender *messageSender;
|
||||
@property (nonatomic) OWSPreferences *preferences;
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
|
||||
@implementation Environment
|
||||
|
||||
+ (Environment *)shared
|
||||
|
@ -54,20 +35,16 @@ static Environment *sharedEnvironment = nil;
|
|||
sharedEnvironment = nil;
|
||||
}
|
||||
|
||||
- (instancetype)initWithContactsManager:(OWSContactsManager *)contactsManager
|
||||
contactsUpdater:(ContactsUpdater *)contactsUpdater
|
||||
networkManager:(TSNetworkManager *)networkManager
|
||||
messageSender:(OWSMessageSender *)messageSender
|
||||
- (instancetype)initWithPreferences:(OWSPreferences *)preferences
|
||||
{
|
||||
self = [super init];
|
||||
if (!self) {
|
||||
return self;
|
||||
}
|
||||
|
||||
_contactsManager = contactsManager;
|
||||
_contactsUpdater = contactsUpdater;
|
||||
_networkManager = networkManager;
|
||||
_messageSender = messageSender;
|
||||
OWSAssertDebug(preferences);
|
||||
|
||||
_preferences = preferences;
|
||||
|
||||
OWSSingletonAssert();
|
||||
|
||||
|
@ -76,43 +53,7 @@ static Environment *sharedEnvironment = nil;
|
|||
|
||||
- (OWSContactsManager *)contactsManager
|
||||
{
|
||||
OWSAssertDebug(_contactsManager);
|
||||
|
||||
return _contactsManager;
|
||||
}
|
||||
|
||||
- (ContactsUpdater *)contactsUpdater
|
||||
{
|
||||
OWSAssertDebug(_contactsUpdater);
|
||||
|
||||
return _contactsUpdater;
|
||||
}
|
||||
|
||||
- (TSNetworkManager *)networkManager
|
||||
{
|
||||
OWSAssertDebug(_networkManager);
|
||||
|
||||
return _networkManager;
|
||||
}
|
||||
|
||||
- (OWSMessageSender *)messageSender
|
||||
{
|
||||
OWSAssertDebug(_messageSender);
|
||||
|
||||
return _messageSender;
|
||||
}
|
||||
|
||||
// TODO: Convert to singleton?
|
||||
- (OWSPreferences *)preferences
|
||||
{
|
||||
@synchronized(self)
|
||||
{
|
||||
if (!_preferences) {
|
||||
_preferences = [OWSPreferences new];
|
||||
}
|
||||
}
|
||||
|
||||
return _preferences;
|
||||
return (OWSContactsManager *)SSKEnvironment.shared.contactsManager;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
@class Environment;
|
||||
|
||||
@interface Release : NSObject
|
||||
|
||||
/// Connects to actual production infrastructure
|
||||
+ (Environment *)releaseEnvironment;
|
||||
|
||||
@end
|
|
@ -1,37 +0,0 @@
|
|||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Release.h"
|
||||
#import "Environment.h"
|
||||
#import "NotificationsManager.h"
|
||||
#import "OWSContactsManager.h"
|
||||
#import <SignalServiceKit/ContactsUpdater.h>
|
||||
#import <SignalServiceKit/OWSMessageSender.h>
|
||||
#import <SignalServiceKit/TSNetworkManager.h>
|
||||
|
||||
@implementation Release
|
||||
|
||||
+ (Environment *)releaseEnvironment
|
||||
{
|
||||
static Environment *instance = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
// Order matters here.
|
||||
OWSPrimaryStorage *primaryStorage = [OWSPrimaryStorage sharedManager];
|
||||
TSNetworkManager *networkManager = [TSNetworkManager sharedManager];
|
||||
OWSContactsManager *contactsManager = [OWSContactsManager new];
|
||||
ContactsUpdater *contactsUpdater = [ContactsUpdater sharedUpdater];
|
||||
OWSMessageSender *messageSender = [[OWSMessageSender alloc] initWithNetworkManager:networkManager
|
||||
primaryStorage:primaryStorage
|
||||
contactsManager:contactsManager];
|
||||
|
||||
instance = [[Environment alloc] initWithContactsManager:contactsManager
|
||||
contactsUpdater:contactsUpdater
|
||||
networkManager:networkManager
|
||||
messageSender:messageSender];
|
||||
});
|
||||
return instance;
|
||||
}
|
||||
|
||||
@end
|
|
@ -10,6 +10,7 @@
|
|||
#import <SignalServiceKit/AppContext.h>
|
||||
#import <SignalServiceKit/AppVersion.h>
|
||||
#import <SignalServiceKit/NSUserDefaults+OWS.h>
|
||||
#import <SignalServiceKit/OWSPrimaryStorage.h>
|
||||
#import <SignalServiceKit/OWSRequestFactory.h>
|
||||
#import <SignalServiceKit/TSAccountManager.h>
|
||||
#import <SignalServiceKit/TSNetworkManager.h>
|
||||
|
|
|
@ -88,9 +88,7 @@ public class OWS106EnsureProfileComplete: OWSDatabaseMigration {
|
|||
|
||||
let (promise, fulfill, reject) = Promise<Void>.pending()
|
||||
|
||||
guard let networkManager = Environment.shared.networkManager else {
|
||||
return Promise(error: OWSErrorMakeAssertionError("network manager was unexpectedly not set"))
|
||||
}
|
||||
let networkManager = SSKEnvironment.shared.networkManager
|
||||
|
||||
ProfileFetcherJob(networkManager: networkManager).getProfile(recipientId: localRecipientId).then { _ -> Void in
|
||||
Logger.info("verified recipient profile is in good shape: \(localRecipientId)")
|
||||
|
|
|
@ -13,6 +13,8 @@ extern const NSUInteger kOWSProfileManager_MaxAvatarDiameter;
|
|||
|
||||
@class OWSAES256Key;
|
||||
@class OWSMessageSender;
|
||||
@class OWSPrimaryStorage;
|
||||
@class TSNetworkManager;
|
||||
@class TSThread;
|
||||
|
||||
// This class can be safely accessed and used from any thread.
|
||||
|
@ -20,6 +22,10 @@ extern const NSUInteger kOWSProfileManager_MaxAvatarDiameter;
|
|||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
|
||||
- (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage
|
||||
messageSender:(OWSMessageSender *)messageSender
|
||||
networkManager:(TSNetworkManager *)networkManager;
|
||||
|
||||
+ (instancetype)sharedManager;
|
||||
|
||||
#pragma mark - Local Profile
|
||||
|
|
|
@ -68,21 +68,7 @@ const NSUInteger kOWSProfileManager_MaxAvatarDiameter = 640;
|
|||
|
||||
+ (instancetype)sharedManager
|
||||
{
|
||||
static OWSProfileManager *sharedMyManager = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
sharedMyManager = [[self alloc] initDefault];
|
||||
});
|
||||
return sharedMyManager;
|
||||
}
|
||||
|
||||
- (instancetype)initDefault
|
||||
{
|
||||
OWSPrimaryStorage *primaryStorage = [OWSPrimaryStorage sharedManager];
|
||||
OWSMessageSender *messageSender = Environment.shared.messageSender;
|
||||
TSNetworkManager *networkManager = Environment.shared.networkManager;
|
||||
|
||||
return [self initWithPrimaryStorage:primaryStorage messageSender:messageSender networkManager:networkManager];
|
||||
return SSKEnvironment.shared.profileManager;
|
||||
}
|
||||
|
||||
- (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#import "OWSPrimaryStorage.h"
|
||||
#import "OWSRequestFactory.h"
|
||||
#import "PhoneNumber.h"
|
||||
#import "SSKEnvironment.h"
|
||||
#import "TSNetworkManager.h"
|
||||
#import "Threading.h"
|
||||
#import <SignalServiceKit/SignalServiceKit-Swift.h>
|
||||
|
@ -21,17 +22,15 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
|
||||
@implementation ContactsUpdater
|
||||
|
||||
+ (instancetype)sharedUpdater {
|
||||
static dispatch_once_t onceToken;
|
||||
static id sharedInstance = nil;
|
||||
dispatch_once(&onceToken, ^{
|
||||
sharedInstance = [self new];
|
||||
});
|
||||
return sharedInstance;
|
||||
}
|
||||
OWSAssertDebug(SSKEnvironment.shared.contactsUpdater);
|
||||
|
||||
return SSKEnvironment.shared.contactsUpdater;
|
||||
}
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
|
|
|
@ -20,8 +20,6 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
|
||||
+ (instancetype)selfRecipient;
|
||||
|
||||
+ (nullable instancetype)registeredRecipientForRecipientId:(NSString *)recipientId
|
||||
transaction:(YapDatabaseReadTransaction *)transaction;
|
||||
+ (instancetype)getOrBuildUnsavedRecipientForRecipientId:(NSString *)recipientId
|
||||
|
|
|
@ -86,27 +86,6 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
return [self fetchObjectWithUniqueID:recipientId transaction:transaction];
|
||||
}
|
||||
|
||||
+ (nullable instancetype)recipientForRecipientId:(NSString *)recipientId
|
||||
{
|
||||
OWSAssertDebug(recipientId.length > 0);
|
||||
|
||||
__block SignalRecipient *recipient;
|
||||
[self.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
|
||||
recipient = [self registeredRecipientForRecipientId:recipientId transaction:transaction];
|
||||
}];
|
||||
return recipient;
|
||||
}
|
||||
|
||||
// TODO This method should probably live on the TSAccountManager rather than grabbing a global singleton.
|
||||
+ (instancetype)selfRecipient
|
||||
{
|
||||
SignalRecipient *myself = [self recipientForRecipientId:[TSAccountManager localNumber]];
|
||||
if (!myself) {
|
||||
myself = [[self alloc] initWithTextSecureIdentifier:[TSAccountManager localNumber]];
|
||||
}
|
||||
return myself;
|
||||
}
|
||||
|
||||
- (void)addDevices:(NSSet *)devices
|
||||
{
|
||||
OWSAssertDebug(devices.count > 0);
|
||||
|
|
|
@ -80,7 +80,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
// TODO deprecate this? seems weird to access the displayName in the DB model
|
||||
- (NSString *)name
|
||||
{
|
||||
return [[SSKEnvironment shared].contactsManager displayNameForPhoneIdentifier:self.contactIdentifier];
|
||||
return [SSKEnvironment.shared.contactsManager displayNameForPhoneIdentifier:self.contactIdentifier];
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
networkManager:TSNetworkManager.sharedManager
|
||||
primaryStorage:OWSPrimaryStorage.sharedManager
|
||||
readReceiptManager:OWSReadReceiptManager.sharedManager
|
||||
contactsManager:[SSKEnvironment shared].contactsManager];
|
||||
contactsManager:SSKEnvironment.shared.contactsManager];
|
||||
}
|
||||
|
||||
- (instancetype)initWithIncomingSentMessageTranscript:(OWSIncomingSentMessageTranscript *)incomingSentMessageTranscript
|
||||
|
|
|
@ -125,7 +125,7 @@ NSUInteger TSErrorMessageSchemaVersion = 1;
|
|||
@"Shown when signal users safety numbers changed, embeds the user's {{name or phone number}}");
|
||||
|
||||
NSString *recipientDisplayName =
|
||||
[[SSKEnvironment shared].contactsManager displayNameForPhoneIdentifier:self.recipientId];
|
||||
[SSKEnvironment.shared.contactsManager displayNameForPhoneIdentifier:self.recipientId];
|
||||
return [NSString stringWithFormat:messageFormat, recipientDisplayName];
|
||||
} else {
|
||||
// recipientId will be nil for legacy errors
|
||||
|
|
|
@ -120,7 +120,7 @@ NSUInteger TSInfoMessageSchemaVersion = 1;
|
|||
return NSLocalizedString(@"UNSUPPORTED_ATTACHMENT", nil);
|
||||
case TSInfoMessageUserNotRegistered:
|
||||
if (self.unregisteredRecipientId.length > 0) {
|
||||
id<ContactsManagerProtocol> contactsManager = [SSKEnvironment shared].contactsManager;
|
||||
id<ContactsManagerProtocol> contactsManager = SSKEnvironment.shared.contactsManager;
|
||||
NSString *recipientName = [contactsManager displayNameForPhoneIdentifier:self.unregisteredRecipientId];
|
||||
return [NSString stringWithFormat:NSLocalizedString(@"ERROR_UNREGISTERED_USER_FORMAT",
|
||||
@"Format string for 'unregistered user' error. Embeds {{the "
|
||||
|
|
|
@ -390,8 +390,8 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
|
|||
YapDatabaseReadWriteTransaction *transaction) {
|
||||
// TODO: Add analytics.
|
||||
TSErrorMessage *errorMessage = [TSErrorMessage corruptedMessageInUnknownThread];
|
||||
[[SSKEnvironment shared].notificationsManager notifyUserForThreadlessErrorMessage:errorMessage
|
||||
transaction:transaction];
|
||||
[SSKEnvironment.shared.notificationsManager notifyUserForThreadlessErrorMessage:errorMessage
|
||||
transaction:transaction];
|
||||
};
|
||||
|
||||
@try {
|
||||
|
|
|
@ -58,7 +58,7 @@ NSString *const kOWSBlockingManager_SyncedBlockedGroupIdsKey = @"kOWSBlockingMan
|
|||
- (instancetype)initDefault
|
||||
{
|
||||
OWSPrimaryStorage *primaryStorage = [OWSPrimaryStorage sharedManager];
|
||||
OWSMessageSender *messageSender = [SSKEnvironment shared].messageSender;
|
||||
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
|
||||
|
||||
return [self initWithPrimaryStorage:primaryStorage messageSender:messageSender];
|
||||
}
|
||||
|
|
|
@ -79,7 +79,7 @@ NSString *const kNSNotificationName_IdentityStateDidChange = @"kNSNotificationNa
|
|||
- (instancetype)initDefault
|
||||
{
|
||||
OWSPrimaryStorage *primaryStorage = [OWSPrimaryStorage sharedManager];
|
||||
OWSMessageSender *messageSender = [SSKEnvironment shared].messageSender;
|
||||
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
|
||||
|
||||
return [self initWithPrimaryStorage:primaryStorage messageSender:messageSender];
|
||||
}
|
||||
|
@ -540,9 +540,9 @@ NSString *const kNSNotificationName_IdentityStateDidChange = @"kNSNotificationNa
|
|||
[message saveWithTransaction:transaction];
|
||||
}
|
||||
|
||||
[[SSKEnvironment shared].notificationsManager notifyUserForErrorMessage:errorMessage
|
||||
thread:contactThread
|
||||
transaction:transaction];
|
||||
[SSKEnvironment.shared.notificationsManager notifyUserForErrorMessage:errorMessage
|
||||
thread:contactThread
|
||||
transaction:transaction];
|
||||
}
|
||||
|
||||
- (void)enqueueSyncMessageForVerificationStateForRecipientId:(NSString *)recipientId
|
||||
|
|
|
@ -184,8 +184,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
[[OWSPrimaryStorage.sharedManager newDatabaseConnection]
|
||||
readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
||||
TSErrorMessage *errorMessage = [TSErrorMessage corruptedMessageInUnknownThread];
|
||||
[[SSKEnvironment shared].notificationsManager notifyUserForThreadlessErrorMessage:errorMessage
|
||||
transaction:transaction];
|
||||
[SSKEnvironment.shared.notificationsManager notifyUserForThreadlessErrorMessage:errorMessage
|
||||
transaction:transaction];
|
||||
}];
|
||||
}
|
||||
|
||||
|
@ -328,9 +328,9 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
TSThread *contactThread = [TSContactThread getOrCreateThreadWithContactId:envelope.source transaction:transaction];
|
||||
[[SSKEnvironment shared].notificationsManager notifyUserForErrorMessage:errorMessage
|
||||
thread:contactThread
|
||||
transaction:transaction];
|
||||
[SSKEnvironment.shared.notificationsManager notifyUserForErrorMessage:errorMessage
|
||||
thread:contactThread
|
||||
transaction:transaction];
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -84,10 +84,10 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
{
|
||||
TSNetworkManager *networkManager = [TSNetworkManager sharedManager];
|
||||
OWSPrimaryStorage *primaryStorage = [OWSPrimaryStorage sharedManager];
|
||||
id<ContactsManagerProtocol> contactsManager = [SSKEnvironment shared].contactsManager;
|
||||
id<OWSCallMessageHandler> callMessageHandler = [SSKEnvironment shared].callMessageHandler;
|
||||
id<ContactsManagerProtocol> contactsManager = SSKEnvironment.shared.contactsManager;
|
||||
id<OWSCallMessageHandler> callMessageHandler = SSKEnvironment.shared.callMessageHandler;
|
||||
OWSIdentityManager *identityManager = [OWSIdentityManager sharedManager];
|
||||
OWSMessageSender *messageSender = [SSKEnvironment shared].messageSender;
|
||||
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
|
||||
|
||||
|
||||
return [self initWithNetworkManager:networkManager
|
||||
|
@ -524,7 +524,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
- (id<ProfileManagerProtocol>)profileManager
|
||||
{
|
||||
return [SSKEnvironment shared].profileManager;
|
||||
return SSKEnvironment.shared.profileManager;
|
||||
}
|
||||
|
||||
- (void)handleIncomingEnvelope:(SSKProtoEnvelope *)envelope
|
||||
|
@ -960,7 +960,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
return;
|
||||
}
|
||||
|
||||
id<ProfileManagerProtocol> profileManager = [SSKEnvironment shared].profileManager;
|
||||
id<ProfileManagerProtocol> profileManager = SSKEnvironment.shared.profileManager;
|
||||
[profileManager setProfileKeyData:profileKey forRecipientId:recipientId];
|
||||
}
|
||||
|
||||
|
@ -1368,10 +1368,10 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
// Update thread preview in inbox
|
||||
[thread touchWithTransaction:transaction];
|
||||
|
||||
[[SSKEnvironment shared].notificationsManager notifyUserForIncomingMessage:incomingMessage
|
||||
inThread:thread
|
||||
contactsManager:self.contactsManager
|
||||
transaction:transaction];
|
||||
[SSKEnvironment.shared.notificationsManager notifyUserForIncomingMessage:incomingMessage
|
||||
inThread:thread
|
||||
contactsManager:self.contactsManager
|
||||
transaction:transaction];
|
||||
}
|
||||
|
||||
#pragma mark - helpers
|
||||
|
|
|
@ -335,8 +335,8 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin
|
|||
[[OWSPrimaryStorage.sharedManager newDatabaseConnection]
|
||||
readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
||||
TSErrorMessage *errorMessage = [TSErrorMessage corruptedMessageInUnknownThread];
|
||||
[[SSKEnvironment shared].notificationsManager notifyUserForThreadlessErrorMessage:errorMessage
|
||||
transaction:transaction];
|
||||
[SSKEnvironment.shared.notificationsManager notifyUserForThreadlessErrorMessage:errorMessage
|
||||
transaction:transaction];
|
||||
}];
|
||||
|
||||
dispatch_async(self.serialQueue, ^{
|
||||
|
|
|
@ -10,7 +10,6 @@ extern const NSUInteger kOversizeTextMessageSizeThreshold;
|
|||
|
||||
@class OWSBlockingManager;
|
||||
@class OWSPrimaryStorage;
|
||||
@class OWSUploadingService;
|
||||
@class TSInvalidIdentityKeySendingErrorMessage;
|
||||
@class TSNetworkManager;
|
||||
@class TSOutgoingMessage;
|
||||
|
@ -34,13 +33,7 @@ typedef void (^RetryableFailureHandler)(NSError *_Nonnull error);
|
|||
#pragma mark -
|
||||
|
||||
NS_SWIFT_NAME(MessageSender)
|
||||
@interface OWSMessageSender : NSObject {
|
||||
|
||||
@protected
|
||||
|
||||
// For subclassing in tests
|
||||
OWSUploadingService *_uploadingService;
|
||||
}
|
||||
@interface OWSMessageSender : NSObject
|
||||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
|
||||
|
|
|
@ -1200,8 +1200,14 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
|
|||
OWSOutgoingSentMessageTranscript *sentMessageTranscript =
|
||||
[[OWSOutgoingSentMessageTranscript alloc] initWithOutgoingMessage:message];
|
||||
|
||||
NSString *recipientId = [TSAccountManager localNumber];
|
||||
__block SignalRecipient *recipient;
|
||||
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
||||
recipient = [SignalRecipient markRecipientAsRegisteredAndGet:recipientId transaction:transaction];
|
||||
}];
|
||||
|
||||
[self sendMessageToService:sentMessageTranscript
|
||||
recipient:[SignalRecipient selfRecipient]
|
||||
recipient:recipient
|
||||
thread:message.thread
|
||||
attempts:OWSMessageSenderRetryAttempts
|
||||
useWebsocketIfAvailable:YES
|
||||
|
|
|
@ -57,7 +57,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
if (recipientId.length > 0) {
|
||||
// Once we've shared our profile key with a user (perhaps due to being
|
||||
// a member of a whitelisted group), make sure they're whitelisted.
|
||||
id<ProfileManagerProtocol> profileManager = [SSKEnvironment shared].profileManager;
|
||||
id<ProfileManagerProtocol> profileManager = SSKEnvironment.shared.profileManager;
|
||||
[profileManager addUserToProfileWhitelist:recipientId];
|
||||
}
|
||||
|
||||
|
|
|
@ -156,7 +156,7 @@ NSString *const OWSReadReceiptManagerAreReadReceiptsEnabled = @"areReadReceiptsE
|
|||
|
||||
- (instancetype)initDefault
|
||||
{
|
||||
OWSMessageSender *messageSender = [SSKEnvironment shared].messageSender;
|
||||
OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender;
|
||||
OWSPrimaryStorage *primaryStorage = [OWSPrimaryStorage sharedManager];
|
||||
|
||||
return [self initWithMessageSender:messageSender primaryStorage:primaryStorage];
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#import "OWSError.h"
|
||||
#import "OWSOperation.h"
|
||||
#import "OWSRequestFactory.h"
|
||||
#import "SSKEnvironment.h"
|
||||
#import "TSAttachmentStream.h"
|
||||
#import "TSNetworkManager.h"
|
||||
#import <YapDatabase/YapDatabaseConnection.h>
|
||||
|
@ -32,6 +33,8 @@ static const CGFloat kAttachmentUploadProgressTheta = 0.001f;
|
|||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
|
||||
@implementation OWSUploadOperation
|
||||
|
||||
- (instancetype)initWithAttachmentId:(NSString *)attachmentId
|
||||
|
@ -43,6 +46,7 @@ static const CGFloat kAttachmentUploadProgressTheta = 0.001f;
|
|||
}
|
||||
|
||||
self.remainingRetries = 4;
|
||||
|
||||
_attachmentId = attachmentId;
|
||||
_dbConnection = dbConnection;
|
||||
|
||||
|
@ -51,7 +55,7 @@ static const CGFloat kAttachmentUploadProgressTheta = 0.001f;
|
|||
|
||||
- (TSNetworkManager *)networkManager
|
||||
{
|
||||
return [TSNetworkManager sharedManager];
|
||||
return SSKEnvironment.shared.networkManager;
|
||||
}
|
||||
|
||||
- (void)run
|
||||
|
|
|
@ -19,6 +19,8 @@ typedef void (^TSNetworkManagerFailure)(NSURLSessionDataTask *task, NSError *err
|
|||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
|
||||
- (instancetype)initDefault;
|
||||
|
||||
+ (instancetype)sharedManager;
|
||||
|
||||
- (void)makeRequest:(TSRequest *)request
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#import "NSError+messageSending.h"
|
||||
#import "NSURLSessionDataTask+StatusCode.h"
|
||||
#import "OWSSignalService.h"
|
||||
#import "SSKEnvironment.h"
|
||||
#import "TSAccountManager.h"
|
||||
#import "TSVerifyCodeRequest.h"
|
||||
#import <AFNetworking/AFNetworking.h>
|
||||
|
@ -31,14 +32,10 @@ typedef void (^failureBlock)(NSURLSessionDataTask *task, NSError *error);
|
|||
|
||||
+ (instancetype)sharedManager
|
||||
{
|
||||
static TSNetworkManager *sharedMyManager = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
sharedMyManager = [[self alloc] initDefault];
|
||||
});
|
||||
return sharedMyManager;
|
||||
}
|
||||
OWSAssertDebug(SSKEnvironment.shared.networkManager);
|
||||
|
||||
return SSKEnvironment.shared.networkManager;
|
||||
}
|
||||
|
||||
- (instancetype)initDefault
|
||||
{
|
||||
|
|
|
@ -749,8 +749,8 @@ NSString *const kNSNotification_SocketManagerStateDidChange = @"kNSNotification_
|
|||
[[OWSPrimaryStorage.sharedManager newDatabaseConnection] readWriteWithBlock:^(
|
||||
YapDatabaseReadWriteTransaction *transaction) {
|
||||
TSErrorMessage *errorMessage = [TSErrorMessage corruptedMessageInUnknownThread];
|
||||
[[SSKEnvironment shared].notificationsManager notifyUserForThreadlessErrorMessage:errorMessage
|
||||
transaction:transaction];
|
||||
[SSKEnvironment.shared.notificationsManager notifyUserForThreadlessErrorMessage:errorMessage
|
||||
transaction:transaction];
|
||||
}];
|
||||
}
|
||||
|
||||
|
@ -986,6 +986,13 @@ NSString *const kNSNotification_SocketManagerStateDidChange = @"kNSNotification_
|
|||
{
|
||||
OWSAssertIsOnMainThread();
|
||||
|
||||
#ifdef DEBUG
|
||||
if (CurrentAppContext().isRunningTests) {
|
||||
OWSLogWarn(@"Suppressing socket in tests.");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!AppReadiness.isAppReady) {
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
|
|
|
@ -17,7 +17,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
{
|
||||
OWSAssertDebug(thread);
|
||||
|
||||
id<ProfileManagerProtocol> profileManager = [SSKEnvironment shared].profileManager;
|
||||
id<ProfileManagerProtocol> profileManager = SSKEnvironment.shared.profileManager;
|
||||
|
||||
// For 1:1 threads, we want to include the profile key IFF the
|
||||
// contact is in the whitelist.
|
||||
|
@ -35,7 +35,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
+ (OWSAES256Key *)localProfileKey
|
||||
{
|
||||
id<ProfileManagerProtocol> profileManager = [SSKEnvironment shared].profileManager;
|
||||
id<ProfileManagerProtocol> profileManager = SSKEnvironment.shared.profileManager;
|
||||
return profileManager.localProfileKey;
|
||||
}
|
||||
|
||||
|
@ -52,7 +52,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
if (recipientId.length > 0) {
|
||||
// Once we've shared our profile key with a user (perhaps due to being
|
||||
// a member of a whitelisted group), make sure they're whitelisted.
|
||||
id<ProfileManagerProtocol> profileManager = [SSKEnvironment shared].profileManager;
|
||||
id<ProfileManagerProtocol> profileManager = SSKEnvironment.shared.profileManager;
|
||||
// FIXME PERF avoid this dispatch. It's going to happen for *each* recipient in a group message.
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[profileManager addUserToProfileWhitelist:recipientId];
|
||||
|
@ -81,7 +81,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
// Once we've shared our profile key with a user (perhaps due to being
|
||||
// a member of a whitelisted group), make sure they're whitelisted.
|
||||
id<ProfileManagerProtocol> profileManager = [SSKEnvironment shared].profileManager;
|
||||
id<ProfileManagerProtocol> profileManager = SSKEnvironment.shared.profileManager;
|
||||
// FIXME PERF avoid this dispatch. It's going to happen for *each* recipient in a group message.
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[profileManager addUserToProfileWhitelist:recipientId];
|
||||
|
|
|
@ -4,31 +4,52 @@
|
|||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@protocol ContactsManagerProtocol;
|
||||
|
||||
@class ContactsUpdater;
|
||||
@class OWSMessageSender;
|
||||
@class OWSPrimaryStorage;
|
||||
@class TSNetworkManager;
|
||||
@class YapDatabaseConnection;
|
||||
|
||||
@protocol ContactsManagerProtocol;
|
||||
@protocol NotificationsProtocol;
|
||||
@protocol OWSCallMessageHandler;
|
||||
@protocol ProfileManagerProtocol;
|
||||
|
||||
@interface SSKEnvironment : NSObject
|
||||
|
||||
- (instancetype)initWithCallMessageHandler:(id<OWSCallMessageHandler>)callMessageHandler
|
||||
contactsManager:(id<ContactsManagerProtocol>)contactsManager
|
||||
messageSender:(OWSMessageSender *)messageSender
|
||||
notificationsManager:(id<NotificationsProtocol>)notificationsManager
|
||||
profileManager:(id<ProfileManagerProtocol>)profileManager NS_DESIGNATED_INITIALIZER;
|
||||
- (instancetype)initWithContactsManager:(id<ContactsManagerProtocol>)contactsManager
|
||||
messageSender:(OWSMessageSender *)messageSender
|
||||
profileManager:(id<ProfileManagerProtocol>)profileManager
|
||||
primaryStorage:(OWSPrimaryStorage *)primaryStorage
|
||||
contactsUpdater:(ContactsUpdater *)contactsUpdater
|
||||
networkManager:(TSNetworkManager *)networkManager NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
|
||||
@property (class, nonatomic) SSKEnvironment *shared;
|
||||
@property (nonatomic, readonly, class) SSKEnvironment *shared;
|
||||
|
||||
+ (void)setShared:(SSKEnvironment *)env;
|
||||
|
||||
#ifdef DEBUG
|
||||
// Should only be called by tests.
|
||||
+ (void)clearSharedForTests;
|
||||
#endif
|
||||
|
||||
@property (nonatomic, readonly) id<OWSCallMessageHandler> callMessageHandler;
|
||||
@property (nonatomic, readonly) id<ContactsManagerProtocol> contactsManager;
|
||||
@property (nonatomic, readonly) OWSMessageSender *messageSender;
|
||||
@property (nonatomic, readonly) id<NotificationsProtocol> notificationsManager;
|
||||
@property (nonatomic, readonly) id<ProfileManagerProtocol> profileManager;
|
||||
@property (nonatomic, readonly) OWSPrimaryStorage *primaryStorage;
|
||||
@property (nonatomic, readonly) ContactsUpdater *contactsUpdater;
|
||||
@property (nonatomic, readonly) TSNetworkManager *networkManager;
|
||||
|
||||
// This property is configured after Environment is created.
|
||||
@property (atomic, nullable) id<OWSCallMessageHandler> callMessageHandler;
|
||||
// This property is configured after Environment is created.
|
||||
@property (atomic, nullable) id<NotificationsProtocol> notificationsManager;
|
||||
|
||||
@property (atomic, readonly) YapDatabaseConnection *objectReadWriteConnection;
|
||||
|
||||
- (BOOL)isComplete;
|
||||
|
||||
@end
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#import "SSKEnvironment.h"
|
||||
#import "AppContext.h"
|
||||
#import "OWSPrimaryStorage.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
|
@ -11,11 +12,12 @@ static SSKEnvironment *sharedSSKEnvironment;
|
|||
|
||||
@interface SSKEnvironment ()
|
||||
|
||||
@property (nonatomic) id<OWSCallMessageHandler> callMessageHandler;
|
||||
@property (nonatomic) id<ContactsManagerProtocol> contactsManager;
|
||||
@property (nonatomic) OWSMessageSender *messageSender;
|
||||
@property (nonatomic) id<NotificationsProtocol> notificationsManager;
|
||||
@property (nonatomic) id<ProfileManagerProtocol> profileManager;
|
||||
@property (nonatomic) OWSPrimaryStorage *primaryStorage;
|
||||
@property (nonatomic) ContactsUpdater *contactsUpdater;
|
||||
@property (nonatomic) TSNetworkManager *networkManager;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -23,28 +25,35 @@ static SSKEnvironment *sharedSSKEnvironment;
|
|||
|
||||
@implementation SSKEnvironment
|
||||
|
||||
- (instancetype)initWithCallMessageHandler:(id<OWSCallMessageHandler>)callMessageHandler
|
||||
contactsManager:(id<ContactsManagerProtocol>)contactsManager
|
||||
messageSender:(OWSMessageSender *)messageSender
|
||||
notificationsManager:(id<NotificationsProtocol>)notificationsManager
|
||||
profileManager:(id<ProfileManagerProtocol>)profileManager
|
||||
@synthesize callMessageHandler = _callMessageHandler;
|
||||
@synthesize notificationsManager = _notificationsManager;
|
||||
@synthesize objectReadWriteConnection = _objectReadWriteConnection;
|
||||
|
||||
- (instancetype)initWithContactsManager:(id<ContactsManagerProtocol>)contactsManager
|
||||
messageSender:(OWSMessageSender *)messageSender
|
||||
profileManager:(id<ProfileManagerProtocol>)profileManager
|
||||
primaryStorage:(OWSPrimaryStorage *)primaryStorage
|
||||
contactsUpdater:(ContactsUpdater *)contactsUpdater
|
||||
networkManager:(TSNetworkManager *)networkManager
|
||||
{
|
||||
self = [super init];
|
||||
if (!self) {
|
||||
return self;
|
||||
}
|
||||
|
||||
OWSAssertDebug(callMessageHandler);
|
||||
OWSAssertDebug(contactsManager);
|
||||
OWSAssertDebug(messageSender);
|
||||
OWSAssertDebug(notificationsManager);
|
||||
OWSAssertDebug(profileManager);
|
||||
OWSAssertDebug(primaryStorage);
|
||||
OWSAssertDebug(contactsUpdater);
|
||||
OWSAssertDebug(networkManager);
|
||||
|
||||
_callMessageHandler = callMessageHandler;
|
||||
_contactsManager = contactsManager;
|
||||
_messageSender = messageSender;
|
||||
_notificationsManager = notificationsManager;
|
||||
_profileManager = profileManager;
|
||||
_primaryStorage = primaryStorage;
|
||||
_contactsUpdater = contactsUpdater;
|
||||
_networkManager = networkManager;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
@ -64,6 +73,65 @@ static SSKEnvironment *sharedSSKEnvironment;
|
|||
sharedSSKEnvironment = env;
|
||||
}
|
||||
|
||||
+ (void)clearSharedForTests
|
||||
{
|
||||
sharedSSKEnvironment = nil;
|
||||
}
|
||||
|
||||
#pragma mark - Mutable Accessors
|
||||
|
||||
- (nullable id<OWSCallMessageHandler>)callMessageHandler
|
||||
{
|
||||
@synchronized(self) {
|
||||
OWSAssertDebug(_callMessageHandler);
|
||||
|
||||
return _callMessageHandler;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setCallMessageHandler:(nullable id<OWSCallMessageHandler>)callMessageHandler
|
||||
{
|
||||
@synchronized(self) {
|
||||
OWSAssertDebug(callMessageHandler);
|
||||
OWSAssertDebug(!_callMessageHandler);
|
||||
|
||||
_callMessageHandler = callMessageHandler;
|
||||
}
|
||||
}
|
||||
|
||||
- (nullable id<NotificationsProtocol>)notificationsManager
|
||||
{
|
||||
@synchronized(self) {
|
||||
OWSAssertDebug(_notificationsManager);
|
||||
|
||||
return _notificationsManager;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setNotificationsManager:(nullable id<NotificationsProtocol>)notificationsManager
|
||||
{
|
||||
@synchronized(self) {
|
||||
OWSAssertDebug(notificationsManager);
|
||||
OWSAssertDebug(!_notificationsManager);
|
||||
|
||||
_notificationsManager = notificationsManager;
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)isComplete
|
||||
{
|
||||
return (self.callMessageHandler != nil && self.notificationsManager != nil);
|
||||
}
|
||||
|
||||
- (YapDatabaseConnection *)objectReadWriteConnection
|
||||
{
|
||||
@synchronized(self) {
|
||||
if (!_objectReadWriteConnection) {
|
||||
_objectReadWriteConnection = self.primaryStorage.newDatabaseConnection;
|
||||
}
|
||||
return _objectReadWriteConnection;
|
||||
}
|
||||
}
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
|
|
@ -16,6 +16,8 @@ extern NSString *const OWSUIDatabaseConnectionNotificationsKey;
|
|||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
|
||||
- (instancetype)initStorage;
|
||||
|
||||
+ (instancetype)sharedManager NS_SWIFT_NAME(shared());
|
||||
|
||||
@property (nonatomic, readonly) YapDatabaseConnection *uiDatabaseConnection;
|
||||
|
@ -38,6 +40,8 @@ extern NSString *const OWSUIDatabaseConnectionNotificationsKey;
|
|||
+ (NSString *)sharedDataDatabaseFilePath_SHM;
|
||||
+ (NSString *)sharedDataDatabaseFilePath_WAL;
|
||||
|
||||
+ (void)protectFiles;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#import "OWSMediaGalleryFinder.h"
|
||||
#import "OWSMessageReceiver.h"
|
||||
#import "OWSStorage+Subclass.h"
|
||||
#import "SSKEnvironment.h"
|
||||
#import "TSDatabaseSecondaryIndexes.h"
|
||||
#import "TSDatabaseView.h"
|
||||
#import <SignalServiceKit/SignalServiceKit-Swift.h>
|
||||
|
@ -64,16 +65,9 @@ void VerifyRegistrationsForPrimaryStorage(OWSStorage *storage)
|
|||
|
||||
+ (instancetype)sharedManager
|
||||
{
|
||||
static OWSPrimaryStorage *sharedManager = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
sharedManager = [[self alloc] initStorage];
|
||||
OWSAssertDebug(SSKEnvironment.shared.primaryStorage);
|
||||
|
||||
#if TARGET_OS_IPHONE
|
||||
[OWSPrimaryStorage protectFiles];
|
||||
#endif
|
||||
});
|
||||
return sharedManager;
|
||||
return SSKEnvironment.shared.primaryStorage;
|
||||
}
|
||||
|
||||
- (instancetype)initStorage
|
||||
|
@ -106,6 +100,14 @@ void VerifyRegistrationsForPrimaryStorage(OWSStorage *storage)
|
|||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
// Surface memory leaks by logging the deallocation of this class.
|
||||
OWSLogVerbose(@"Dealloc: %@", self.class);
|
||||
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
}
|
||||
|
||||
- (void)yapDatabaseModifiedExternally:(NSNotification *)notification
|
||||
{
|
||||
// Notify observers we're about to update the database connection
|
||||
|
@ -211,17 +213,18 @@ void VerifyRegistrationsForPrimaryStorage(OWSStorage *storage)
|
|||
[OWSMediaGalleryFinder asyncRegisterDatabaseExtensionsWithPrimaryStorage:self];
|
||||
[TSDatabaseView asyncRegisterLazyRestoreAttachmentsDatabaseView:self];
|
||||
|
||||
[self.database flushExtensionRequestsWithCompletionQueue:nil
|
||||
completionBlock:^{
|
||||
OWSAssertIsOnMainThread();
|
||||
OWSAssertDebug(!self.areAsyncRegistrationsComplete);
|
||||
OWSLogVerbose(@"async registrations complete.");
|
||||
self.areAsyncRegistrationsComplete = YES;
|
||||
[self.database
|
||||
flushExtensionRequestsWithCompletionQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
|
||||
completionBlock:^{
|
||||
OWSAssertDebug(!self.areAsyncRegistrationsComplete);
|
||||
OWSLogVerbose(@"async registrations complete.");
|
||||
|
||||
completion();
|
||||
self.areAsyncRegistrationsComplete = YES;
|
||||
|
||||
[self verifyDatabaseViews];
|
||||
}];
|
||||
completion();
|
||||
|
||||
[self verifyDatabaseViews];
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)verifyDatabaseViews
|
||||
|
|
|
@ -15,6 +15,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
- (void)loadDatabase;
|
||||
|
||||
- (void)runSyncRegistrations;
|
||||
// completion will be invoked _off_ the main thread.
|
||||
- (void)runAsyncRegistrationsWithCompletion:(void (^_Nonnull)(void))completion;
|
||||
|
||||
- (BOOL)areAsyncRegistrationsComplete;
|
||||
|
|
|
@ -58,8 +58,13 @@ typedef void (^OWSStorageMigrationBlock)(void);
|
|||
// This object can be used to filter database notifications.
|
||||
@property (nonatomic, readonly, nullable) id dbNotificationObject;
|
||||
|
||||
// migrationBlock will be invoked _off_ the main thread.
|
||||
+ (void)registerExtensionsWithMigrationBlock:(OWSStorageMigrationBlock)migrationBlock;
|
||||
|
||||
#ifdef DEBUG
|
||||
- (void)closeStorageForTests;
|
||||
#endif
|
||||
|
||||
+ (void)resetAllStorage;
|
||||
|
||||
- (YapDatabaseConnection *)newDatabaseConnection;
|
||||
|
|
|
@ -662,6 +662,13 @@ NSString *const kNSUserDefaults_DatabaseExtensionVersionMap = @"kNSUserDefaults_
|
|||
[OWSFileSystem deleteFile:[OWSPrimaryStorage sharedDataDatabaseFilePath_WAL]];
|
||||
}
|
||||
|
||||
- (void)closeStorageForTests
|
||||
{
|
||||
[self resetStorage];
|
||||
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
}
|
||||
|
||||
- (void)resetStorage
|
||||
{
|
||||
self.database = nil;
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#import "TSYapDatabaseObject.h"
|
||||
#import "OWSPrimaryStorage.h"
|
||||
#import "SSKEnvironment.h"
|
||||
#import <YapDatabase/YapDatabaseTransaction.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
@ -123,13 +124,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
{
|
||||
OWSJanksUI();
|
||||
|
||||
// Use a dedicated connection for model reads & writes.
|
||||
static YapDatabaseConnection *dbReadWriteConnection = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
dbReadWriteConnection = [self primaryStorage].newDatabaseConnection;
|
||||
});
|
||||
return dbReadWriteConnection;
|
||||
return SSKEnvironment.shared.objectReadWriteConnection;
|
||||
}
|
||||
|
||||
+ (OWSPrimaryStorage *)primaryStorage
|
||||
|
|
36
SignalServiceKit/src/Tests/MockSSKEnvironment.h
Normal file
36
SignalServiceKit/src/Tests/MockSSKEnvironment.h
Normal file
|
@ -0,0 +1,36 @@
|
|||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "SSKEnvironment.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
// This should only be used in the tests.
|
||||
#ifdef DEBUG
|
||||
|
||||
@interface SSKEnvironment (MockSSKEnvironment)
|
||||
|
||||
// Redeclare these properties as mutable so that tests can replace singletons.
|
||||
@property (nonatomic) id<ContactsManagerProtocol> contactsManager;
|
||||
@property (nonatomic) OWSMessageSender *messageSender;
|
||||
@property (nonatomic) id<ProfileManagerProtocol> profileManager;
|
||||
@property (nonatomic) OWSPrimaryStorage *primaryStorage;
|
||||
@property (nonatomic) ContactsUpdater *contactsUpdater;
|
||||
@property (nonatomic) TSNetworkManager *networkManager;
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
|
||||
@interface MockSSKEnvironment : SSKEnvironment
|
||||
|
||||
+ (void)activate;
|
||||
|
||||
- (instancetype)init;
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
74
SignalServiceKit/src/Tests/MockSSKEnvironment.m
Normal file
74
SignalServiceKit/src/Tests/MockSSKEnvironment.m
Normal file
|
@ -0,0 +1,74 @@
|
|||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MockSSKEnvironment.h"
|
||||
#import "OWSFakeCallMessageHandler.h"
|
||||
#import "OWSFakeContactsManager.h"
|
||||
#import "OWSFakeContactsUpdater.h"
|
||||
#import "OWSFakeMessageSender.h"
|
||||
#import "OWSFakeNetworkManager.h"
|
||||
#import "OWSFakeNotificationsManager.h"
|
||||
#import "OWSFakeProfileManager.h"
|
||||
#import "OWSPrimaryStorage.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface OWSPrimaryStorage (Tests)
|
||||
|
||||
@property (atomic) BOOL areAsyncRegistrationsComplete;
|
||||
@property (atomic) BOOL areSyncRegistrationsComplete;
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
|
||||
@implementation MockSSKEnvironment
|
||||
|
||||
+ (void)activate
|
||||
{
|
||||
MockSSKEnvironment *instance = [self new];
|
||||
[self setShared:instance];
|
||||
[instance configure];
|
||||
}
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
OWSPrimaryStorage *primaryStorage = [MockSSKEnvironment createPrimaryStorageForTests];
|
||||
id<ContactsManagerProtocol> contactsManager = [OWSFakeContactsManager new];
|
||||
TSNetworkManager *networkManager = [OWSFakeNetworkManager new];
|
||||
OWSMessageSender *messageSender = [OWSFakeMessageSender new];
|
||||
|
||||
self = [super initWithContactsManager:contactsManager
|
||||
messageSender:messageSender
|
||||
profileManager:[OWSFakeProfileManager new]
|
||||
primaryStorage:primaryStorage
|
||||
contactsUpdater:[OWSFakeContactsUpdater new]
|
||||
networkManager:networkManager];
|
||||
if (!self) {
|
||||
return nil;
|
||||
}
|
||||
self.callMessageHandler = [OWSFakeCallMessageHandler new];
|
||||
self.notificationsManager = [OWSFakeNotificationsManager new];
|
||||
return self;
|
||||
}
|
||||
|
||||
+ (OWSPrimaryStorage *)createPrimaryStorageForTests
|
||||
{
|
||||
OWSPrimaryStorage *primaryStorage = [[OWSPrimaryStorage alloc] initStorage];
|
||||
[OWSPrimaryStorage protectFiles];
|
||||
return primaryStorage;
|
||||
}
|
||||
|
||||
- (void)configure
|
||||
{
|
||||
__block dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
|
||||
[OWSStorage registerExtensionsWithMigrationBlock:^() {
|
||||
dispatch_semaphore_signal(semaphore);
|
||||
}];
|
||||
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -15,14 +15,28 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
return @"Fake name";
|
||||
}
|
||||
|
||||
- (NSArray<Contact *> *)signalContacts
|
||||
- (NSArray<SignalAccount *> *)signalAccounts
|
||||
{
|
||||
return @[];
|
||||
}
|
||||
|
||||
- (NSArray<SignalAccount *> *)signalAccounts
|
||||
- (BOOL)isSystemContact:(NSString *)recipientId
|
||||
{
|
||||
return @[];
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL)isSystemContactWithSignalAccount:(NSString *)recipientId
|
||||
{
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (NSComparisonResult)compareSignalAccount:(SignalAccount *)left
|
||||
withSignalAccount:(SignalAccount *)right NS_SWIFT_NAME(compare(signalAccount:with:))
|
||||
{
|
||||
// If this method ends up being used by the tests, we should provide a better implementation.
|
||||
OWSAbstractMethod();
|
||||
|
||||
return NSOrderedAscending;
|
||||
}
|
||||
|
||||
+ (BOOL)name:(NSString *_Nonnull)nameString matchesQuery:(NSString *_Nonnull)queryString
|
||||
|
@ -35,6 +49,21 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
return nil;
|
||||
}
|
||||
|
||||
- (nullable CNContact *)cnContactWithId:(nullable NSString *)contactId
|
||||
{
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (nullable NSData *)avatarDataForCNContactId:(nullable NSString *)contactId
|
||||
{
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (nullable UIImage *)avatarImageForCNContactId:(nullable NSString *)contactId
|
||||
{
|
||||
return nil;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
|
|
13
SignalServiceKit/src/Tests/OWSFakeContactsUpdater.h
Normal file
13
SignalServiceKit/src/Tests/OWSFakeContactsUpdater.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "ContactsUpdater.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface OWSFakeContactsUpdater : ContactsUpdater
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
21
SignalServiceKit/src/Tests/OWSFakeContactsUpdater.m
Normal file
21
SignalServiceKit/src/Tests/OWSFakeContactsUpdater.m
Normal file
|
@ -0,0 +1,21 @@
|
|||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "OWSFakeContactsUpdater.h"
|
||||
#import "SignalRecipient.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@implementation OWSFakeContactsUpdater
|
||||
|
||||
//- (nullable SignalRecipient *)synchronousLookup:(NSString *)identifier error:(NSError **)error
|
||||
//{
|
||||
// NSLog(@"[OWSFakeContactsUpdater] Faking contact lookup.");
|
||||
// return [[SignalRecipient alloc] initWithTextSecureIdentifier:@"fake-recipient-id"
|
||||
// relay:nil];
|
||||
//}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -7,8 +7,6 @@
|
|||
|
||||
@import Contacts;
|
||||
|
||||
@import Contacts;
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface ContactSortingTest : SSKBaseTest
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MockSSKEnvironment.h"
|
||||
#import <XCTest/XCTest.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
|
|
@ -21,6 +21,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
ClearCurrentAppContextForTests();
|
||||
SetCurrentAppContext([TestAppContext new]);
|
||||
|
||||
[MockSSKEnvironment activate];
|
||||
}
|
||||
|
||||
- (void)tearDown
|
||||
|
|
|
@ -88,13 +88,11 @@ public class ShareViewController: UIViewController, ShareViewDelegate, SAEFailed
|
|||
}.retainUntilComplete()
|
||||
|
||||
// We shouldn't set up our environment until after we've consulted isReadyForAppExtensions.
|
||||
AppSetup.setupEnvironment(callMessageHandlerBlock: {
|
||||
return NoopCallMessageHandler()
|
||||
},
|
||||
notificationsProtocolBlock: {
|
||||
return NoopNotificationsManager()
|
||||
},
|
||||
migrationCompletion: { [weak self] in
|
||||
AppSetup.setupEnvironment(appSpecificSingletonBlock: {
|
||||
SSKEnvironment.shared.callMessageHandler = NoopCallMessageHandler()
|
||||
SSKEnvironment.shared.notificationsManager = NoopNotificationsManager()
|
||||
},
|
||||
migrationCompletion: { [weak self] in
|
||||
AssertIsOnMainThread()
|
||||
|
||||
guard let strongSelf = self else { return }
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
#import <SignalMessaging/OWSContactsSyncing.h>
|
||||
#import <SignalMessaging/OWSMath.h>
|
||||
#import <SignalMessaging/OWSPreferences.h>
|
||||
#import <SignalMessaging/Release.h>
|
||||
#import <SignalMessaging/UIColor+OWS.h>
|
||||
#import <SignalMessaging/UIFont+OWS.h>
|
||||
#import <SignalMessaging/UIView+OWS.h>
|
||||
|
|
Loading…
Reference in a new issue