Pull out OWSStorage base class for TSStorageManager.

This commit is contained in:
Matthew Chen 2017-12-18 18:05:27 -05:00
parent a29c4ce5d6
commit 137fe6fb8b
17 changed files with 112 additions and 130 deletions

View File

@ -914,10 +914,10 @@ typedef NS_ENUM(NSInteger, CellState) { kArchiveState, kInboxState };
- (YapDatabaseConnection *)uiDatabaseConnection
{
NSAssert([NSThread isMainThread], @"Must access uiDatabaseConnection on main thread!");
OWSAssert([NSThread isMainThread]);
if (!_uiDatabaseConnection) {
YapDatabase *database = TSStorageManager.sharedManager.database;
_uiDatabaseConnection = [database newConnection];
_uiDatabaseConnection = [TSStorageManager.sharedManager newDatabaseConnection];
[_uiDatabaseConnection beginLongLivedReadTransaction];
}
return _uiDatabaseConnection;

View File

@ -5,7 +5,7 @@
NS_ASSUME_NONNULL_BEGIN
@class OWSSignalServiceProtosEnvelope;
@class YapDatabase;
@class TSStorageManager;
// 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:(YapDatabase *)database;
+ (void)syncRegisterDatabaseExtension:(TSStorageManager *)storageManager;
- (void)enqueueEnvelopeData:(NSData *)envelopeData plaintextData:(NSData *_Nullable)plaintextData;
- (void)handleAnyUnprocessedEnvelopesAsync;

View File

@ -199,15 +199,15 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
}
+ (void)syncRegisterDatabaseExtension:(YapDatabase *)database
+ (void)syncRegisterDatabaseExtension:(TSStorageManager *)storageManager
{
YapDatabaseView *existingView = [database registeredExtension:OWSMessageContentJobFinderExtensionName];
YapDatabaseView *existingView = [storageManager registeredExtension:OWSMessageContentJobFinderExtensionName];
if (existingView) {
OWSFail(@"%@ was already initialized.", OWSMessageContentJobFinderExtensionName);
// already initialized
return;
}
[database registerExtension:[self databaseExtension] withName:OWSMessageContentJobFinderExtensionName];
[storageManager registerExtension:[self databaseExtension] withName:OWSMessageContentJobFinderExtensionName];
}
#pragma mark Logging
@ -422,7 +422,7 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
- (instancetype)initDefault
{
// For concurrency coherency we use the same dbConnection to persist and read the unprocessed envelopes
YapDatabaseConnection *dbConnection = [[TSStorageManager sharedManager].database newConnection];
YapDatabaseConnection *dbConnection = [[TSStorageManager sharedManager] newDatabaseConnection];
OWSMessageManager *messagesManager = [OWSMessageManager sharedManager];
TSStorageManager *storageManager = [TSStorageManager sharedManager];
@ -443,9 +443,9 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
#pragma mark - class methods
+ (void)syncRegisterDatabaseExtension:(YapDatabase *)database
+ (void)syncRegisterDatabaseExtension:(TSStorageManager *)storageManager
{
[OWSMessageContentJobFinder syncRegisterDatabaseExtension:database];
[OWSMessageContentJobFinder syncRegisterDatabaseExtension:storageManager];
}
#pragma mark - instance methods

View File

@ -191,21 +191,21 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess
// Useful for tests, don't use in app startup path because it's slow.
+ (void)blockingRegisterDatabaseExtensions:(TSStorageManager *)storageManager
{
[storageManager.database registerExtension:[self indexDatabaseExtension]
withName:OWSDisappearingMessageFinderExpiresAtIndex];
[storageManager registerExtension:[self indexDatabaseExtension]
withName:OWSDisappearingMessageFinderExpiresAtIndex];
}
+ (void)asyncRegisterDatabaseExtensions:(TSStorageManager *)storageManager
{
[storageManager.database 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);
}
}];
[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);
}
}];
}
@end

View File

@ -121,21 +121,21 @@ static NSString *const OWSFailedAttachmentDownloadsJobAttachmentStateIndex = @"i
// Useful for tests, don't use in app startup path because it's slow.
- (void)blockingRegisterDatabaseExtensions
{
[self.storageManager.database registerExtension:[self indexDatabaseExtension]
withName:OWSFailedAttachmentDownloadsJobAttachmentStateIndex];
[self.storageManager registerExtension:[self indexDatabaseExtension]
withName:OWSFailedAttachmentDownloadsJobAttachmentStateIndex];
}
- (void)asyncRegisterDatabaseExtensions
{
[self.storageManager.database 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);
}
}];
[self.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);
}
}];
}
@end

View File

@ -130,21 +130,21 @@ static NSString *const OWSFailedMessagesJobMessageStateIndex = @"index_outoing_m
// Useful for tests, don't use in app startup path because it's slow.
- (void)blockingRegisterDatabaseExtensions
{
[self.storageManager.database registerExtension:[self indexDatabaseExtension]
withName:OWSFailedMessagesJobMessageStateIndex];
[self.storageManager registerExtension:[self indexDatabaseExtension]
withName:OWSFailedMessagesJobMessageStateIndex];
}
- (void)asyncRegisterDatabaseExtensions
{
[self.storageManager.database 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);
}
}];
[self.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);
}
}];
}
@end

View File

@ -109,7 +109,7 @@ NS_ASSUME_NONNULL_BEGIN
_messageSender = messageSender;
_dbConnection = storageManager.newDatabaseConnection;
_incomingMessageFinder = [[OWSIncomingMessageFinder alloc] initWithDatabase:storageManager.database];
_incomingMessageFinder = [[OWSIncomingMessageFinder alloc] initWithStorageManager:storageManager];
_blockingManager = [OWSBlockingManager sharedManager];
OWSSingletonAssert();

View File

@ -5,7 +5,7 @@
NS_ASSUME_NONNULL_BEGIN
@class OWSSignalServiceProtosEnvelope;
@class YapDatabase;
@class TSStorageManager;
// 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:(YapDatabase *)database;
+ (void)syncRegisterDatabaseExtension:(TSStorageManager *)storageManager;
- (void)handleReceivedEnvelope:(OWSSignalServiceProtosEnvelope *)envelope;
- (void)handleAnyUnprocessedEnvelopesAsync;

View File

@ -189,17 +189,17 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin
});
}
+ (void)syncRegisterDatabaseExtension:(YapDatabase *)database
+ (void)syncRegisterDatabaseExtension:(TSStorageManager *)storageManager
{
[self registerLegacyClasses];
YapDatabaseView *existingView = [database registeredExtension:OWSMessageDecryptJobFinderExtensionName];
YapDatabaseView *existingView = [storageManager registeredExtension:OWSMessageDecryptJobFinderExtensionName];
if (existingView) {
OWSFail(@"%@ was already initialized.", OWSMessageDecryptJobFinderExtensionName);
// already initialized
return;
}
[database registerExtension:[self databaseExtension] withName:OWSMessageDecryptJobFinderExtensionName];
[storageManager registerExtension:[self databaseExtension] withName:OWSMessageDecryptJobFinderExtensionName];
}
@end
@ -399,7 +399,7 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin
- (instancetype)initDefault
{
// For concurrency coherency we use the same dbConnection to persist and read the unprocessed envelopes
YapDatabaseConnection *dbConnection = [[TSStorageManager sharedManager].database newConnection];
YapDatabaseConnection *dbConnection = [[TSStorageManager sharedManager] newDatabaseConnection];
OWSMessageDecrypter *messageDecrypter = [OWSMessageDecrypter sharedManager];
OWSBatchMessageProcessor *batchMessageProcessor = [OWSBatchMessageProcessor sharedInstance];
@ -422,9 +422,9 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin
#pragma mark - class methods
+ (void)syncRegisterDatabaseExtension:(YapDatabase *)database
+ (void)syncRegisterDatabaseExtension:(TSStorageManager *)storageManager
{
[OWSMessageDecryptJobFinder syncRegisterDatabaseExtension:database];
[OWSMessageDecryptJobFinder syncRegisterDatabaseExtension:storageManager];
}
#pragma mark - instance methods

View File

@ -4,12 +4,12 @@
NS_ASSUME_NONNULL_BEGIN
@class YapDatabase;
@class TSStorageManager;
@class YapDatabaseReadTransaction;
@interface OWSIncomingMessageFinder : NSObject
- (instancetype)initWithDatabase:(YapDatabase *)database NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithStorageManager:(TSStorageManager *)storageManager NS_DESIGNATED_INITIALIZER;
/**
* Must be called before using this finder.

View File

@ -18,7 +18,7 @@ NSString *const OWSIncomingMessageFinderColumnSourceDeviceId = @"OWSIncomingMess
@interface OWSIncomingMessageFinder ()
@property (nonatomic, readonly) YapDatabase *database;
@property (nonatomic, readonly) TSStorageManager *storageManager;
@property (nonatomic, readonly) YapDatabaseConnection *dbConnection;
@end
@ -31,19 +31,19 @@ NSString *const OWSIncomingMessageFinderColumnSourceDeviceId = @"OWSIncomingMess
- (instancetype)init
{
OWSAssert([TSStorageManager sharedManager].database != nil);
OWSAssert([TSStorageManager sharedManager]);
return [self initWithDatabase:[TSStorageManager sharedManager].database];
return [self initWithStorageManager:[TSStorageManager sharedManager]];
}
- (instancetype)initWithDatabase:(YapDatabase *)database
- (instancetype)initWithStorageManager:(TSStorageManager *)storageManager
{
self = [super init];
if (!self) {
return self;
}
_database = database;
_storageManager = storageManager;
return self;
}
@ -54,7 +54,7 @@ NSString *const OWSIncomingMessageFinderColumnSourceDeviceId = @"OWSIncomingMess
{
@synchronized (self) {
if (!_dbConnection) {
_dbConnection = self.database.newConnection;
_dbConnection = [self.storageManager newDatabaseConnection];
}
}
return _dbConnection;
@ -95,18 +95,18 @@ NSString *const OWSIncomingMessageFinderColumnSourceDeviceId = @"OWSIncomingMess
- (void)asyncRegisterExtension
{
DDLogInfo(@"%@ registering async.", self.logTag);
[self.database asyncRegisterExtension:self.indexExtension
withName:OWSIncomingMessageFinderExtensionName
completionBlock:^(BOOL ready) {
DDLogInfo(@"%@ finished registering async.", self.logTag);
}];
[self.storageManager 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.
- (void)registerExtension
{
DDLogError(@"%@ registering SYNC. We should prefer async when possible.", self.logTag);
[self.database registerExtension:self.indexExtension withName:OWSIncomingMessageFinderExtensionName];
[self.storageManager registerExtension:self.indexExtension withName:OWSIncomingMessageFinderExtensionName];
}
#pragma mark - instance methods
@ -116,7 +116,7 @@ NSString *const OWSIncomingMessageFinderColumnSourceDeviceId = @"OWSIncomingMess
sourceDeviceId:(uint32_t)sourceDeviceId
transaction:(YapDatabaseReadTransaction *)transaction
{
if (![self.database registeredExtension:OWSIncomingMessageFinderExtensionName]) {
if (![self.storageManager registeredExtension:OWSIncomingMessageFinderExtensionName]) {
OWSFail(@"%@ in %s but extension is not registered", self.logTag, __PRETTY_FUNCTION__);
// we should be initializing this at startup rather than have an unexpectedly slow lazy setup at random.

View File

@ -4,12 +4,6 @@
#import <YapDatabase/YapDatabaseConnection.h>
// TODO: Remove this import.
#import "YapDatabaseConnection+OWS.h"
// TODO: Remove this import.
#import <YapDatabase/YapDatabase.h>
NS_ASSUME_NONNULL_BEGIN
@protocol OWSDatabaseConnectionDelegate <NSObject>
@ -20,6 +14,8 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark -
@class YapDatabaseExtension;
@interface OWSStorage : NSObject
- (instancetype)init NS_UNAVAILABLE;
@ -36,6 +32,12 @@ NS_ASSUME_NONNULL_BEGIN
@property (nullable, nonatomic, readonly) YapDatabaseConnection *dbReadConnection;
@property (nullable, nonatomic, readonly) YapDatabaseConnection *dbReadWriteConnection;
- (BOOL)registerExtension:(YapDatabaseExtension *)extension withName:(NSString *)extensionName;
- (void)asyncRegisterExtension:(YapDatabaseExtension *)extension
withName:(NSString *)extensionName
completionBlock:(nullable void (^)(BOOL ready))completionBlock;
- (nullable id)registeredExtension:(NSString *)extensionName;
#pragma mark - Password
/**

View File

@ -5,28 +5,11 @@
#import "OWSStorage.h"
#import "AppContext.h"
#import "NSData+Base64.h"
//#import "OWSAnalytics.h"
//#import "OWSBatchMessageProcessor.h"
//#import "OWSDisappearingMessagesFinder.h"
//#import "OWSFailedAttachmentDownloadsJob.h"
//#import "OWSFailedMessagesJob.h"
//#import "OWSFileSystem.h"
//#import "OWSIncomingMessageFinder.h"
//#import "OWSMessageReceiver.h"
//#import "SignalRecipient.h"
#import "TSAttachmentStream.h"
//#import "TSDatabaseSecondaryIndexes.h"
//#import "TSDatabaseView.h"
//#import "TSInteraction.h"
//#import "TSThread.h"
#import "TSStorageManager.h"
#import <Curve25519Kit/Randomness.h>
#import <SAMKeychain/SAMKeychain.h>
//#import <YapDatabase/YapDatabaseRelationship.h>
NS_ASSUME_NONNULL_BEGIN
NSString *const OWSStorageExceptionName_DatabasePasswordInaccessibleWhileBackgrounded
@ -34,10 +17,6 @@ NSString *const OWSStorageExceptionName_DatabasePasswordInaccessibleWhileBackgro
NSString *const OWSStorageExceptionName_DatabasePasswordUnwritable
= @"OWSStorageExceptionName_DatabasePasswordUnwritable";
NSString *const OWSStorageExceptionName_NoDatabase = @"OWSStorageExceptionName_NoDatabase";
// NSString *const OWSStorageExceptionName_CouldNotMoveDatabaseFile
// = @"OWSStorageExceptionName_CouldNotMoveDatabaseFile";
// NSString *const OWSStorageExceptionName_CouldNotCreateDatabaseDirectory
// = @"OWSStorageExceptionName_CouldNotCreateDatabaseDirectory";
static NSString *keychainService = @"TSKeyChainService";
static NSString *keychainDBPassAccount = @"TSDatabasePass";
@ -145,7 +124,7 @@ static NSString *keychainDBPassAccount = @"TSDatabasePass";
- (instancetype)init NS_UNAVAILABLE;
- (id)initWithPath:(NSString *)inPath
serializer:(YapDatabaseSerializer)inSerializer
serializer:(nullable YapDatabaseSerializer)inSerializer
deserializer:(YapDatabaseDeserializer)inDeserializer
options:(YapDatabaseOptions *)inOptions
delegate:(id<OWSDatabaseConnectionDelegate>)delegate NS_DESIGNATED_INITIALIZER;
@ -157,7 +136,7 @@ static NSString *keychainDBPassAccount = @"TSDatabasePass";
@implementation OWSDatabase
- (id)initWithPath:(NSString *)inPath
serializer:(YapDatabaseSerializer)inSerializer
serializer:(nullable YapDatabaseSerializer)inSerializer
deserializer:(YapDatabaseDeserializer)inDeserializer
options:(YapDatabaseOptions *)inOptions
delegate:(id<OWSDatabaseConnectionDelegate>)delegate
@ -304,7 +283,7 @@ static NSString *keychainDBPassAccount = @"TSDatabasePass";
options.enableMultiProcessSupport = YES;
OWSDatabase *database = [[OWSDatabase alloc] initWithPath:[self dbPath]
serializer:NULL
serializer:nil
deserializer:[[self class] logOnFailureDeserializer]
options:options
delegate:self];
@ -344,23 +323,28 @@ static NSString *keychainDBPassAccount = @"TSDatabasePass";
};
}
//+ (void)protectSignalFiles
//{
// // The old database location was in the Document directory,
// // so protect the database files individually.
// [OWSFileSystem protectFolderAtPath:self.legacyDatabaseFilePath];
// [OWSFileSystem protectFolderAtPath:self.legacyDatabaseFilePath_SHM];
// [OWSFileSystem protectFolderAtPath:self.legacyDatabaseFilePath_WAL];
//
// // Protect the entire new database directory.
// [OWSFileSystem protectFolderAtPath:self.sharedDataDatabaseDirPath];
//}
- (nullable YapDatabaseConnection *)newDatabaseConnection
{
return self.database.newConnection;
}
- (BOOL)registerExtension:(YapDatabaseExtension *)extension withName:(NSString *)extensionName
{
return [self.database registerExtension:extension withName:extensionName];
}
- (void)asyncRegisterExtension:(YapDatabaseExtension *)extension
withName:(NSString *)extensionName
completionBlock:(nullable void (^)(BOOL ready))completionBlock
{
[self.database asyncRegisterExtension:extension withName:extensionName completionBlock:completionBlock];
}
- (nullable id)registeredExtension:(NSString *)extensionName
{
return [self.database registeredExtension:extensionName];
}
#pragma mark - Password
- (void)deleteDatabaseFile

View File

@ -95,7 +95,7 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
// so long as they don't conflict with any other extension names.
YapDatabaseExtension *extension =
[[YapDatabaseCrossProcessNotification alloc] initWithIdentifier:@"SignalCrossProcessNotifier"];
[[TSStorageManager sharedManager].database registerExtension:extension withName:@"SignalCrossProcessNotifier"];
[[TSStorageManager sharedManager] registerExtension:extension withName:@"SignalCrossProcessNotifier"];
}
+ (void)registerMessageDatabaseViewWithName:(NSString *)viewName
@ -107,7 +107,7 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
OWSAssert(viewName.length > 0);
OWSAssert((viewGrouping));
YapDatabaseView *existingView = [[TSStorageManager sharedManager].database registeredExtension:viewName];
YapDatabaseView *existingView = [[TSStorageManager sharedManager] registeredExtension:viewName];
if (existingView) {
OWSFail(@"Registered database view twice: %@", viewName);
return;
@ -126,7 +126,7 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
options:options];
if (async) {
[[TSStorageManager sharedManager].database
[[TSStorageManager sharedManager]
asyncRegisterExtension:view
withName:viewName
completionBlock:^(BOOL ready) {
@ -135,7 +135,7 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
DDLogInfo(@"%@ asyncRegisterExtension: %@ -> %d", self.logTag, viewName, ready);
}];
} else {
[[TSStorageManager sharedManager].database registerExtension:view withName:viewName];
[[TSStorageManager sharedManager] registerExtension:view withName:viewName];
}
}
@ -239,7 +239,7 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
+ (void)registerThreadDatabaseView
{
YapDatabaseView *threadView =
[[TSStorageManager sharedManager].database registeredExtension:TSThreadDatabaseViewExtensionName];
[[TSStorageManager sharedManager] registeredExtension:TSThreadDatabaseViewExtensionName];
if (threadView) {
OWSFail(@"Registered database view twice: %@", TSThreadDatabaseViewExtensionName);
return;
@ -285,8 +285,7 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
YapDatabaseView *databaseView =
[[YapDatabaseAutoView alloc] initWithGrouping:viewGrouping sorting:viewSorting versionTag:@"3" options:options];
[[TSStorageManager sharedManager].database registerExtension:databaseView
withName:TSThreadDatabaseViewExtensionName];
[[TSStorageManager sharedManager] registerExtension:databaseView withName:TSThreadDatabaseViewExtensionName];
}
/**
@ -399,7 +398,7 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
YapDatabaseView *view =
[[YapDatabaseAutoView alloc] initWithGrouping:viewGrouping sorting:viewSorting versionTag:@"3" options:options];
[[TSStorageManager sharedManager].database
[[TSStorageManager sharedManager]
asyncRegisterExtension:view
withName:TSSecondaryDevicesDatabaseViewExtensionName
completionBlock:^(BOOL ready) {

View File

@ -5,7 +5,6 @@
#import "OWSStorage.h"
#import "TSStorageKeys.h"
#import "YapDatabaseConnection+OWS.h"
#import <YapDatabase/YapDatabase.h>
@class ECKeyPair;
@class PreKeyRecord;
@ -31,8 +30,6 @@ NS_ASSUME_NONNULL_BEGIN
- (void)deleteThreadsAndMessages;
- (nullable YapDatabase *)database;
// TODO: Deprecate.
+ (YapDatabaseConnection *)dbReadConnection;
+ (YapDatabaseConnection *)dbReadWriteConnection;

View File

@ -34,11 +34,11 @@ NSString *const TSStorageManagerExceptionName_CouldNotCreateDatabaseDirectory
static TSStorageManager *sharedManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
#if TARGET_OS_IPHONE
[TSStorageManager protectSignalFiles];
#endif
sharedManager = [[self alloc] initStorage];
#if TARGET_OS_IPHONE
[TSStorageManager protectFiles];
#endif
});
return sharedManager;
}
@ -50,9 +50,9 @@ NSString *const TSStorageManagerExceptionName_CouldNotCreateDatabaseDirectory
[TSDatabaseView registerThreadInteractionsDatabaseView];
[TSDatabaseView registerThreadDatabaseView];
[TSDatabaseView registerUnreadDatabaseView];
[self.database registerExtension:[TSDatabaseSecondaryIndexes registerTimeStampIndex] withName:@"idx"];
[OWSMessageReceiver syncRegisterDatabaseExtension:self.database];
[OWSBatchMessageProcessor syncRegisterDatabaseExtension:self.database];
[self registerExtension:[TSDatabaseSecondaryIndexes registerTimeStampIndex] withName:@"idx"];
[OWSMessageReceiver syncRegisterDatabaseExtension:self];
[OWSBatchMessageProcessor syncRegisterDatabaseExtension:self];
// See comments on OWSDatabaseConnection.
//
@ -94,7 +94,7 @@ NSString *const TSStorageManagerExceptionName_CouldNotCreateDatabaseDirectory
[TSDatabaseView asyncRegistrationCompletion];
}
+ (void)protectSignalFiles
+ (void)protectFiles
{
// The old database location was in the Document directory,
// so protect the database files individually.

View File

@ -8,7 +8,7 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Logging
@property (nonatomic) NSString *logTag;
@property (nonatomic, readonly) NSString *logTag;
+ (NSString *)logTag;