From f9e61fee3e93172032b95d36736a047b7096fa30 Mon Sep 17 00:00:00 2001 From: Pete Walters Date: Tue, 30 Apr 2024 19:31:41 -0500 Subject: [PATCH] Support local and remote backup destinations --- .../InternalSettingsViewController.swift | 44 +++++++++++++++---- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/Signal/src/ViewControllers/AppSettings/Internal/InternalSettingsViewController.swift b/Signal/src/ViewControllers/AppSettings/Internal/InternalSettingsViewController.swift index e80171df94..26b9b56acb 100644 --- a/Signal/src/ViewControllers/AppSettings/Internal/InternalSettingsViewController.swift +++ b/Signal/src/ViewControllers/AppSettings/Internal/InternalSettingsViewController.swift @@ -204,16 +204,44 @@ private extension InternalSettingsViewController { ) { modal in Task { do { - let fileUrl = try await DependenciesBridge.shared.messageBackupManager.createBackup(localIdentifiers: localIdentifiers).fileUrl + let metadata = try await DependenciesBridge.shared.messageBackupManager.createBackup(localIdentifiers: localIdentifiers) await MainActor.run { - modal.dismiss() + let actionSheet = ActionSheetController(title: "Choose backup destination:") - let activityVC = UIActivityViewController( - activityItems: [fileUrl], - applicationActivities: nil - ) - activityVC.popoverPresentationController?.sourceView = self.view - self.present(activityVC, animated: true) + let localFileAction = ActionSheetAction(title: "Local device") { _ in + let activityVC = UIActivityViewController( + activityItems: [metadata.fileUrl], + applicationActivities: nil + ) + let vc = UIApplication.shared.frontmostViewController! + activityVC.popoverPresentationController?.sourceView = vc.view + activityVC.completionWithItemsHandler = { _, _, _, _ in + modal.dismiss() + } + vc.present(activityVC, animated: true) + } + actionSheet.addAction(localFileAction) + + let remoteFileAction = ActionSheetAction(title: "Remote server") { _ in + Task { @MainActor in + let vc = UIApplication.shared.frontmostViewController! + do { + _ = try await DependenciesBridge.shared.messageBackupManager.uploadBackup( + metadata: metadata, + localIdentifiers: localIdentifiers, + auth: .implicit() + ) + vc.presentToast(text: "Success!") + } catch { + vc.presentToast(text: "Failed! \(error.localizedDescription)") + } + modal.dismiss() + } + } + actionSheet.addAction(remoteFileAction) + + let vc = UIApplication.shared.frontmostViewController! + vc.presentActionSheet(actionSheet) } } catch { owsFailDebug("Failed to create backup!")