From 9d1c73348c4b9038f8b82b3a1842cf85afcb58b0 Mon Sep 17 00:00:00 2001 From: Zoe Date: Mon, 27 Apr 2020 16:58:24 +0100 Subject: [PATCH] Show progress when loading keys --- .../keybackup/RestoreKeyBackupDialog.js | 25 ++++++++++++++++++- src/i18n/strings/en_EN.json | 3 +++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js b/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js index dc82a71713..92d23f9e65 100644 --- a/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js +++ b/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js @@ -59,6 +59,7 @@ export default class RestoreKeyBackupDialog extends React.PureComponent { forceRecoveryKey: false, passPhrase: '', restoreType: null, + progress: { stage: "prefetch" }, }; } @@ -80,6 +81,12 @@ export default class RestoreKeyBackupDialog extends React.PureComponent { }); } + _progressCallback = (data) => { + this.setState({ + progress: data, + }); + } + _onResetRecoveryClick = () => { this.props.onFinished(false); Modal.createTrackedDialogAsync('Key Backup', 'Key Backup', @@ -110,6 +117,7 @@ export default class RestoreKeyBackupDialog extends React.PureComponent { // is the right one and restoring it is currently the only way we can do this. const recoverInfo = await MatrixClientPeg.get().restoreKeyBackupWithPassword( this.state.passPhrase, undefined, undefined, this.state.backupInfo, + { progressCallback: this._progressCallback }, ); if (this.props.keyCallback) { const key = await MatrixClientPeg.get().keyBackupKeyFromPassword( @@ -146,6 +154,7 @@ export default class RestoreKeyBackupDialog extends React.PureComponent { try { const recoverInfo = await MatrixClientPeg.get().restoreKeyBackupWithRecoveryKey( this.state.recoveryKey, undefined, undefined, this.state.backupInfo, + { progressCallback: this._progressCallback }, ); if (this.props.keyCallback) { const key = MatrixClientPeg.get().keyBackupKeyFromRecoveryKey(this.state.recoveryKey); @@ -185,6 +194,7 @@ export default class RestoreKeyBackupDialog extends React.PureComponent { const recoverInfo = await accessSecretStorage(async () => { return MatrixClientPeg.get().restoreKeyBackupWithSecretStorage( this.state.backupInfo, + { progressCallback: this._progressCallback }, ); }); this.setState({ @@ -207,6 +217,7 @@ export default class RestoreKeyBackupDialog extends React.PureComponent { undefined, /* targetRoomId */ undefined, /* targetSessionId */ backupInfo, + { progressCallback: this._progressCallback }, ); this.setState({ recoverInfo, @@ -273,7 +284,19 @@ export default class RestoreKeyBackupDialog extends React.PureComponent { let title; if (this.state.loading) { title = _t("Loading..."); - content = ; + let details; + if (this.state.progress.stage === "fetch") { + details = _t("Downloading from server..."); + } else if (this.state.progress.stage === "load_keys") { + const { total, successes, failures } = this.state.progress; + details = _t("Loaded %(completed)s of %(total)s", { total, completed: successes + failures }); + } else if (this.state.progress.stage === "prefetch") { + details = _t("Requesting from server..."); + } + content =
+
{details}
+ +
; } else if (this.state.loadError) { title = _t("Error"); content = _t("Unable to load backup status"); diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index bd4c8f58c8..ff9e5957d5 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1791,6 +1791,9 @@ "Not a valid recovery key": "Not a valid recovery key", "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.", "If you've forgotten your recovery key you can .": "If you've forgotten your recovery key you can .", + "Downloading from server": "Downloading from server", + "Loaded %(completed)s of %(total)s": "Loaded %(completed)s of %(total)s", + "Requesting from server...": "Requesting from server...", "Unable to load backup status": "Unable to load backup status", "Recovery key mismatch": "Recovery key mismatch", "Backup could not be decrypted with this recovery key: please verify that you entered the correct recovery key.": "Backup could not be decrypted with this recovery key: please verify that you entered the correct recovery key.",