// // Copyright (c) 2018 Open Whisper Systems. All rights reserved. // #import "SSKEnvironment.h" #import "AppContext.h" #import "OWSPrimaryStorage.h" 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; @end #pragma mark - @implementation SSKEnvironment @synthesize callMessageHandler = _callMessageHandler; @synthesize notificationsManager = _notificationsManager; @synthesize objectReadWriteConnection = _objectReadWriteConnection; - (instancetype)initWithContactsManager:(id)contactsManager messageSender:(OWSMessageSender *)messageSender profileManager:(id)profileManager primaryStorage:(OWSPrimaryStorage *)primaryStorage contactsUpdater:(ContactsUpdater *)contactsUpdater networkManager:(TSNetworkManager *)networkManager messageManager:(OWSMessageManager *)messageManager blockingManager:(OWSBlockingManager *)blockingManager identityManager:(OWSIdentityManager *)identityManager { self = [super init]; if (!self) { return self; } OWSAssertDebug(contactsManager); OWSAssertDebug(messageSender); OWSAssertDebug(profileManager); OWSAssertDebug(primaryStorage); OWSAssertDebug(contactsUpdater); OWSAssertDebug(networkManager); OWSAssertDebug(messageManager); OWSAssertDebug(blockingManager); OWSAssertDebug(identityManager); _contactsManager = contactsManager; _messageSender = messageSender; _profileManager = profileManager; _primaryStorage = primaryStorage; _contactsUpdater = contactsUpdater; _networkManager = networkManager; _messageManager = messageManager; _blockingManager = blockingManager; _identityManager = identityManager; 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.callMessageHandler != nil && self.notificationsManager != nil); } - (YapDatabaseConnection *)objectReadWriteConnection { @synchronized(self) { if (!_objectReadWriteConnection) { _objectReadWriteConnection = self.primaryStorage.newDatabaseConnection; } return _objectReadWriteConnection; } } @end NS_ASSUME_NONNULL_END