Restore key backup in background after complete security

We were blocking the complete security flow on waiting for a key backup restore
to complete, which could take multiple minutes with no visible progress.

Fixes https://github.com/vector-im/riot-web/issues/12426
pull/21833/head
J. Ryan Stinnett 2020-03-16 19:00:13 +00:00
parent f5f433b347
commit c245c6932c
1 changed files with 24 additions and 3 deletions

View File

@ -63,9 +63,30 @@ export default class CompleteSecurity extends React.Component {
const backupInfo = await cli.getKeyBackupVersion();
this.setState({backupInfo});
await accessSecretStorage(async () => {
// The control flow is fairly twisted here...
// For the purposes of completing security, we only wait on getting
// as far as the trust check and then show a green shield.
// We also begin the key backup restore as well, which we're
// awaiting inside `accessSecretStorage` only so that it keeps your
// passphase cached for that work. This dialog itself will only wait
// on the first trust check, and the key backup restore will happen
// in the background.
await new Promise((resolve, reject) => {
try {
accessSecretStorage(async () => {
await cli.checkOwnCrossSigningTrust();
if (backupInfo) await cli.restoreKeyBackupWithSecretStorage(backupInfo);
resolve();
if (backupInfo) {
// A complete restore can take many minutes for large
// accounts / slow servers, so we allow the dialog
// to advance before this.
await cli.restoreKeyBackupWithSecretStorage(backupInfo);
}
});
} catch (e) {
console.error(e);
reject(e);
}
});
if (cli.getCrossSigningId()) {