Merge branch 'charlesmchen/sessionDatabaseRevert2_'
This commit is contained in:
commit
de4c5e0b17
@ -295,7 +295,7 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(yapDatabaseModified:)
|
||||
name:YapDatabaseModifiedNotification
|
||||
object:nil];
|
||||
object:TSStorageManager.sharedManager.dbNotificationObject];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(yapDatabaseModifiedExternally:)
|
||||
name:YapDatabaseModifiedExternallyNotification
|
||||
|
||||
@ -137,7 +137,7 @@ typedef NS_ENUM(NSInteger, CellState) { kArchiveState, kInboxState };
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(yapDatabaseModified:)
|
||||
name:YapDatabaseModifiedNotification
|
||||
object:nil];
|
||||
object:TSStorageManager.sharedManager.dbNotificationObject];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(yapDatabaseModifiedExternally:)
|
||||
name:YapDatabaseModifiedExternallyNotification
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
@ -82,7 +82,7 @@ class MessageDetailViewController: OWSViewController, UIScrollViewDelegate {
|
||||
NotificationCenter.default.addObserver(self,
|
||||
selector: #selector(yapDatabaseModified),
|
||||
name: NSNotification.Name.YapDatabaseModified,
|
||||
object: nil)
|
||||
object: TSStorageManager.shared().dbNotificationObject)
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "OWSLinkedDevicesTableViewController.h"
|
||||
@ -65,7 +65,7 @@ int const OWSLinkedDevicesTableViewControllerSectionAddDevice = 1;
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(yapDatabaseModified:)
|
||||
name:YapDatabaseModifiedNotification
|
||||
object:nil];
|
||||
object:TSStorageManager.sharedManager.dbNotificationObject];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(yapDatabaseModifiedExternally:)
|
||||
name:YapDatabaseModifiedExternallyNotification
|
||||
|
||||
@ -100,13 +100,15 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(yapDatabaseModified:)
|
||||
name:YapDatabaseModifiedNotification
|
||||
object:nil];
|
||||
object:TSStorageManager.sharedManager.dbNotificationObject];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(yapDatabaseModifiedExternally:)
|
||||
name:YapDatabaseModifiedExternallyNotification
|
||||
object:nil];
|
||||
} else {
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self name:YapDatabaseModifiedNotification object:nil];
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self
|
||||
name:YapDatabaseModifiedNotification
|
||||
object:TSStorageManager.sharedManager.dbNotificationObject];
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self
|
||||
name:YapDatabaseModifiedExternallyNotification
|
||||
object:nil];
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class OWSSignalServiceProtosEnvelope;
|
||||
@class TSStorageManager;
|
||||
@class OWSStorage;
|
||||
|
||||
// This class is used to write incoming (decrypted, unprocessed)
|
||||
// messages to a durable queue and then process them in batches,
|
||||
@ -13,7 +13,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@interface OWSBatchMessageProcessor : NSObject
|
||||
|
||||
+ (instancetype)sharedInstance;
|
||||
+ (void)syncRegisterDatabaseExtension:(TSStorageManager *)storageManager;
|
||||
+ (void)syncRegisterDatabaseExtension:(OWSStorage *)storage;
|
||||
|
||||
- (void)enqueueEnvelopeData:(NSData *)envelopeData plaintextData:(NSData *_Nullable)plaintextData;
|
||||
- (void)handleAnyUnprocessedEnvelopesAsync;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "OWSBatchMessageProcessor.h"
|
||||
@ -200,15 +200,15 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
|
||||
}
|
||||
|
||||
|
||||
+ (void)syncRegisterDatabaseExtension:(TSStorageManager *)storageManager
|
||||
+ (void)syncRegisterDatabaseExtension:(OWSStorage *)storage
|
||||
{
|
||||
YapDatabaseView *existingView = [storageManager registeredExtension:OWSMessageContentJobFinderExtensionName];
|
||||
YapDatabaseView *existingView = [storage registeredExtension:OWSMessageContentJobFinderExtensionName];
|
||||
if (existingView) {
|
||||
OWSFail(@"%@ was already initialized.", OWSMessageContentJobFinderExtensionName);
|
||||
// already initialized
|
||||
return;
|
||||
}
|
||||
[storageManager registerExtension:[self databaseExtension] withName:OWSMessageContentJobFinderExtensionName];
|
||||
[storage registerExtension:[self databaseExtension] withName:OWSMessageContentJobFinderExtensionName];
|
||||
}
|
||||
|
||||
#pragma mark Logging
|
||||
@ -443,9 +443,9 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
|
||||
|
||||
#pragma mark - class methods
|
||||
|
||||
+ (void)syncRegisterDatabaseExtension:(TSStorageManager *)storageManager
|
||||
+ (void)syncRegisterDatabaseExtension:(OWSStorage *)storage
|
||||
{
|
||||
[OWSMessageContentJobFinder syncRegisterDatabaseExtension:storageManager];
|
||||
[OWSMessageContentJobFinder syncRegisterDatabaseExtension:storage];
|
||||
}
|
||||
|
||||
#pragma mark - instance methods
|
||||
|
||||
@ -1,11 +1,12 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class TSStorageManager;
|
||||
@class OWSStorage;
|
||||
@class TSMessage;
|
||||
@class TSStorageManager;
|
||||
@class TSThread;
|
||||
@class YapDatabaseReadTransaction;
|
||||
|
||||
@ -27,12 +28,12 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
/**
|
||||
* Database extensions required for class to work.
|
||||
*/
|
||||
+ (void)asyncRegisterDatabaseExtensions:(TSStorageManager *)storageManager;
|
||||
+ (void)asyncRegisterDatabaseExtensions:(OWSStorage *)storage;
|
||||
|
||||
/**
|
||||
* Only use the sync version for testing, generally we'll want to register extensions async
|
||||
*/
|
||||
+ (void)blockingRegisterDatabaseExtensions:(TSStorageManager *)storageManager;
|
||||
+ (void)blockingRegisterDatabaseExtensions:(OWSStorage *)storage;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "OWSDisappearingMessagesFinder.h"
|
||||
@ -189,23 +189,22 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess
|
||||
}
|
||||
|
||||
// Useful for tests, don't use in app startup path because it's slow.
|
||||
+ (void)blockingRegisterDatabaseExtensions:(TSStorageManager *)storageManager
|
||||
+ (void)blockingRegisterDatabaseExtensions:(OWSStorage *)storage
|
||||
{
|
||||
[storageManager registerExtension:[self indexDatabaseExtension]
|
||||
withName:OWSDisappearingMessageFinderExpiresAtIndex];
|
||||
[storage registerExtension:[self indexDatabaseExtension] withName:OWSDisappearingMessageFinderExpiresAtIndex];
|
||||
}
|
||||
|
||||
+ (void)asyncRegisterDatabaseExtensions:(TSStorageManager *)storageManager
|
||||
+ (void)asyncRegisterDatabaseExtensions:(OWSStorage *)storage
|
||||
{
|
||||
[storageManager asyncRegisterExtension:[self indexDatabaseExtension]
|
||||
withName:OWSDisappearingMessageFinderExpiresAtIndex
|
||||
completionBlock:^(BOOL ready) {
|
||||
if (ready) {
|
||||
DDLogDebug(@"%@ completed registering extension async.", self.logTag);
|
||||
} else {
|
||||
DDLogError(@"%@ failed registering extension async.", self.logTag);
|
||||
}
|
||||
}];
|
||||
[storage asyncRegisterExtension:[self indexDatabaseExtension]
|
||||
withName:OWSDisappearingMessageFinderExpiresAtIndex
|
||||
completionBlock:^(BOOL ready) {
|
||||
if (ready) {
|
||||
DDLogDebug(@"%@ completed registering extension async.", self.logTag);
|
||||
} else {
|
||||
DDLogError(@"%@ failed registering extension async.", self.logTag);
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@ -1,9 +1,10 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class OWSStorage;
|
||||
@class TSStorageManager;
|
||||
|
||||
@interface OWSFailedAttachmentDownloadsJob : NSObject
|
||||
@ -16,7 +17,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
/**
|
||||
* Database extensions required for class to work.
|
||||
*/
|
||||
+ (void)asyncRegisterDatabaseExtensionsWithStorageManager:(TSStorageManager *)storageManager;
|
||||
+ (void)asyncRegisterDatabaseExtensionsWithStorageManager:(OWSStorage *)storage;
|
||||
|
||||
/**
|
||||
* Only use the sync version for testing, generally we'll want to register extensions async
|
||||
|
||||
@ -124,17 +124,17 @@ static NSString *const OWSFailedAttachmentDownloadsJobAttachmentStateIndex = @"i
|
||||
withName:OWSFailedAttachmentDownloadsJobAttachmentStateIndex];
|
||||
}
|
||||
|
||||
+ (void)asyncRegisterDatabaseExtensionsWithStorageManager:(TSStorageManager *)storageManager
|
||||
+ (void)asyncRegisterDatabaseExtensionsWithStorageManager:(OWSStorage *)storage
|
||||
{
|
||||
[storageManager asyncRegisterExtension:[self indexDatabaseExtension]
|
||||
withName:OWSFailedAttachmentDownloadsJobAttachmentStateIndex
|
||||
completionBlock:^(BOOL ready) {
|
||||
if (ready) {
|
||||
DDLogDebug(@"%@ completed registering extension async.", self.logTag);
|
||||
} else {
|
||||
DDLogError(@"%@ failed registering extension async.", self.logTag);
|
||||
}
|
||||
}];
|
||||
[storage asyncRegisterExtension:[self indexDatabaseExtension]
|
||||
withName:OWSFailedAttachmentDownloadsJobAttachmentStateIndex
|
||||
completionBlock:^(BOOL ready) {
|
||||
if (ready) {
|
||||
DDLogDebug(@"%@ completed registering extension async.", self.logTag);
|
||||
} else {
|
||||
DDLogError(@"%@ failed registering extension async.", self.logTag);
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@ -1,9 +1,10 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class OWSStorage;
|
||||
@class TSStorageManager;
|
||||
|
||||
@interface OWSFailedMessagesJob : NSObject
|
||||
@ -16,7 +17,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
/**
|
||||
* Database extensions required for class to work.
|
||||
*/
|
||||
+ (void)asyncRegisterDatabaseExtensionsWithStorageManager:(TSStorageManager *)storageManager;
|
||||
+ (void)asyncRegisterDatabaseExtensionsWithStorageManager:(OWSStorage *)storage;
|
||||
|
||||
/**
|
||||
* Only use the sync version for testing, generally we'll want to register extensions async
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "OWSFailedMessagesJob.h"
|
||||
@ -134,17 +134,17 @@ static NSString *const OWSFailedMessagesJobMessageStateIndex = @"index_outoing_m
|
||||
withName:OWSFailedMessagesJobMessageStateIndex];
|
||||
}
|
||||
|
||||
+ (void)asyncRegisterDatabaseExtensionsWithStorageManager:(TSStorageManager *)storageManager
|
||||
+ (void)asyncRegisterDatabaseExtensionsWithStorageManager:(OWSStorage *)storage
|
||||
{
|
||||
[storageManager asyncRegisterExtension:[self indexDatabaseExtension]
|
||||
withName:OWSFailedMessagesJobMessageStateIndex
|
||||
completionBlock:^(BOOL ready) {
|
||||
if (ready) {
|
||||
DDLogDebug(@"%@ completed registering extension async.", self.logTag);
|
||||
} else {
|
||||
DDLogError(@"%@ failed registering extension async.", self.logTag);
|
||||
}
|
||||
}];
|
||||
[storage asyncRegisterExtension:[self indexDatabaseExtension]
|
||||
withName:OWSFailedMessagesJobMessageStateIndex
|
||||
completionBlock:^(BOOL ready) {
|
||||
if (ready) {
|
||||
DDLogDebug(@"%@ completed registering extension async.", self.logTag);
|
||||
} else {
|
||||
DDLogError(@"%@ failed registering extension async.", self.logTag);
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "OWSRecipientIdentity.h"
|
||||
@ -18,6 +18,7 @@ extern const NSUInteger kIdentityKeyLength;
|
||||
|
||||
@class OWSRecipientIdentity;
|
||||
@class OWSSignalServiceProtosVerified;
|
||||
@class OWSStorage;
|
||||
|
||||
// This class can be safely accessed and used from any thread.
|
||||
@interface OWSIdentityManager : NSObject <IdentityKeyStore>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "OWSMessageManager.h"
|
||||
@ -126,7 +126,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(yapDatabaseModified:)
|
||||
name:YapDatabaseModifiedNotification
|
||||
object:nil];
|
||||
object:TSStorageManager.sharedManager.dbNotificationObject];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(yapDatabaseModified:)
|
||||
name:YapDatabaseModifiedExternallyNotification
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class OWSSignalServiceProtosEnvelope;
|
||||
@class TSStorageManager;
|
||||
@class OWSStorage;
|
||||
|
||||
// This class is used to write incoming (encrypted, unprocessed)
|
||||
// messages to a durable queue and then decrypt them in the order
|
||||
@ -14,7 +14,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@interface OWSMessageReceiver : NSObject
|
||||
|
||||
+ (instancetype)sharedInstance;
|
||||
+ (void)syncRegisterDatabaseExtension:(TSStorageManager *)storageManager;
|
||||
+ (void)syncRegisterDatabaseExtension:(OWSStorage *)storage;
|
||||
|
||||
- (void)handleReceivedEnvelope:(OWSSignalServiceProtosEnvelope *)envelope;
|
||||
- (void)handleAnyUnprocessedEnvelopesAsync;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "OWSMessageReceiver.h"
|
||||
@ -190,17 +190,17 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin
|
||||
});
|
||||
}
|
||||
|
||||
+ (void)syncRegisterDatabaseExtension:(TSStorageManager *)storageManager
|
||||
+ (void)syncRegisterDatabaseExtension:(OWSStorage *)storage
|
||||
{
|
||||
[self registerLegacyClasses];
|
||||
|
||||
YapDatabaseView *existingView = [storageManager registeredExtension:OWSMessageDecryptJobFinderExtensionName];
|
||||
YapDatabaseView *existingView = [storage registeredExtension:OWSMessageDecryptJobFinderExtensionName];
|
||||
if (existingView) {
|
||||
OWSFail(@"%@ was already initialized.", OWSMessageDecryptJobFinderExtensionName);
|
||||
// already initialized
|
||||
return;
|
||||
}
|
||||
[storageManager registerExtension:[self databaseExtension] withName:OWSMessageDecryptJobFinderExtensionName];
|
||||
[storage registerExtension:[self databaseExtension] withName:OWSMessageDecryptJobFinderExtensionName];
|
||||
}
|
||||
|
||||
@end
|
||||
@ -422,9 +422,9 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin
|
||||
|
||||
#pragma mark - class methods
|
||||
|
||||
+ (void)syncRegisterDatabaseExtension:(TSStorageManager *)storageManager
|
||||
+ (void)syncRegisterDatabaseExtension:(OWSStorage *)storage
|
||||
{
|
||||
[OWSMessageDecryptJobFinder syncRegisterDatabaseExtension:storageManager];
|
||||
[OWSMessageDecryptJobFinder syncRegisterDatabaseExtension:storage];
|
||||
}
|
||||
|
||||
#pragma mark - instance methods
|
||||
|
||||
@ -1,9 +1,10 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class OWSStorage;
|
||||
@class TSStorageManager;
|
||||
@class YapDatabaseReadTransaction;
|
||||
|
||||
@ -14,7 +15,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
/**
|
||||
* Must be called before using this finder.
|
||||
*/
|
||||
+ (void)asyncRegisterExtensionWithStorageManager:(TSStorageManager *)storageManager;
|
||||
+ (void)asyncRegisterExtensionWithStorageManager:(OWSStorage *)storage;
|
||||
|
||||
/**
|
||||
* Detects existance of a duplicate incoming message.
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "OWSIncomingMessageFinder.h"
|
||||
@ -92,14 +92,14 @@ NSString *const OWSIncomingMessageFinderColumnSourceDeviceId = @"OWSIncomingMess
|
||||
return [[YapDatabaseSecondaryIndex alloc] initWithSetup:setup handler:handler];
|
||||
}
|
||||
|
||||
+ (void)asyncRegisterExtensionWithStorageManager:(TSStorageManager *)storageManager
|
||||
+ (void)asyncRegisterExtensionWithStorageManager:(OWSStorage *)storage
|
||||
{
|
||||
DDLogInfo(@"%@ registering async.", self.logTag);
|
||||
[storageManager asyncRegisterExtension:self.indexExtension
|
||||
withName:OWSIncomingMessageFinderExtensionName
|
||||
completionBlock:^(BOOL ready) {
|
||||
DDLogInfo(@"%@ finished registering async.", self.logTag);
|
||||
}];
|
||||
[storage asyncRegisterExtension:self.indexExtension
|
||||
withName:OWSIncomingMessageFinderExtensionName
|
||||
completionBlock:^(BOOL ready) {
|
||||
DDLogInfo(@"%@ finished registering async.", self.logTag);
|
||||
}];
|
||||
}
|
||||
|
||||
// We should not normally hit this, as we should have prefer registering async, but it is useful for testing.
|
||||
|
||||
@ -19,6 +19,9 @@ extern NSString *const StorageIsReadyNotification;
|
||||
// sync _AND_ async view registrations.
|
||||
+ (BOOL)isStorageReady;
|
||||
|
||||
// This object can be used to filter database notifications.
|
||||
@property (nonatomic, readonly, nullable) id dbNotificationObject;
|
||||
|
||||
/**
|
||||
* The safeBlockingMigrationsBlock block will
|
||||
* run any outstanding version migrations that are a) blocking and b) safe
|
||||
|
||||
@ -286,6 +286,13 @@ static NSString *keychainDBPassAccount = @"TSDatabasePass";
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
}
|
||||
|
||||
- (nullable id)dbNotificationObject
|
||||
{
|
||||
OWSAssert(self.database);
|
||||
|
||||
return self.database;
|
||||
}
|
||||
|
||||
- (BOOL)areAsyncRegistrationsComplete
|
||||
{
|
||||
OWS_ABSTRACT_METHOD();
|
||||
|
||||
@ -1,7 +1,8 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "OWSStorage.h"
|
||||
#import <YapDatabase/YapDatabaseViewTransaction.h>
|
||||
|
||||
extern NSString *const TSInboxGroup;
|
||||
@ -20,27 +21,27 @@ extern NSString *const TSSecondaryDevicesDatabaseViewExtensionName;
|
||||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
|
||||
+ (void)registerCrossProcessNotifier;
|
||||
+ (void)registerCrossProcessNotifier:(OWSStorage *)storage;
|
||||
|
||||
// This method must be called _AFTER_ registerThreadInteractionsDatabaseView.
|
||||
+ (void)registerThreadDatabaseView;
|
||||
+ (void)registerThreadDatabaseView:(OWSStorage *)storage;
|
||||
|
||||
+ (void)registerThreadInteractionsDatabaseView;
|
||||
+ (void)asyncRegisterThreadOutgoingMessagesDatabaseView;
|
||||
+ (void)registerThreadInteractionsDatabaseView:(OWSStorage *)storage;
|
||||
+ (void)asyncRegisterThreadOutgoingMessagesDatabaseView:(OWSStorage *)storage;
|
||||
|
||||
// Instances of OWSReadTracking for wasRead is NO and shouldAffectUnreadCounts is YES.
|
||||
//
|
||||
// Should be used for "unread message counts".
|
||||
+ (void)registerUnreadDatabaseView;
|
||||
+ (void)registerUnreadDatabaseView:(OWSStorage *)storage;
|
||||
|
||||
// Should be used for "unread indicator".
|
||||
//
|
||||
// Instances of OWSReadTracking for wasRead is NO.
|
||||
+ (void)asyncRegisterUnseenDatabaseView;
|
||||
+ (void)asyncRegisterUnseenDatabaseView:(OWSStorage *)storage;
|
||||
|
||||
+ (void)asyncRegisterThreadSpecialMessagesDatabaseView;
|
||||
+ (void)asyncRegisterThreadSpecialMessagesDatabaseView:(OWSStorage *)storage;
|
||||
|
||||
+ (void)asyncRegisterSecondaryDevicesDatabaseView;
|
||||
+ (void)asyncRegisterSecondaryDevicesDatabaseView:(OWSStorage *)storage;
|
||||
|
||||
// Returns the "unseen" database view if it is ready;
|
||||
// otherwise it returns the "unread" database view.
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "TSDatabaseView.h"
|
||||
@ -8,7 +8,6 @@
|
||||
#import "TSIncomingMessage.h"
|
||||
#import "TSInvalidIdentityKeyErrorMessage.h"
|
||||
#import "TSOutgoingMessage.h"
|
||||
#import "TSStorageManager.h"
|
||||
#import "TSThread.h"
|
||||
#import <YapDatabase/YapDatabaseAutoView.h>
|
||||
#import <YapDatabase/YapDatabaseCrossProcessNotification.h>
|
||||
@ -32,25 +31,29 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
|
||||
|
||||
@implementation TSDatabaseView
|
||||
|
||||
+ (void)registerCrossProcessNotifier
|
||||
+ (void)registerCrossProcessNotifier:(OWSStorage *)storage
|
||||
{
|
||||
OWSAssert(storage);
|
||||
|
||||
// I don't think the identifier and name of this extension matter for our purposes,
|
||||
// so long as they don't conflict with any other extension names.
|
||||
YapDatabaseExtension *extension =
|
||||
[[YapDatabaseCrossProcessNotification alloc] initWithIdentifier:@"SignalCrossProcessNotifier"];
|
||||
[[TSStorageManager sharedManager] registerExtension:extension withName:@"SignalCrossProcessNotifier"];
|
||||
[storage registerExtension:extension withName:@"SignalCrossProcessNotifier"];
|
||||
}
|
||||
|
||||
+ (void)registerMessageDatabaseViewWithName:(NSString *)viewName
|
||||
viewGrouping:(YapDatabaseViewGrouping *)viewGrouping
|
||||
version:(NSString *)version
|
||||
async:(BOOL)async
|
||||
storage:(OWSStorage *)storage
|
||||
{
|
||||
OWSAssertIsOnMainThread();
|
||||
OWSAssert(viewName.length > 0);
|
||||
OWSAssert((viewGrouping));
|
||||
OWSAssert(storage);
|
||||
|
||||
YapDatabaseView *existingView = [[TSStorageManager sharedManager] registeredExtension:viewName];
|
||||
YapDatabaseView *existingView = [storage registeredExtension:viewName];
|
||||
if (existingView) {
|
||||
OWSFail(@"Registered database view twice: %@", viewName);
|
||||
return;
|
||||
@ -69,20 +72,19 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
|
||||
options:options];
|
||||
|
||||
if (async) {
|
||||
[[TSStorageManager sharedManager]
|
||||
asyncRegisterExtension:view
|
||||
withName:viewName
|
||||
completionBlock:^(BOOL ready) {
|
||||
OWSCAssert(ready);
|
||||
[storage asyncRegisterExtension:view
|
||||
withName:viewName
|
||||
completionBlock:^(BOOL ready) {
|
||||
OWSCAssert(ready);
|
||||
|
||||
DDLogInfo(@"%@ asyncRegisterExtension: %@ -> %d", self.logTag, viewName, ready);
|
||||
}];
|
||||
DDLogInfo(@"%@ asyncRegisterExtension: %@ -> %d", self.logTag, viewName, ready);
|
||||
}];
|
||||
} else {
|
||||
[[TSStorageManager sharedManager] registerExtension:view withName:viewName];
|
||||
[storage registerExtension:view withName:viewName];
|
||||
}
|
||||
}
|
||||
|
||||
+ (void)registerUnreadDatabaseView
|
||||
+ (void)registerUnreadDatabaseView:(OWSStorage *)storage
|
||||
{
|
||||
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *(
|
||||
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
|
||||
@ -98,10 +100,11 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
|
||||
[self registerMessageDatabaseViewWithName:TSUnreadDatabaseViewExtensionName
|
||||
viewGrouping:viewGrouping
|
||||
version:@"1"
|
||||
async:NO];
|
||||
async:NO
|
||||
storage:storage];
|
||||
}
|
||||
|
||||
+ (void)asyncRegisterUnseenDatabaseView
|
||||
+ (void)asyncRegisterUnseenDatabaseView:(OWSStorage *)storage
|
||||
{
|
||||
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *(
|
||||
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
|
||||
@ -117,10 +120,11 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
|
||||
[self registerMessageDatabaseViewWithName:TSUnseenDatabaseViewExtensionName
|
||||
viewGrouping:viewGrouping
|
||||
version:@"1"
|
||||
async:YES];
|
||||
async:YES
|
||||
storage:storage];
|
||||
}
|
||||
|
||||
+ (void)asyncRegisterThreadSpecialMessagesDatabaseView
|
||||
+ (void)asyncRegisterThreadSpecialMessagesDatabaseView:(OWSStorage *)storage
|
||||
{
|
||||
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *(
|
||||
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
|
||||
@ -144,10 +148,11 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
|
||||
[self registerMessageDatabaseViewWithName:TSThreadSpecialMessagesDatabaseViewExtensionName
|
||||
viewGrouping:viewGrouping
|
||||
version:@"1"
|
||||
async:YES];
|
||||
async:YES
|
||||
storage:storage];
|
||||
}
|
||||
|
||||
+ (void)registerThreadInteractionsDatabaseView
|
||||
+ (void)registerThreadInteractionsDatabaseView:(OWSStorage *)storage
|
||||
{
|
||||
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *(
|
||||
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
|
||||
@ -160,10 +165,11 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
|
||||
[self registerMessageDatabaseViewWithName:TSMessageDatabaseViewExtensionName
|
||||
viewGrouping:viewGrouping
|
||||
version:@"1"
|
||||
async:NO];
|
||||
async:NO
|
||||
storage:storage];
|
||||
}
|
||||
|
||||
+ (void)asyncRegisterThreadOutgoingMessagesDatabaseView
|
||||
+ (void)asyncRegisterThreadOutgoingMessagesDatabaseView:(OWSStorage *)storage
|
||||
{
|
||||
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *(
|
||||
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
|
||||
@ -176,13 +182,13 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
|
||||
[self registerMessageDatabaseViewWithName:TSThreadOutgoingMessageDatabaseViewExtensionName
|
||||
viewGrouping:viewGrouping
|
||||
version:@"2"
|
||||
async:YES];
|
||||
async:YES
|
||||
storage:storage];
|
||||
}
|
||||
|
||||
+ (void)registerThreadDatabaseView
|
||||
+ (void)registerThreadDatabaseView:(OWSStorage *)storage
|
||||
{
|
||||
YapDatabaseView *threadView =
|
||||
[[TSStorageManager sharedManager] registeredExtension:TSThreadDatabaseViewExtensionName];
|
||||
YapDatabaseView *threadView = [storage registeredExtension:TSThreadDatabaseViewExtensionName];
|
||||
if (threadView) {
|
||||
OWSFail(@"Registered database view twice: %@", TSThreadDatabaseViewExtensionName);
|
||||
return;
|
||||
@ -228,7 +234,7 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
|
||||
YapDatabaseView *databaseView =
|
||||
[[YapDatabaseAutoView alloc] initWithGrouping:viewGrouping sorting:viewSorting versionTag:@"3" options:options];
|
||||
|
||||
[[TSStorageManager sharedManager] registerExtension:databaseView withName:TSThreadDatabaseViewExtensionName];
|
||||
[storage registerExtension:databaseView withName:TSThreadDatabaseViewExtensionName];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -296,7 +302,7 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
|
||||
}];
|
||||
}
|
||||
|
||||
+ (void)asyncRegisterSecondaryDevicesDatabaseView
|
||||
+ (void)asyncRegisterSecondaryDevicesDatabaseView:(OWSStorage *)storage
|
||||
{
|
||||
YapDatabaseViewGrouping *viewGrouping =
|
||||
[YapDatabaseViewGrouping withObjectBlock:^NSString *_Nullable(YapDatabaseReadTransaction *_Nonnull transaction,
|
||||
@ -341,16 +347,15 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
|
||||
YapDatabaseView *view =
|
||||
[[YapDatabaseAutoView alloc] initWithGrouping:viewGrouping sorting:viewSorting versionTag:@"3" options:options];
|
||||
|
||||
[[TSStorageManager sharedManager]
|
||||
asyncRegisterExtension:view
|
||||
withName:TSSecondaryDevicesDatabaseViewExtensionName
|
||||
completionBlock:^(BOOL ready) {
|
||||
if (ready) {
|
||||
DDLogDebug(@"%@ Successfully set up extension: %@", self.logTag, TSSecondaryDevicesGroup);
|
||||
} else {
|
||||
DDLogError(@"%@ Unable to setup extension: %@", self.logTag, TSSecondaryDevicesGroup);
|
||||
}
|
||||
}];
|
||||
[storage asyncRegisterExtension:view
|
||||
withName:TSSecondaryDevicesDatabaseViewExtensionName
|
||||
completionBlock:^(BOOL ready) {
|
||||
if (ready) {
|
||||
DDLogDebug(@"%@ Successfully set up extension: %@", self.logTag, TSSecondaryDevicesGroup);
|
||||
} else {
|
||||
DDLogError(@"%@ Unable to setup extension: %@", self.logTag, TSSecondaryDevicesGroup);
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
+ (id)unseenDatabaseViewExtension:(YapDatabaseReadTransaction *)transaction
|
||||
|
||||
@ -1,11 +1,15 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "OWSStorage.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
void runSyncRegistrationsForStorage(OWSStorage *storage);
|
||||
void runAsyncRegistrationsForStorage(OWSStorage *storage);
|
||||
|
||||
// TODO: Rename to OWSPrimaryStorage?
|
||||
@interface TSStorageManager : OWSStorage
|
||||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
//
|
||||
|
||||
#import "TSStorageManager.h"
|
||||
#import "AppContext.h"
|
||||
#import "OWSAnalytics.h"
|
||||
#import "OWSBatchMessageProcessor.h"
|
||||
#import "OWSDisappearingMessagesFinder.h"
|
||||
@ -22,8 +23,41 @@ NSString *const TSStorageManagerExceptionName_CouldNotMoveDatabaseFile
|
||||
NSString *const TSStorageManagerExceptionName_CouldNotCreateDatabaseDirectory
|
||||
= @"TSStorageManagerExceptionName_CouldNotCreateDatabaseDirectory";
|
||||
|
||||
#pragma mark -
|
||||
void runSyncRegistrationsForStorage(OWSStorage *storage)
|
||||
{
|
||||
OWSCAssert(storage);
|
||||
|
||||
// Synchronously register extensions which are essential for views.
|
||||
[TSDatabaseView registerCrossProcessNotifier:storage];
|
||||
[TSDatabaseView registerThreadInteractionsDatabaseView:storage];
|
||||
[TSDatabaseView registerThreadDatabaseView:storage];
|
||||
[TSDatabaseView registerUnreadDatabaseView:storage];
|
||||
[storage registerExtension:[TSDatabaseSecondaryIndexes registerTimeStampIndex] withName:@"idx"];
|
||||
[OWSMessageReceiver syncRegisterDatabaseExtension:storage];
|
||||
[OWSBatchMessageProcessor syncRegisterDatabaseExtension:storage];
|
||||
}
|
||||
|
||||
void runAsyncRegistrationsForStorage(OWSStorage *storage)
|
||||
{
|
||||
OWSCAssert(storage);
|
||||
|
||||
// Asynchronously register other extensions.
|
||||
//
|
||||
// All sync registrations must be done before all async registrations,
|
||||
// or the sync registrations will block on the async registrations.
|
||||
[TSDatabaseView asyncRegisterUnseenDatabaseView:storage];
|
||||
[TSDatabaseView asyncRegisterThreadOutgoingMessagesDatabaseView:storage];
|
||||
[TSDatabaseView asyncRegisterThreadSpecialMessagesDatabaseView:storage];
|
||||
|
||||
// Register extensions which aren't essential for rendering threads async.
|
||||
[OWSIncomingMessageFinder asyncRegisterExtensionWithStorageManager:storage];
|
||||
[TSDatabaseView asyncRegisterSecondaryDevicesDatabaseView:storage];
|
||||
[OWSDisappearingMessagesFinder asyncRegisterDatabaseExtensions:storage];
|
||||
[OWSFailedMessagesJob asyncRegisterDatabaseExtensionsWithStorageManager:storage];
|
||||
[OWSFailedAttachmentDownloadsJob asyncRegisterDatabaseExtensionsWithStorageManager:storage];
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
@interface TSStorageManager ()
|
||||
|
||||
@property (nonatomic, readonly, nullable) YapDatabaseConnection *dbReadConnection;
|
||||
@ -75,14 +109,7 @@ NSString *const TSStorageManagerExceptionName_CouldNotCreateDatabaseDirectory
|
||||
|
||||
- (void)runSyncRegistrations
|
||||
{
|
||||
// Synchronously register extensions which are essential for views.
|
||||
[TSDatabaseView registerCrossProcessNotifier];
|
||||
[TSDatabaseView registerThreadInteractionsDatabaseView];
|
||||
[TSDatabaseView registerThreadDatabaseView];
|
||||
[TSDatabaseView registerUnreadDatabaseView];
|
||||
[self registerExtension:[TSDatabaseSecondaryIndexes registerTimeStampIndex] withName:@"idx"];
|
||||
[OWSMessageReceiver syncRegisterDatabaseExtension:self];
|
||||
[OWSBatchMessageProcessor syncRegisterDatabaseExtension:self];
|
||||
runSyncRegistrationsForStorage(self);
|
||||
|
||||
// See comments on OWSDatabaseConnection.
|
||||
//
|
||||
@ -98,29 +125,18 @@ NSString *const TSStorageManagerExceptionName_CouldNotCreateDatabaseDirectory
|
||||
{
|
||||
OWSAssert(completion);
|
||||
|
||||
// Asynchronously register other extensions.
|
||||
//
|
||||
// All sync registrations must be done before all async registrations,
|
||||
// or the sync registrations will block on the async registrations.
|
||||
[TSDatabaseView asyncRegisterUnseenDatabaseView];
|
||||
[TSDatabaseView asyncRegisterThreadOutgoingMessagesDatabaseView];
|
||||
[TSDatabaseView asyncRegisterThreadSpecialMessagesDatabaseView];
|
||||
|
||||
// Register extensions which aren't essential for rendering threads async.
|
||||
[OWSIncomingMessageFinder asyncRegisterExtensionWithStorageManager:self];
|
||||
[TSDatabaseView asyncRegisterSecondaryDevicesDatabaseView];
|
||||
[OWSDisappearingMessagesFinder asyncRegisterDatabaseExtensions:self];
|
||||
[OWSFailedMessagesJob asyncRegisterDatabaseExtensionsWithStorageManager:self];
|
||||
[OWSFailedAttachmentDownloadsJob asyncRegisterDatabaseExtensionsWithStorageManager:self];
|
||||
runAsyncRegistrationsForStorage(self);
|
||||
|
||||
// Block until all async registrations are complete.
|
||||
[self.newDatabaseConnection asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
|
||||
OWSAssert(!self.areAsyncRegistrationsComplete);
|
||||
YapDatabaseConnection *dbConnection = self.newDatabaseConnection;
|
||||
[dbConnection flushTransactionsWithCompletionQueue:dispatch_get_main_queue()
|
||||
completionBlock:^{
|
||||
OWSAssert(!self.areAsyncRegistrationsComplete);
|
||||
|
||||
self.areAsyncRegistrationsComplete = YES;
|
||||
self.areAsyncRegistrationsComplete = YES;
|
||||
|
||||
completion();
|
||||
}];
|
||||
completion();
|
||||
}];
|
||||
}
|
||||
|
||||
+ (void)protectFiles
|
||||
@ -135,10 +151,6 @@ NSString *const TSStorageManagerExceptionName_CouldNotCreateDatabaseDirectory
|
||||
[OWSFileSystem protectFileOrFolderAtPath:self.sharedDataDatabaseDirPath];
|
||||
}
|
||||
|
||||
- (BOOL)userSetPassword {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
+ (NSString *)legacyDatabaseDirPath
|
||||
{
|
||||
return [OWSFileSystem appDocumentDirectoryPath];
|
||||
|
||||
Loading…
Reference in New Issue
Block a user