mirror of https://github.com/oxen-io/session-ios
Incremental backup.
parent
ceba4e4e66
commit
792be8018f
@ -0,0 +1,37 @@
|
||||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
#import "OWSPrimaryStorage.h"
|
||||
#import "OWSStorage.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
// void runSyncRegistrationsForStorage(OWSStorage *storage);
|
||||
// void runAsyncRegistrationsForStorage(OWSStorage *storage);
|
||||
|
||||
@interface OWSBackupStorage : OWSStorage
|
||||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
|
||||
//+ (instancetype)sharedManager NS_SWIFT_NAME(shared());
|
||||
//
|
||||
- (YapDatabaseConnection *)dbConnection;
|
||||
//
|
||||
//+ (nullable NSError *)migrateToSharedData;
|
||||
//
|
||||
//+ (NSString *)databaseFilePath;
|
||||
//
|
||||
//+ (NSString *)legacyDatabaseFilePath;
|
||||
//+ (NSString *)legacyDatabaseFilePath_SHM;
|
||||
//+ (NSString *)legacyDatabaseFilePath_WAL;
|
||||
//+ (NSString *)sharedDataDatabaseFilePath;
|
||||
//+ (NSString *)sharedDataDatabaseFilePath_SHM;
|
||||
//+ (NSString *)sharedDataDatabaseFilePath_WAL;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
@ -0,0 +1,221 @@
|
||||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "OWSBackupStorage.h"
|
||||
|
||||
//#import "AppContext.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 "OWSStorage+Subclass.h"
|
||||
|
||||
//#import "TSDatabaseSecondaryIndexes.h"
|
||||
//#import "TSDatabaseView.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
NSString *const OWSBackupStorageExceptionName_CouldNotCreateDatabaseDirectory
|
||||
= @"OWSBackupStorageExceptionName_CouldNotCreateDatabaseDirectory";
|
||||
|
||||
#pragma mark -
|
||||
|
||||
@interface OWSBackupStorage ()
|
||||
|
||||
@property (nonatomic, readonly, nullable) YapDatabaseConnection *dbConnection;
|
||||
|
||||
@property (atomic) BOOL areAsyncRegistrationsComplete;
|
||||
@property (atomic) BOOL areSyncRegistrationsComplete;
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
|
||||
@implementation OWSBackupStorage
|
||||
|
||||
//+ (instancetype)sharedManager
|
||||
//{
|
||||
// static OWSBackupStorage *sharedManager = nil;
|
||||
// static dispatch_once_t onceToken;
|
||||
// dispatch_once(&onceToken, ^{
|
||||
// sharedManager = [[self alloc] initStorage];
|
||||
//
|
||||
//#if TARGET_OS_IPHONE
|
||||
// [OWSBackupStorage protectFiles];
|
||||
//#endif
|
||||
// });
|
||||
// return sharedManager;
|
||||
//}
|
||||
|
||||
- (instancetype)initStorage
|
||||
{
|
||||
self = [super initStorage];
|
||||
|
||||
if (self) {
|
||||
_dbConnection = self.newDatabaseConnection;
|
||||
|
||||
OWSSingletonAssert();
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)resetStorage
|
||||
{
|
||||
_dbConnection = nil;
|
||||
// _dbReadWriteConnection = nil;
|
||||
|
||||
[super resetStorage];
|
||||
}
|
||||
|
||||
- (void)runSyncRegistrations
|
||||
{
|
||||
runSyncRegistrationsForStorage(self);
|
||||
|
||||
// See comments on OWSDatabaseConnection.
|
||||
//
|
||||
// In the absence of finding documentation that can shed light on the issue we've been
|
||||
// seeing, this issue only seems to affect sync and not async registrations. We've always
|
||||
// been opening write transactions before the async registrations complete without negative
|
||||
// consequences.
|
||||
OWSAssert(!self.areSyncRegistrationsComplete);
|
||||
self.areSyncRegistrationsComplete = YES;
|
||||
}
|
||||
|
||||
- (void)runAsyncRegistrationsWithCompletion:(void (^_Nonnull)(void))completion
|
||||
{
|
||||
OWSAssert(completion);
|
||||
|
||||
runAsyncRegistrationsForStorage(self);
|
||||
|
||||
DDLogVerbose(@"%@ async registrations enqueued.", self.logTag);
|
||||
|
||||
// Block until all async registrations are complete.
|
||||
//
|
||||
// NOTE: This has to happen on the "registration connection" for this
|
||||
// database.
|
||||
YapDatabaseConnection *dbConnection = self.registrationConnection;
|
||||
OWSAssert(self.registrationConnection);
|
||||
[dbConnection flushTransactionsWithCompletionQueue:dispatch_get_main_queue()
|
||||
completionBlock:^{
|
||||
OWSAssert(!self.areAsyncRegistrationsComplete);
|
||||
|
||||
DDLogVerbose(@"%@ async registrations complete.", self.logTag);
|
||||
|
||||
self.areAsyncRegistrationsComplete = YES;
|
||||
|
||||
completion();
|
||||
}];
|
||||
}
|
||||
|
||||
+ (void)protectFiles
|
||||
{
|
||||
// TODO:
|
||||
|
||||
// DDLogInfo(
|
||||
// @"%@ Database file size: %@", self.logTag, [OWSFileSystem
|
||||
// fileSizeOfPath:self.sharedDataDatabaseFilePath]);
|
||||
// DDLogInfo(
|
||||
// @"%@ \t SHM file size: %@", self.logTag, [OWSFileSystem
|
||||
// fileSizeOfPath:self.sharedDataDatabaseFilePath_SHM]);
|
||||
// DDLogInfo(
|
||||
// @"%@ \t WAL file size: %@", self.logTag, [OWSFileSystem
|
||||
// fileSizeOfPath:self.sharedDataDatabaseFilePath_WAL]);
|
||||
//
|
||||
// // Protect the entire new database directory.
|
||||
// [OWSFileSystem protectFileOrFolderAtPath:self.sharedDataDatabaseDirPath];
|
||||
}
|
||||
|
||||
//+ (NSString *)legacyDatabaseDirPath
|
||||
//{
|
||||
// return [OWSFileSystem appDocumentDirectoryPath];
|
||||
//}
|
||||
//
|
||||
//+ (NSString *)sharedDataDatabaseDirPath
|
||||
//{
|
||||
// NSString *databaseDirPath = [[OWSFileSystem appSharedDataDirectoryPath]
|
||||
// stringByAppendingPathComponent:@"database"];
|
||||
//
|
||||
// if (![OWSFileSystem ensureDirectoryExists:databaseDirPath]) {
|
||||
// OWSRaiseException(
|
||||
// OWSBackupStorageExceptionName_CouldNotCreateDatabaseDirectory, @"Could not create new database
|
||||
// directory");
|
||||
// }
|
||||
// return databaseDirPath;
|
||||
//}
|
||||
|
||||
+ (NSString *)databaseFilename
|
||||
{
|
||||
return @"SignalBackup.sqlite";
|
||||
}
|
||||
|
||||
//+ (NSString *)databaseFilename_SHM
|
||||
//{
|
||||
// return [self.databaseFilename stringByAppendingString:@"-shm"];
|
||||
//}
|
||||
//
|
||||
//+ (NSString *)databaseFilename_WAL
|
||||
//{
|
||||
// return [self.databaseFilename stringByAppendingString:@"-wal"];
|
||||
//}
|
||||
//
|
||||
//+ (NSString *)legacyDatabaseFilePath
|
||||
//{
|
||||
// return [self.legacyDatabaseDirPath stringByAppendingPathComponent:self.databaseFilename];
|
||||
//}
|
||||
//
|
||||
//+ (NSString *)legacyDatabaseFilePath_SHM
|
||||
//{
|
||||
// return [self.legacyDatabaseDirPath stringByAppendingPathComponent:self.databaseFilename_SHM];
|
||||
//}
|
||||
//
|
||||
//+ (NSString *)legacyDatabaseFilePath_WAL
|
||||
//{
|
||||
// return [self.legacyDatabaseDirPath stringByAppendingPathComponent:self.databaseFilename_WAL];
|
||||
//}
|
||||
//
|
||||
//+ (NSString *)sharedDataDatabaseFilePath
|
||||
//{
|
||||
// return [self.sharedDataDatabaseDirPath stringByAppendingPathComponent:self.databaseFilename];
|
||||
//}
|
||||
//
|
||||
//+ (NSString *)sharedDataDatabaseFilePath_SHM
|
||||
//{
|
||||
// return [self.sharedDataDatabaseDirPath stringByAppendingPathComponent:self.databaseFilename_SHM];
|
||||
//}
|
||||
//
|
||||
//+ (NSString *)sharedDataDatabaseFilePath_WAL
|
||||
//{
|
||||
// return [self.sharedDataDatabaseDirPath stringByAppendingPathComponent:self.databaseFilename_WAL];
|
||||
//}
|
||||
|
||||
//+ (NSString *)databaseFilePath
|
||||
//{
|
||||
// DDLogVerbose(@"%@ databasePath: %@", self.logTag, OWSBackupStorage.sharedDataDatabaseFilePath);
|
||||
//
|
||||
// return self.sharedDataDatabaseFilePath;
|
||||
//}
|
||||
//
|
||||
//- (NSString *)databaseFilePath
|
||||
//{
|
||||
// return OWSBackupStorage.databaseFilePath;
|
||||
//}
|
||||
|
||||
//+ (YapDatabaseConnection *)dbReadConnection
|
||||
//{
|
||||
// return OWSBackupStorage.sharedManager.dbReadConnection;
|
||||
//}
|
||||
//
|
||||
//+ (YapDatabaseConnection *)dbReadWriteConnection
|
||||
//{
|
||||
// return OWSBackupStorage.sharedManager.dbReadWriteConnection;
|
||||
//}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
Loading…
Reference in New Issue