// // Copyright (c) 2018 Open Whisper Systems. All rights reserved. // #import "SSKEnvironment.h" #import "AppContext.h" #import "OWSPrimaryStorage.h" #import NS_ASSUME_NONNULL_BEGIN static SSKEnvironment *sharedSSKEnvironment; @interface SSKEnvironment () @property (nonatomic) id contactsManager; @property (nonatomic) OWSMessageSender *messageSender; @property (nonatomic) id profileManager; @property (nonatomic) OWSPrimaryStorage *primaryStorage; @property (nonatomic) ContactsUpdater *contactsUpdater; @property (nonatomic) TSNetworkManager *networkManager; @property (nonatomic) OWSMessageManager *messageManager; @property (nonatomic) OWSBlockingManager *blockingManager; @property (nonatomic) OWSIdentityManager *identityManager; @property (nonatomic) id udManager; @property (nonatomic) OWSMessageDecrypter *messageDecrypter; @property (nonatomic) OWSBatchMessageProcessor *batchMessageProcessor; @property (nonatomic) OWSMessageReceiver *messageReceiver; @property (nonatomic) TSSocketManager *socketManager; @property (nonatomic) TSAccountManager *tsAccountManager; @property (nonatomic) OWS2FAManager *ows2FAManager; @property (nonatomic) OWSDisappearingMessagesJob *disappearingMessagesJob; @property (nonatomic) ContactDiscoveryService *contactDiscoveryService; @property (nonatomic) OWSReadReceiptManager *readReceiptManager; @property (nonatomic) OWSOutgoingReceiptManager *outgoingReceiptManager; @property (nonatomic) id syncManager; @property (nonatomic) id reachabilityManager; @property (nonatomic) id typingIndicators; @property (nonatomic) OWSAttachmentDownloads *attachmentDownloads; @end #pragma mark - @implementation SSKEnvironment @synthesize callMessageHandler = _callMessageHandler; @synthesize notificationsManager = _notificationsManager; @synthesize objectReadWriteConnection = _objectReadWriteConnection; @synthesize sessionStoreDBConnection = _sessionStoreDBConnection; @synthesize migrationDBConnection = _migrationDBConnection; @synthesize analyticsDBConnection = _analyticsDBConnection; - (instancetype)initWithContactsManager:(id)contactsManager messageSender:(OWSMessageSender *)messageSender messageSenderJobQueue:(SSKMessageSenderJobQueue *)messageSenderJobQueue profileManager:(id)profileManager primaryStorage:(OWSPrimaryStorage *)primaryStorage contactsUpdater:(ContactsUpdater *)contactsUpdater networkManager:(TSNetworkManager *)networkManager messageManager:(OWSMessageManager *)messageManager blockingManager:(OWSBlockingManager *)blockingManager identityManager:(OWSIdentityManager *)identityManager udManager:(id)udManager messageDecrypter:(OWSMessageDecrypter *)messageDecrypter batchMessageProcessor:(OWSBatchMessageProcessor *)batchMessageProcessor messageReceiver:(OWSMessageReceiver *)messageReceiver socketManager:(TSSocketManager *)socketManager tsAccountManager:(TSAccountManager *)tsAccountManager ows2FAManager:(OWS2FAManager *)ows2FAManager disappearingMessagesJob:(OWSDisappearingMessagesJob *)disappearingMessagesJob contactDiscoveryService:(ContactDiscoveryService *)contactDiscoveryService readReceiptManager:(OWSReadReceiptManager *)readReceiptManager outgoingReceiptManager:(OWSOutgoingReceiptManager *)outgoingReceiptManager reachabilityManager:(id)reachabilityManager syncManager:(id)syncManager typingIndicators:(id)typingIndicators attachmentDownloads:(OWSAttachmentDownloads *)attachmentDownloads { self = [super init]; if (!self) { return self; } OWSAssertDebug(contactsManager); OWSAssertDebug(messageSender); OWSAssertDebug(messageSenderJobQueue); OWSAssertDebug(profileManager); OWSAssertDebug(primaryStorage); OWSAssertDebug(contactsUpdater); OWSAssertDebug(networkManager); OWSAssertDebug(messageManager); OWSAssertDebug(blockingManager); OWSAssertDebug(identityManager); OWSAssertDebug(udManager); OWSAssertDebug(messageDecrypter); OWSAssertDebug(batchMessageProcessor); OWSAssertDebug(messageReceiver); OWSAssertDebug(socketManager); OWSAssertDebug(tsAccountManager); OWSAssertDebug(ows2FAManager); OWSAssertDebug(disappearingMessagesJob); OWSAssertDebug(contactDiscoveryService); OWSAssertDebug(readReceiptManager); OWSAssertDebug(outgoingReceiptManager); OWSAssertDebug(syncManager); OWSAssertDebug(reachabilityManager); OWSAssertDebug(typingIndicators); OWSAssertDebug(attachmentDownloads); _contactsManager = 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; _syncManager = syncManager; _reachabilityManager = reachabilityManager; _typingIndicators = typingIndicators; _attachmentDownloads = attachmentDownloads; return self; } + (instancetype)shared { OWSAssertDebug(sharedSSKEnvironment); return sharedSSKEnvironment; } + (void)setShared:(SSKEnvironment *)env { OWSAssertDebug(env); OWSAssertDebug(!sharedSSKEnvironment || CurrentAppContext().isRunningTests); sharedSSKEnvironment = env; } + (void)clearSharedForTests { sharedSSKEnvironment = nil; } #pragma mark - Mutable Accessors /* - (nullable id)callMessageHandler { @synchronized(self) { OWSAssertDebug(_callMessageHandler); return _callMessageHandler; } } - (void)setCallMessageHandler:(nullable id)callMessageHandler { @synchronized(self) { OWSAssertDebug(callMessageHandler); OWSAssertDebug(!_callMessageHandler); _callMessageHandler = callMessageHandler; } } */ - (nullable id)notificationsManager { @synchronized(self) { OWSAssertDebug(_notificationsManager); return _notificationsManager; } } - (void)setNotificationsManager:(nullable id)notificationsManager { @synchronized(self) { OWSAssertDebug(notificationsManager); OWSAssertDebug(!_notificationsManager); _notificationsManager = notificationsManager; } } - (BOOL)isComplete { return self.notificationsManager != nil; } - (YapDatabaseConnection *)objectReadWriteConnection { @synchronized(self) { if (!_objectReadWriteConnection) { _objectReadWriteConnection = self.primaryStorage.newDatabaseConnection; } return _objectReadWriteConnection; } } - (YapDatabaseConnection *)sessionStoreDBConnection { @synchronized(self) { if (!_sessionStoreDBConnection) { _sessionStoreDBConnection = self.primaryStorage.newDatabaseConnection; } return _sessionStoreDBConnection; } } - (YapDatabaseConnection *)migrationDBConnection { @synchronized(self) { if (!_migrationDBConnection) { _migrationDBConnection = self.primaryStorage.newDatabaseConnection; } return _migrationDBConnection; } } - (YapDatabaseConnection *)analyticsDBConnection { @synchronized(self) { if (!_analyticsDBConnection) { _analyticsDBConnection = self.primaryStorage.newDatabaseConnection; } return _analyticsDBConnection; } } @end NS_ASSUME_NONNULL_END