Merge branch 'charlesmchen/lazyRestoreVsBackupImport'

pull/1/head
Matthew Chen 7 years ago
commit 607620911e

@ -42,7 +42,7 @@ NSError *OWSBackupErrorWithDescription(NSString *description);
#pragma mark - Backup Export #pragma mark - Backup Export
@property (nonatomic, readonly) OWSBackupState backupExportState; @property (atomic, readonly) OWSBackupState backupExportState;
// If a "backup export" is in progress (see backupExportState), // If a "backup export" is in progress (see backupExportState),
// backupExportDescription _might_ contain a string that describes // backupExportDescription _might_ contain a string that describes
@ -65,7 +65,7 @@ NSError *OWSBackupErrorWithDescription(NSString *description);
#pragma mark - Backup Import #pragma mark - Backup Import
@property (nonatomic, readonly) OWSBackupState backupImportState; @property (atomic, readonly) OWSBackupState backupImportState;
// If a "backup import" is in progress (see backupImportState), // If a "backup import" is in progress (see backupImportState),
// backupImportDescription _might_ contain a string that describes // backupImportDescription _might_ contain a string that describes

@ -93,6 +93,9 @@ NSError *OWSBackupErrorWithDescription(NSString *description)
@property (nonatomic, nullable) NSString *backupImportDescription; @property (nonatomic, nullable) NSString *backupImportDescription;
@property (nonatomic, nullable) NSNumber *backupImportProgress; @property (nonatomic, nullable) NSNumber *backupImportProgress;
@property (atomic) OWSBackupState backupExportState;
@property (atomic) OWSBackupState backupImportState;
@end @end
#pragma mark - #pragma mark -
@ -116,8 +119,8 @@ NSError *OWSBackupErrorWithDescription(NSString *description)
return self; return self;
} }
_backupExportState = OWSBackupState_Idle; self.backupExportState = OWSBackupState_Idle;
_backupImportState = OWSBackupState_Idle; self.backupImportState = OWSBackupState_Idle;
OWSSingletonAssert(); OWSSingletonAssert();
@ -219,7 +222,7 @@ NSError *OWSBackupErrorWithDescription(NSString *description)
[self.backupImportJob cancel]; [self.backupImportJob cancel];
self.backupImportJob = nil; self.backupImportJob = nil;
_backupExportState = OWSBackupState_InProgress; self.backupExportState = OWSBackupState_InProgress;
self.backupExportJob = [[OWSBackupExportJob alloc] initWithDelegate:self recipientId:recipientId]; self.backupExportJob = [[OWSBackupExportJob alloc] initWithDelegate:self recipientId:recipientId];
[self.backupExportJob start]; [self.backupExportJob start];
@ -402,8 +405,8 @@ NSError *OWSBackupErrorWithDescription(NSString *description)
} }
} }
BOOL stateDidChange = _backupExportState != backupExportState; BOOL stateDidChange = self.backupExportState != backupExportState;
_backupExportState = backupExportState; self.backupExportState = backupExportState;
if (stateDidChange) { if (stateDidChange) {
[self postDidChangeNotification]; [self postDidChangeNotification];
} }
@ -526,7 +529,7 @@ NSError *OWSBackupErrorWithDescription(NSString *description)
[self.backupImportJob cancel]; [self.backupImportJob cancel];
self.backupImportJob = nil; self.backupImportJob = nil;
_backupImportState = OWSBackupState_InProgress; self.backupImportState = OWSBackupState_InProgress;
self.backupImportJob = [[OWSBackupImportJob alloc] initWithDelegate:self recipientId:recipientId]; self.backupImportJob = [[OWSBackupImportJob alloc] initWithDelegate:self recipientId:recipientId];
[self.backupImportJob start]; [self.backupImportJob start];
@ -539,7 +542,7 @@ NSError *OWSBackupErrorWithDescription(NSString *description)
[self.backupImportJob cancel]; [self.backupImportJob cancel];
self.backupImportJob = nil; self.backupImportJob = nil;
_backupImportState = OWSBackupState_Idle; self.backupImportState = OWSBackupState_Idle;
[self postDidChangeNotification]; [self postDidChangeNotification];
} }
@ -589,7 +592,7 @@ NSError *OWSBackupErrorWithDescription(NSString *description)
if (self.backupImportJob == backupJob) { if (self.backupImportJob == backupJob) {
self.backupImportJob = nil; self.backupImportJob = nil;
_backupImportState = OWSBackupState_Succeeded; self.backupImportState = OWSBackupState_Succeeded;
} else if (self.backupExportJob == backupJob) { } else if (self.backupExportJob == backupJob) {
self.backupExportJob = nil; self.backupExportJob = nil;
@ -613,7 +616,7 @@ NSError *OWSBackupErrorWithDescription(NSString *description)
if (self.backupImportJob == backupJob) { if (self.backupImportJob == backupJob) {
self.backupImportJob = nil; self.backupImportJob = nil;
_backupImportState = OWSBackupState_Failed; self.backupImportState = OWSBackupState_Failed;
} else if (self.backupExportJob == backupJob) { } else if (self.backupExportJob == backupJob) {
self.backupExportJob = nil; self.backupExportJob = nil;

@ -47,6 +47,12 @@ public class BackupLazyRestore: NSObject {
NotificationCenter.default.addObserver(forName: .reachabilityChanged, object: nil, queue: nil) { _ in NotificationCenter.default.addObserver(forName: .reachabilityChanged, object: nil, queue: nil) { _ in
self.runIfNecessary() self.runIfNecessary()
} }
NotificationCenter.default.addObserver(forName: .reachabilityChanged, object: nil, queue: nil) { _ in
self.runIfNecessary()
}
NotificationCenter.default.addObserver(forName: NSNotification.Name(NSNotificationNameBackupStateDidChange), object: nil, queue: nil) { _ in
self.runIfNecessary()
}
} }
// MARK: - // MARK: -
@ -62,6 +68,11 @@ public class BackupLazyRestore: NSObject {
runIfNecessary() runIfNecessary()
} }
@objc
public func isBackupImportInProgress() -> Bool {
return backup.backupImportState == .inProgress
}
@objc @objc
public func runIfNecessary() { public func runIfNecessary() {
AssertIsOnMainThread() AssertIsOnMainThread()
@ -72,6 +83,9 @@ public class BackupLazyRestore: NSObject {
guard tsAccountManager.isRegisteredAndReady() else { guard tsAccountManager.isRegisteredAndReady() else {
return return
} }
guard !isBackupImportInProgress() else {
return
}
guard !isRunning, !isComplete else { guard !isRunning, !isComplete else {
return return
} }
@ -106,6 +120,12 @@ public class BackupLazyRestore: NSObject {
} }
private func tryToRestoreNextAttachment(attachmentIds: [String], errorCount: UInt, backupIO: OWSBackupIO) { private func tryToRestoreNextAttachment(attachmentIds: [String], errorCount: UInt, backupIO: OWSBackupIO) {
guard !isBackupImportInProgress() else {
Logger.verbose("A backup import is in progress; abort.")
complete(errorCount: errorCount + 1)
return
}
var attachmentIdsCopy = attachmentIds var attachmentIdsCopy = attachmentIds
guard let attachmentId = attachmentIdsCopy.popLast() else { guard let attachmentId = attachmentIdsCopy.popLast() else {
// This job is done. // This job is done.

Loading…
Cancel
Save