2017-02-02 21:13:41 +01:00
|
|
|
//
|
2018-07-18 03:32:44 +02:00
|
|
|
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
2017-02-02 21:13:41 +01:00
|
|
|
//
|
2015-12-07 03:31:43 +01:00
|
|
|
|
2018-08-31 19:12:40 +02:00
|
|
|
#import "SSKEnvironment.h"
|
2017-12-06 21:53:19 +01:00
|
|
|
#import "AppContext.h"
|
2018-09-17 15:27:58 +02:00
|
|
|
#import "OWSPrimaryStorage.h"
|
2015-12-07 03:31:43 +01:00
|
|
|
|
2016-12-18 22:08:26 +01:00
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
2018-08-31 19:12:40 +02:00
|
|
|
static SSKEnvironment *sharedSSKEnvironment;
|
2016-12-18 22:08:26 +01:00
|
|
|
|
2018-09-19 22:30:03 +02:00
|
|
|
@interface SSKEnvironment ()
|
|
|
|
|
|
|
|
@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;
|
2018-09-20 18:52:43 +02:00
|
|
|
@property (nonatomic) OWSMessageManager *messageManager;
|
|
|
|
@property (nonatomic) OWSBlockingManager *blockingManager;
|
|
|
|
@property (nonatomic) OWSIdentityManager *identityManager;
|
2018-10-01 16:33:01 +02:00
|
|
|
@property (nonatomic) id<OWSUDManager> udManager;
|
2018-10-02 15:34:34 +02:00
|
|
|
@property (nonatomic) OWSMessageDecrypter *messageDecrypter;
|
|
|
|
@property (nonatomic) OWSBatchMessageProcessor *batchMessageProcessor;
|
|
|
|
@property (nonatomic) OWSMessageReceiver *messageReceiver;
|
2018-10-04 21:51:04 +02:00
|
|
|
@property (nonatomic) TSSocketManager *socketManager;
|
2018-10-10 23:09:35 +02:00
|
|
|
@property (nonatomic) TSAccountManager *tsAccountManager;
|
2018-10-10 23:36:41 +02:00
|
|
|
@property (nonatomic) OWS2FAManager *ows2FAManager;
|
|
|
|
@property (nonatomic) OWSDisappearingMessagesJob *disappearingMessagesJob;
|
|
|
|
@property (nonatomic) ContactDiscoveryService *contactDiscoveryService;
|
2018-10-11 18:51:58 +02:00
|
|
|
@property (nonatomic) OWSReadReceiptManager *readReceiptManager;
|
2018-10-11 21:29:01 +02:00
|
|
|
@property (nonatomic) OWSOutgoingReceiptManager *outgoingReceiptManager;
|
2018-10-16 22:02:37 +02:00
|
|
|
@property (nonatomic) id<OWSSyncManagerProtocol> syncManager;
|
2018-10-22 17:42:53 +02:00
|
|
|
@property (nonatomic) id<SSKReachabilityManager> reachabilityManager;
|
2018-10-31 00:18:17 +01:00
|
|
|
@property (nonatomic) id<OWSTypingIndicators> typingIndicators;
|
2018-11-07 23:49:25 +01:00
|
|
|
@property (nonatomic) OWSAttachmentDownloads *attachmentDownloads;
|
2018-09-19 22:30:03 +02:00
|
|
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
#pragma mark -
|
|
|
|
|
2018-08-31 19:12:40 +02:00
|
|
|
@implementation SSKEnvironment
|
2016-12-18 22:08:26 +01:00
|
|
|
|
2018-09-17 15:27:58 +02:00
|
|
|
@synthesize callMessageHandler = _callMessageHandler;
|
|
|
|
@synthesize notificationsManager = _notificationsManager;
|
|
|
|
@synthesize objectReadWriteConnection = _objectReadWriteConnection;
|
2018-10-16 19:00:50 +02:00
|
|
|
@synthesize sessionStoreDBConnection = _sessionStoreDBConnection;
|
|
|
|
@synthesize migrationDBConnection = _migrationDBConnection;
|
|
|
|
@synthesize analyticsDBConnection = _analyticsDBConnection;
|
2018-09-17 15:27:58 +02:00
|
|
|
|
|
|
|
- (instancetype)initWithContactsManager:(id<ContactsManagerProtocol>)contactsManager
|
|
|
|
messageSender:(OWSMessageSender *)messageSender
|
2018-10-20 19:51:48 +02:00
|
|
|
messageSenderJobQueue:(SSKMessageSenderJobQueue *)messageSenderJobQueue
|
2018-09-17 15:27:58 +02:00
|
|
|
profileManager:(id<ProfileManagerProtocol>)profileManager
|
|
|
|
primaryStorage:(OWSPrimaryStorage *)primaryStorage
|
|
|
|
contactsUpdater:(ContactsUpdater *)contactsUpdater
|
|
|
|
networkManager:(TSNetworkManager *)networkManager
|
2018-09-20 18:52:43 +02:00
|
|
|
messageManager:(OWSMessageManager *)messageManager
|
|
|
|
blockingManager:(OWSBlockingManager *)blockingManager
|
|
|
|
identityManager:(OWSIdentityManager *)identityManager
|
2018-10-01 16:33:01 +02:00
|
|
|
udManager:(id<OWSUDManager>)udManager
|
2018-10-02 15:34:34 +02:00
|
|
|
messageDecrypter:(OWSMessageDecrypter *)messageDecrypter
|
|
|
|
batchMessageProcessor:(OWSBatchMessageProcessor *)batchMessageProcessor
|
|
|
|
messageReceiver:(OWSMessageReceiver *)messageReceiver
|
2018-10-04 21:51:04 +02:00
|
|
|
socketManager:(TSSocketManager *)socketManager
|
2018-10-10 23:09:35 +02:00
|
|
|
tsAccountManager:(TSAccountManager *)tsAccountManager
|
2018-10-10 23:36:41 +02:00
|
|
|
ows2FAManager:(OWS2FAManager *)ows2FAManager
|
|
|
|
disappearingMessagesJob:(OWSDisappearingMessagesJob *)disappearingMessagesJob
|
2018-10-11 18:51:58 +02:00
|
|
|
contactDiscoveryService:(ContactDiscoveryService *)contactDiscoveryService
|
2018-10-16 22:02:37 +02:00
|
|
|
readReceiptManager:(OWSReadReceiptManager *)readReceiptManager
|
|
|
|
outgoingReceiptManager:(OWSOutgoingReceiptManager *)outgoingReceiptManager
|
2018-10-22 17:42:53 +02:00
|
|
|
reachabilityManager:(id<SSKReachabilityManager>)reachabilityManager
|
2018-10-20 19:51:48 +02:00
|
|
|
syncManager:(id<OWSSyncManagerProtocol>)syncManager
|
2018-10-31 00:18:17 +01:00
|
|
|
typingIndicators:(id<OWSTypingIndicators>)typingIndicators
|
2018-11-07 23:49:25 +01:00
|
|
|
attachmentDownloads:(OWSAttachmentDownloads *)attachmentDownloads
|
2018-10-20 19:51:48 +02:00
|
|
|
{
|
2016-12-18 22:08:26 +01:00
|
|
|
self = [super init];
|
|
|
|
if (!self) {
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
2018-09-06 19:01:24 +02:00
|
|
|
OWSAssertDebug(contactsManager);
|
|
|
|
OWSAssertDebug(messageSender);
|
2018-10-20 19:51:48 +02:00
|
|
|
OWSAssertDebug(messageSenderJobQueue);
|
2018-09-06 19:01:24 +02:00
|
|
|
OWSAssertDebug(profileManager);
|
2018-09-17 15:27:58 +02:00
|
|
|
OWSAssertDebug(primaryStorage);
|
|
|
|
OWSAssertDebug(contactsUpdater);
|
|
|
|
OWSAssertDebug(networkManager);
|
2018-09-20 18:52:43 +02:00
|
|
|
OWSAssertDebug(messageManager);
|
|
|
|
OWSAssertDebug(blockingManager);
|
|
|
|
OWSAssertDebug(identityManager);
|
2018-10-01 16:33:01 +02:00
|
|
|
OWSAssertDebug(udManager);
|
2018-10-02 15:34:34 +02:00
|
|
|
OWSAssertDebug(messageDecrypter);
|
|
|
|
OWSAssertDebug(batchMessageProcessor);
|
|
|
|
OWSAssertDebug(messageReceiver);
|
2018-10-04 21:51:04 +02:00
|
|
|
OWSAssertDebug(socketManager);
|
2018-10-10 23:09:35 +02:00
|
|
|
OWSAssertDebug(tsAccountManager);
|
2018-10-10 23:36:41 +02:00
|
|
|
OWSAssertDebug(ows2FAManager);
|
|
|
|
OWSAssertDebug(disappearingMessagesJob);
|
|
|
|
OWSAssertDebug(contactDiscoveryService);
|
2018-10-11 18:51:58 +02:00
|
|
|
OWSAssertDebug(readReceiptManager);
|
2018-10-11 21:29:01 +02:00
|
|
|
OWSAssertDebug(outgoingReceiptManager);
|
2018-10-16 22:02:37 +02:00
|
|
|
OWSAssertDebug(syncManager);
|
2018-10-22 17:42:53 +02:00
|
|
|
OWSAssertDebug(reachabilityManager);
|
2018-10-31 00:18:17 +01:00
|
|
|
OWSAssertDebug(typingIndicators);
|
2018-11-07 23:49:25 +01:00
|
|
|
OWSAssertDebug(attachmentDownloads);
|
2017-12-06 21:53:19 +01:00
|
|
|
|
2016-12-18 22:08:26 +01:00
|
|
|
_contactsManager = contactsManager;
|
2017-03-30 18:37:22 +02:00
|
|
|
_messageSender = messageSender;
|
2018-10-20 19:51:48 +02:00
|
|
|
_messageSenderJobQueue = messageSenderJobQueue;
|
2017-08-02 19:12:26 +02:00
|
|
|
_profileManager = profileManager;
|
2018-09-17 15:27:58 +02:00
|
|
|
_primaryStorage = primaryStorage;
|
|
|
|
_contactsUpdater = contactsUpdater;
|
|
|
|
_networkManager = networkManager;
|
2018-09-20 18:52:43 +02:00
|
|
|
_messageManager = messageManager;
|
|
|
|
_blockingManager = blockingManager;
|
|
|
|
_identityManager = identityManager;
|
2018-10-01 16:33:01 +02:00
|
|
|
_udManager = udManager;
|
2018-10-02 15:34:34 +02:00
|
|
|
_messageDecrypter = messageDecrypter;
|
|
|
|
_batchMessageProcessor = batchMessageProcessor;
|
|
|
|
_messageReceiver = messageReceiver;
|
2018-10-04 21:51:04 +02:00
|
|
|
_socketManager = socketManager;
|
2018-10-10 23:09:35 +02:00
|
|
|
_tsAccountManager = tsAccountManager;
|
2018-10-10 23:36:41 +02:00
|
|
|
_ows2FAManager = ows2FAManager;
|
|
|
|
_disappearingMessagesJob = disappearingMessagesJob;
|
|
|
|
_contactDiscoveryService = contactDiscoveryService;
|
2018-10-11 18:51:58 +02:00
|
|
|
_readReceiptManager = readReceiptManager;
|
2018-10-11 21:29:01 +02:00
|
|
|
_outgoingReceiptManager = outgoingReceiptManager;
|
2018-10-16 22:02:37 +02:00
|
|
|
_syncManager = syncManager;
|
2018-10-22 17:42:53 +02:00
|
|
|
_reachabilityManager = reachabilityManager;
|
2018-10-31 00:18:17 +01:00
|
|
|
_typingIndicators = typingIndicators;
|
2018-11-07 23:49:25 +01:00
|
|
|
_attachmentDownloads = attachmentDownloads;
|
2016-12-18 22:08:26 +01:00
|
|
|
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
2018-08-31 19:16:31 +02:00
|
|
|
+ (instancetype)shared
|
2016-12-18 22:08:26 +01:00
|
|
|
{
|
2018-08-31 19:12:40 +02:00
|
|
|
OWSAssertDebug(sharedSSKEnvironment);
|
2015-12-07 03:31:43 +01:00
|
|
|
|
2018-08-31 19:12:40 +02:00
|
|
|
return sharedSSKEnvironment;
|
2017-03-30 18:37:22 +02:00
|
|
|
}
|
2017-02-02 21:13:41 +01:00
|
|
|
|
2018-08-31 19:16:31 +02:00
|
|
|
+ (void)setShared:(SSKEnvironment *)env
|
2017-02-02 21:13:41 +01:00
|
|
|
{
|
2018-09-06 19:01:24 +02:00
|
|
|
OWSAssertDebug(env);
|
2018-08-31 19:12:40 +02:00
|
|
|
OWSAssertDebug(!sharedSSKEnvironment || CurrentAppContext().isRunningTests);
|
2017-02-02 21:13:41 +01:00
|
|
|
|
2018-08-31 19:12:40 +02:00
|
|
|
sharedSSKEnvironment = env;
|
2017-08-02 19:12:26 +02:00
|
|
|
}
|
|
|
|
|
2018-09-17 15:27:58 +02:00
|
|
|
+ (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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-05-22 05:09:01 +02:00
|
|
|
- (void)setLokiFriendRequestExpirationJob:(LKFriendRequestExpirationJob *)lokiFriendRequestExpirationJob {
|
2019-05-20 03:17:58 +02:00
|
|
|
@synchronized(self) {
|
2019-05-22 05:09:01 +02:00
|
|
|
OWSAssertDebug(lokiFriendRequestExpirationJob);
|
|
|
|
OWSAssertDebug(_lokiFriendRequestExpirationJob == nil);
|
2019-05-20 03:17:58 +02:00
|
|
|
|
2019-05-22 05:09:01 +02:00
|
|
|
_lokiFriendRequestExpirationJob = lokiFriendRequestExpirationJob;
|
2019-05-20 03:17:58 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-09-17 15:27:58 +02:00
|
|
|
- (BOOL)isComplete
|
|
|
|
{
|
|
|
|
return (self.callMessageHandler != nil && self.notificationsManager != nil);
|
|
|
|
}
|
|
|
|
|
|
|
|
- (YapDatabaseConnection *)objectReadWriteConnection
|
|
|
|
{
|
|
|
|
@synchronized(self) {
|
|
|
|
if (!_objectReadWriteConnection) {
|
|
|
|
_objectReadWriteConnection = self.primaryStorage.newDatabaseConnection;
|
|
|
|
}
|
|
|
|
return _objectReadWriteConnection;
|
|
|
|
}
|
|
|
|
}
|
2018-10-16 19:00:50 +02:00
|
|
|
|
|
|
|
- (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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-12-07 03:31:43 +01:00
|
|
|
@end
|
2016-12-18 22:08:26 +01:00
|
|
|
|
|
|
|
NS_ASSUME_NONNULL_END
|