diff --git a/_locales/en/messages.json b/_locales/en/messages.json
index 48a196fb25..b6c88d7e3e 100644
--- a/_locales/en/messages.json
+++ b/_locales/en/messages.json
@@ -800,6 +800,10 @@
"messageformat": "Failed to send message with endorsements",
"description": "An error popup when we attempted and failed to send a message using endorsements, only for internal users."
},
+ "icu:Toast--FailedToImportBackup": {
+ "messageformat": "Failed to process some frames during backup import. Please share your logs.",
+ "description": "[Only shown to internal users] An error popup when we failed to process some parts of a backup import."
+ },
"icu:cannotSelectPhotosAndVideosAlongWithFiles": {
"messageformat": "You can't select photos and videos along with files.",
"description": "An error popup when the user has attempted to add an attachment"
diff --git a/stylesheets/components/InstallScreenBackupImportStep.scss b/stylesheets/components/InstallScreenBackupImportStep.scss
index 2c22706e22..8e1def945b 100644
--- a/stylesheets/components/InstallScreenBackupImportStep.scss
+++ b/stylesheets/components/InstallScreenBackupImportStep.scss
@@ -17,7 +17,7 @@
flex-direction: column;
justify-content: center;
text-align: center;
- margin-top: 72px;
+ margin-top: 84px;
flex: 1;
}
diff --git a/ts/components/ToastManager.stories.tsx b/ts/components/ToastManager.stories.tsx
index aedefc3a64..73df1860d8 100644
--- a/ts/components/ToastManager.stories.tsx
+++ b/ts/components/ToastManager.stories.tsx
@@ -105,6 +105,8 @@ function getToast(toastType: ToastType): AnyToast {
return { toastType: ToastType.FailedToFetchUsername };
case ToastType.FailedToSendWithEndorsements:
return { toastType: ToastType.FailedToSendWithEndorsements };
+ case ToastType.FailedToImportBackup:
+ return { toastType: ToastType.FailedToImportBackup };
case ToastType.FileSaved:
return {
toastType: ToastType.FileSaved,
diff --git a/ts/components/ToastManager.tsx b/ts/components/ToastManager.tsx
index 04ffcc2d27..f6b3c727e2 100644
--- a/ts/components/ToastManager.tsx
+++ b/ts/components/ToastManager.tsx
@@ -309,6 +309,20 @@ export function renderToast({
);
}
+ if (toastType === ToastType.FailedToImportBackup) {
+ return (
+
+ {i18n('icu:Toast--FailedToImportBackup')}
+
+ );
+ }
+
if (toastType === ToastType.FileSaved) {
return (
();
+ private frameErrorCount: number = 0;
private constructor(private readonly backupType: BackupType) {
super({ objectMode: true });
@@ -359,6 +362,20 @@ export class BackupImportStream extends Writable {
await startBackupMediaDownload();
}
+ if (this.frameErrorCount > 0) {
+ log.error(
+ `${this.logId}: errored while processing ${this.frameErrorCount} frames.`
+ );
+ if (isAlpha(window.getVersion())) {
+ window.reduxActions.toast.showToast({
+ toastType: ToastType.FailedToImportBackup,
+ });
+ }
+ // TODO (DESKTOP-7934): throw in tests if we cannot process a frame
+ } else {
+ log.info(`${this.logId}: successfully processed all frames.`);
+ }
+
done();
} catch (error) {
done(error);
@@ -440,6 +457,7 @@ export class BackupImportStream extends Writable {
log.warn(`${this.logId}: unsupported frame item ${frame.item}`);
}
} catch (error) {
+ this.frameErrorCount += 1;
log.error(
`${this.logId}: failed to process a frame ${frame.item}, ` +
`${Errors.toLogFormat(error)}`
diff --git a/ts/services/backups/index.ts b/ts/services/backups/index.ts
index 6c3a67b47c..0a01d2c590 100644
--- a/ts/services/backups/index.ts
+++ b/ts/services/backups/index.ts
@@ -50,6 +50,8 @@ import { BackupAPI } from './api';
import { validateBackup } from './validator';
import { BackupType } from './types';
import { UnsupportedBackupVersion } from './errors';
+import { ToastType } from '../../types/Toast';
+import { isAlpha } from '../../util/version';
export { BackupType };
@@ -385,6 +387,13 @@ export class BackupsService {
log.info('importBackup: finished...');
} catch (error) {
log.info(`importBackup: failed, error: ${Errors.toLogFormat(error)}`);
+
+ if (isAlpha(window.getVersion())) {
+ window.reduxActions.toast.showToast({
+ toastType: ToastType.FailedToImportBackup,
+ });
+ }
+
throw error;
} finally {
this.isRunning = false;
diff --git a/ts/types/Toast.tsx b/ts/types/Toast.tsx
index f4e4b1563a..326edbe065 100644
--- a/ts/types/Toast.tsx
+++ b/ts/types/Toast.tsx
@@ -35,6 +35,7 @@ export enum ToastType {
FailedToFetchPhoneNumber = 'FailedToFetchPhoneNumber',
FailedToFetchUsername = 'FailedToFetchUsername',
FailedToSendWithEndorsements = 'FailedToSendWithEndorsements',
+ FailedToImportBackup = 'FailedToImportBackup',
FileSaved = 'FileSaved',
FileSize = 'FileSize',
GroupLinkCopied = 'GroupLinkCopied',
@@ -113,6 +114,7 @@ export type AnyToast =
| { toastType: ToastType.FailedToFetchPhoneNumber }
| { toastType: ToastType.FailedToFetchUsername }
| { toastType: ToastType.FailedToSendWithEndorsements }
+ | { toastType: ToastType.FailedToImportBackup }
| {
toastType: ToastType.FileSaved;
parameters: { fullPath: string; countOfFiles?: number };