|
|
@ -80,7 +80,7 @@ import CloudKit
|
|
|
|
// backups can reuse the same record.
|
|
|
|
// backups can reuse the same record.
|
|
|
|
@objc
|
|
|
|
@objc
|
|
|
|
public class func savePersistentFileOnceToCloud(fileId: String,
|
|
|
|
public class func savePersistentFileOnceToCloud(fileId: String,
|
|
|
|
fileUrlBlock: @escaping (()) -> URL?,
|
|
|
|
fileUrlBlock: @escaping () -> URL?,
|
|
|
|
success: @escaping (String) -> Void,
|
|
|
|
success: @escaping (String) -> Void,
|
|
|
|
failure: @escaping (Error) -> Void) {
|
|
|
|
failure: @escaping (Error) -> Void) {
|
|
|
|
saveFileOnceToCloud(recordName: recordNameForPersistentFile(fileId: fileId),
|
|
|
|
saveFileOnceToCloud(recordName: recordNameForPersistentFile(fileId: fileId),
|
|
|
@ -208,7 +208,7 @@ import CloudKit
|
|
|
|
@objc
|
|
|
|
@objc
|
|
|
|
public class func saveFileOnceToCloud(recordName: String,
|
|
|
|
public class func saveFileOnceToCloud(recordName: String,
|
|
|
|
recordType: String,
|
|
|
|
recordType: String,
|
|
|
|
fileUrlBlock: @escaping (()) -> URL?,
|
|
|
|
fileUrlBlock: @escaping () -> URL?,
|
|
|
|
success: @escaping (String) -> Void,
|
|
|
|
success: @escaping (String) -> Void,
|
|
|
|
failure: @escaping (Error) -> Void) {
|
|
|
|
failure: @escaping (Error) -> Void) {
|
|
|
|
|
|
|
|
|
|
|
@ -220,7 +220,7 @@ import CloudKit
|
|
|
|
success(recordName)
|
|
|
|
success(recordName)
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
// No record found, saving new record.
|
|
|
|
// No record found, saving new record.
|
|
|
|
guard let fileUrl = fileUrlBlock(()) else {
|
|
|
|
guard let fileUrl = fileUrlBlock() else {
|
|
|
|
Logger.error("\(self.logTag) error preparing file for upload.")
|
|
|
|
Logger.error("\(self.logTag) error preparing file for upload.")
|
|
|
|
failure(OWSErrorWithCodeDescription(.exportBackupError,
|
|
|
|
failure(OWSErrorWithCodeDescription(.exportBackupError,
|
|
|
|
NSLocalizedString("BACKUP_EXPORT_ERROR_SAVE_FILE_TO_CLOUD_FAILED",
|
|
|
|
NSLocalizedString("BACKUP_EXPORT_ERROR_SAVE_FILE_TO_CLOUD_FAILED",
|
|
|
@ -242,7 +242,7 @@ import CloudKit
|
|
|
|
|
|
|
|
|
|
|
|
@objc
|
|
|
|
@objc
|
|
|
|
public class func deleteRecordsFromCloud(recordNames: [String],
|
|
|
|
public class func deleteRecordsFromCloud(recordNames: [String],
|
|
|
|
success: @escaping (()) -> Void,
|
|
|
|
success: @escaping () -> Void,
|
|
|
|
failure: @escaping (Error) -> Void) {
|
|
|
|
failure: @escaping (Error) -> Void) {
|
|
|
|
deleteRecordsFromCloud(recordNames: recordNames,
|
|
|
|
deleteRecordsFromCloud(recordNames: recordNames,
|
|
|
|
remainingRetries: maxRetries,
|
|
|
|
remainingRetries: maxRetries,
|
|
|
@ -252,7 +252,7 @@ import CloudKit
|
|
|
|
|
|
|
|
|
|
|
|
private class func deleteRecordsFromCloud(recordNames: [String],
|
|
|
|
private class func deleteRecordsFromCloud(recordNames: [String],
|
|
|
|
remainingRetries: Int,
|
|
|
|
remainingRetries: Int,
|
|
|
|
success: @escaping (()) -> Void,
|
|
|
|
success: @escaping () -> Void,
|
|
|
|
failure: @escaping (Error) -> Void) {
|
|
|
|
failure: @escaping (Error) -> Void) {
|
|
|
|
|
|
|
|
|
|
|
|
let recordIDs = recordNames.map { CKRecordID(recordName: $0) }
|
|
|
|
let recordIDs = recordNames.map { CKRecordID(recordName: $0) }
|
|
|
@ -264,7 +264,7 @@ import CloudKit
|
|
|
|
label: "Delete Records")
|
|
|
|
label: "Delete Records")
|
|
|
|
switch outcome {
|
|
|
|
switch outcome {
|
|
|
|
case .success:
|
|
|
|
case .success:
|
|
|
|
success(())
|
|
|
|
success()
|
|
|
|
case .failureDoNotRetry(let outcomeError):
|
|
|
|
case .failureDoNotRetry(let outcomeError):
|
|
|
|
failure(outcomeError)
|
|
|
|
failure(outcomeError)
|
|
|
|
case .failureRetryAfterDelay(let retryDelay):
|
|
|
|
case .failureRetryAfterDelay(let retryDelay):
|
|
|
@ -466,7 +466,7 @@ import CloudKit
|
|
|
|
@objc
|
|
|
|
@objc
|
|
|
|
public class func downloadFileFromCloud(recordName: String,
|
|
|
|
public class func downloadFileFromCloud(recordName: String,
|
|
|
|
toFileUrl: URL,
|
|
|
|
toFileUrl: URL,
|
|
|
|
success: @escaping (()) -> Void,
|
|
|
|
success: @escaping () -> Void,
|
|
|
|
failure: @escaping (Error) -> Void) {
|
|
|
|
failure: @escaping (Error) -> Void) {
|
|
|
|
|
|
|
|
|
|
|
|
downloadFromCloud(recordName: recordName,
|
|
|
|
downloadFromCloud(recordName: recordName,
|
|
|
@ -475,7 +475,7 @@ import CloudKit
|
|
|
|
DispatchQueue.global().async {
|
|
|
|
DispatchQueue.global().async {
|
|
|
|
do {
|
|
|
|
do {
|
|
|
|
try FileManager.default.copyItem(at: asset.fileURL, to: toFileUrl)
|
|
|
|
try FileManager.default.copyItem(at: asset.fileURL, to: toFileUrl)
|
|
|
|
success(())
|
|
|
|
success()
|
|
|
|
} catch {
|
|
|
|
} catch {
|
|
|
|
Logger.error("\(self.logTag) couldn't copy asset file: \(error).")
|
|
|
|
Logger.error("\(self.logTag) couldn't copy asset file: \(error).")
|
|
|
|
failure(invalidServiceResponseError())
|
|
|
|
failure(invalidServiceResponseError())
|
|
|
|