Stop lazy attachment restore during backup import.

pull/1/head
Matthew Chen 7 years ago
parent cafc732dcb
commit e45b27bb28

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

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

@ -47,6 +47,12 @@ public class BackupLazyRestore: NSObject {
NotificationCenter.default.addObserver(forName: .reachabilityChanged, object: nil, queue: nil) { _ in
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: -
@ -71,6 +77,11 @@ public class BackupLazyRestore: NSObject {
runIfNecessary()
}
@objc
public func isBackupImportInProgress() -> Bool {
return backup.backupImportState == .inProgress
}
@objc
public func runIfNecessary() {
AssertIsOnMainThread()
@ -81,6 +92,9 @@ public class BackupLazyRestore: NSObject {
guard tsAccountManager.isRegisteredAndReady() else {
return
}
guard !isBackupImportInProgress() else {
return
}
guard !isRunning, !isComplete else {
return
}
@ -115,6 +129,12 @@ public class BackupLazyRestore: NSObject {
}
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
guard let attachmentId = attachmentIdsCopy.popLast() else {
// This job is done.

Loading…
Cancel
Save