mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			160 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			Objective-C
		
	
			
		
		
	
	
			160 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			Objective-C
		
	
| //
 | |
| //  Copyright (c) 2019 Open Whisper Systems. All rights reserved.
 | |
| //
 | |
| 
 | |
| #import "AppSetup.h"
 | |
| #import "Environment.h"
 | |
| #import "VersionMigrations.h"
 | |
| #import <AxolotlKit/SessionCipher.h>
 | |
| #import <SignalMessaging/OWSDatabaseMigration.h>
 | |
| #import <SignalMessaging/OWSProfileManager.h>
 | |
| #import <SignalMessaging/SignalMessaging-Swift.h>
 | |
| #import <SignalServiceKit/ContactDiscoveryService.h>
 | |
| #import <SignalServiceKit/OWS2FAManager.h>
 | |
| #import <SignalServiceKit/OWSAttachmentDownloads.h>
 | |
| #import <SignalServiceKit/OWSBackgroundTask.h>
 | |
| #import <SignalServiceKit/OWSBatchMessageProcessor.h>
 | |
| #import <SignalServiceKit/OWSBlockingManager.h>
 | |
| #import <SignalServiceKit/OWSDisappearingMessagesJob.h>
 | |
| #import <SignalServiceKit/OWSIdentityManager.h>
 | |
| #import <SignalServiceKit/OWSMessageDecrypter.h>
 | |
| #import <SignalServiceKit/OWSMessageManager.h>
 | |
| #import <SignalServiceKit/OWSMessageReceiver.h>
 | |
| #import <SignalServiceKit/OWSOutgoingReceiptManager.h>
 | |
| #import <SignalServiceKit/OWSReadReceiptManager.h>
 | |
| #import <SignalServiceKit/OWSStorage.h>
 | |
| #import <SignalServiceKit/SSKEnvironment.h>
 | |
| #import <SignalServiceKit/SignalServiceKit-Swift.h>
 | |
| #import <SignalServiceKit/TSSocketManager.h>
 | |
| 
 | |
| NS_ASSUME_NONNULL_BEGIN
 | |
| 
 | |
| @implementation AppSetup
 | |
| 
 | |
| + (void)setupEnvironmentWithAppSpecificSingletonBlock:(dispatch_block_t)appSpecificSingletonBlock
 | |
|                                   migrationCompletion:(dispatch_block_t)migrationCompletion
 | |
| {
 | |
|     OWSAssertDebug(appSpecificSingletonBlock);
 | |
|     OWSAssertDebug(migrationCompletion);
 | |
| 
 | |
|     __block OWSBackgroundTask *_Nullable backgroundTask =
 | |
|         [OWSBackgroundTask backgroundTaskWithLabelStr:__PRETTY_FUNCTION__];
 | |
| 
 | |
|     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];
 | |
| 
 | |
|         OWSPrimaryStorage *primaryStorage = [[OWSPrimaryStorage alloc] initStorage];
 | |
|         [OWSPrimaryStorage protectFiles];
 | |
| 
 | |
|         // AFNetworking (via CFNetworking) spools it's attachments to NSTemporaryDirectory().
 | |
|         // If you receive a media message while the device is locked, the download will fail if the temporary directory
 | |
|         // is NSFileProtectionComplete
 | |
|         BOOL success = [OWSFileSystem protectFileOrFolderAtPath:NSTemporaryDirectory()
 | |
|                                              fileProtectionType:NSFileProtectionCompleteUntilFirstUserAuthentication];
 | |
|         OWSAssert(success);
 | |
| 
 | |
|         OWSPreferences *preferences = [OWSPreferences new];
 | |
| 
 | |
|         TSNetworkManager *networkManager = [[TSNetworkManager alloc] initDefault];
 | |
|         OWSContactsManager *contactsManager = [[OWSContactsManager alloc] initWithPrimaryStorage:primaryStorage];
 | |
|         ContactsUpdater *contactsUpdater = [ContactsUpdater new];
 | |
|         OWSMessageSender *messageSender = [[OWSMessageSender alloc] initWithPrimaryStorage:primaryStorage];
 | |
|         SSKMessageSenderJobQueue *messageSenderJobQueue = [SSKMessageSenderJobQueue new];
 | |
|         OWSProfileManager *profileManager = [[OWSProfileManager alloc] initWithPrimaryStorage:primaryStorage];
 | |
|         OWSMessageManager *messageManager = [[OWSMessageManager alloc] initWithPrimaryStorage:primaryStorage];
 | |
|         OWSBlockingManager *blockingManager = [[OWSBlockingManager alloc] initWithPrimaryStorage:primaryStorage];
 | |
|         OWSIdentityManager *identityManager = [[OWSIdentityManager alloc] initWithPrimaryStorage:primaryStorage];
 | |
|         id<OWSUDManager> udManager = [[OWSUDManagerImpl alloc] initWithPrimaryStorage:primaryStorage];
 | |
|         OWSMessageDecrypter *messageDecrypter = [[OWSMessageDecrypter alloc] initWithPrimaryStorage:primaryStorage];
 | |
|         OWSBatchMessageProcessor *batchMessageProcessor =
 | |
|             [[OWSBatchMessageProcessor alloc] initWithPrimaryStorage:primaryStorage];
 | |
|         OWSMessageReceiver *messageReceiver = [[OWSMessageReceiver alloc] initWithPrimaryStorage:primaryStorage];
 | |
|         TSSocketManager *socketManager = [[TSSocketManager alloc] init];
 | |
|         TSAccountManager *tsAccountManager = [[TSAccountManager alloc] initWithPrimaryStorage:primaryStorage];
 | |
|         OWS2FAManager *ows2FAManager = [[OWS2FAManager alloc] initWithPrimaryStorage:primaryStorage];
 | |
|         OWSDisappearingMessagesJob *disappearingMessagesJob =
 | |
|             [[OWSDisappearingMessagesJob alloc] initWithPrimaryStorage:primaryStorage];
 | |
|         ContactDiscoveryService *contactDiscoveryService = [[ContactDiscoveryService alloc] initDefault];
 | |
|         OWSReadReceiptManager *readReceiptManager =
 | |
|             [[OWSReadReceiptManager alloc] initWithPrimaryStorage:primaryStorage];
 | |
|         OWSOutgoingReceiptManager *outgoingReceiptManager =
 | |
|             [[OWSOutgoingReceiptManager alloc] initWithPrimaryStorage:primaryStorage];
 | |
|         OWSSyncManager *syncManager = [[OWSSyncManager alloc] initDefault];
 | |
|         id<SSKReachabilityManager> reachabilityManager = [SSKReachabilityManagerImpl new];
 | |
|         id<OWSTypingIndicators> typingIndicators = [[OWSTypingIndicatorsImpl alloc] init];
 | |
|         OWSAttachmentDownloads *attachmentDownloads = [[OWSAttachmentDownloads alloc] init];
 | |
| 
 | |
|         OWSAudioSession *audioSession = [OWSAudioSession new];
 | |
|         OWSSounds *sounds = [[OWSSounds alloc] initWithPrimaryStorage:primaryStorage];
 | |
|         id<OWSProximityMonitoringManager> proximityMonitoringManager = [OWSProximityMonitoringManagerImpl new];
 | |
|         OWSWindowManager *windowManager = [[OWSWindowManager alloc] initDefault];
 | |
|         
 | |
|         [Environment setShared:[[Environment alloc] initWithAudioSession:audioSession
 | |
|                                                              preferences:preferences
 | |
|                                               proximityMonitoringManager:proximityMonitoringManager
 | |
|                                                                   sounds:sounds
 | |
|                                                            windowManager:windowManager]];
 | |
| 
 | |
|         [SSKEnvironment setShared:[[SSKEnvironment alloc] initWithContactsManager:contactsManager
 | |
|                                                                     messageSender:messageSender
 | |
|                                                             messageSenderJobQueue:messageSenderJobQueue
 | |
|                                                                    profileManager:profileManager
 | |
|                                                                    primaryStorage:primaryStorage
 | |
|                                                                   contactsUpdater:contactsUpdater
 | |
|                                                                    networkManager:networkManager
 | |
|                                                                    messageManager:messageManager
 | |
|                                                                   blockingManager:blockingManager
 | |
|                                                                   identityManager:identityManager
 | |
|                                                                         udManager:udManager
 | |
|                                                                  messageDecrypter:messageDecrypter
 | |
|                                                             batchMessageProcessor:batchMessageProcessor
 | |
|                                                                   messageReceiver:messageReceiver
 | |
|                                                                     socketManager:socketManager
 | |
|                                                                  tsAccountManager:tsAccountManager
 | |
|                                                                     ows2FAManager:ows2FAManager
 | |
|                                                           disappearingMessagesJob:disappearingMessagesJob
 | |
|                                                           contactDiscoveryService:contactDiscoveryService
 | |
|                                                                readReceiptManager:readReceiptManager
 | |
|                                                            outgoingReceiptManager:outgoingReceiptManager
 | |
|                                                               reachabilityManager:reachabilityManager
 | |
|                                                                       syncManager:syncManager
 | |
|                                                                  typingIndicators:typingIndicators
 | |
|                                                               attachmentDownloads:attachmentDownloads]];
 | |
|         
 | |
|         // Loki
 | |
|         LKFriendRequestExpirationJob *lokiFriendRequestExpirationJob = [[LKFriendRequestExpirationJob alloc] initWithPrimaryStorage:primaryStorage];
 | |
|         SSKEnvironment.shared.lokiFriendRequestExpirationJob = lokiFriendRequestExpirationJob;
 | |
| 
 | |
|         appSpecificSingletonBlock();
 | |
| 
 | |
|         OWSAssertDebug(SSKEnvironment.shared.isComplete);
 | |
| 
 | |
|         // Register renamed classes.
 | |
|         [NSKeyedUnarchiver setClass:[OWSUserProfile class] forClassName:[OWSUserProfile collection]];
 | |
|         [NSKeyedUnarchiver setClass:[OWSDatabaseMigration class] forClassName:[OWSDatabaseMigration collection]];
 | |
| 
 | |
|         [OWSStorage registerExtensionsWithMigrationBlock:^() {
 | |
|             dispatch_async(dispatch_get_main_queue(), ^{
 | |
|                 // Don't start database migrations until storage is ready.
 | |
|                 [VersionMigrations performUpdateCheckWithCompletion:^() {
 | |
|                     OWSAssertIsOnMainThread();
 | |
| 
 | |
|                     migrationCompletion();
 | |
| 
 | |
|                     OWSAssertDebug(backgroundTask);
 | |
|                     backgroundTask = nil;
 | |
|                 }];
 | |
|             });
 | |
|         }];
 | |
|     });
 | |
| }
 | |
| 
 | |
| @end
 | |
| 
 | |
| NS_ASSUME_NONNULL_END
 |