From b1e5d1503e40effe58b5cf92b38d6fa7b18f2200 Mon Sep 17 00:00:00 2001 From: Omar Hatem Date: Fri, 28 Mar 2025 16:17:38 +0200 Subject: [PATCH] Better handle backup errors (#2132) --- lib/core/backup_service_v3.dart | 2 +- .../restore_from_backup_view_model.dart | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/core/backup_service_v3.dart b/lib/core/backup_service_v3.dart index 5f5e77b00..76798aa64 100644 --- a/lib/core/backup_service_v3.dart +++ b/lib/core/backup_service_v3.dart @@ -198,7 +198,7 @@ class BackupServiceV3 extends $BackupService { final version = getVersionFile(file); switch (version) { case BackupVersion.unknown: - throw Exception('Invalid backup file: unknown version'); + throw Exception('unknown_backup_version'); case BackupVersion.v1: final data = file.readAsBytesSync(); final backupBytes = data.toList()..removeAt(0); diff --git a/lib/view_model/restore_from_backup_view_model.dart b/lib/view_model/restore_from_backup_view_model.dart index 1c3dc5048..a74beeaea 100644 --- a/lib/view_model/restore_from_backup_view_model.dart +++ b/lib/view_model/restore_from_backup_view_model.dart @@ -7,7 +7,6 @@ import 'package:hive/hive.dart'; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/main.dart'; import 'package:cake_wallet/di.dart'; -import 'package:cake_wallet/core/backup_service.dart'; import 'package:cw_core/node.dart'; import 'package:cake_wallet/store/app_store.dart'; import 'package:cake_wallet/store/authentication_store.dart'; @@ -44,13 +43,22 @@ abstract class RestoreFromBackupViewModelBase with Store { final file = File(filePath); - - await backupService.importBackupFile(file, password); + try { + await backupService.importBackupFile(file, password); + } catch (e, s) { + if (e.toString().contains("unknown_backup_version")) { + state = FailureState('This is not a valid backup file, please make sure you selected the correct backup file'); + } else { + state = FailureState('Failed to restore backup, please try again'); + ExceptionHandler.onError(FlutterErrorDetails(exception: e, stack: s, silent: true)); + } + } try { await initializeAppAtRoot(reInitializing: true); } catch (e, s) { - throw Exception('failed_app_initialization: $e $s'); + state = FailureState('Failed app initialization, please try again'); + ExceptionHandler.onError(FlutterErrorDetails(exception: e, stack: s, silent: true)); } final store = getIt.get();