diff --git a/lib/view_model/restore_from_backup_view_model.dart b/lib/view_model/restore_from_backup_view_model.dart index 247e6d43d..f9894b592 100644 --- a/lib/view_model/restore_from_backup_view_model.dart +++ b/lib/view_model/restore_from_backup_view_model.dart @@ -13,13 +13,12 @@ import 'package:cake_wallet/store/authentication_store.dart'; part 'restore_from_backup_view_model.g.dart'; -class RestoreFromBackupViewModel = RestoreFromBackupViewModelBase - with _$RestoreFromBackupViewModel; +class RestoreFromBackupViewModel = RestoreFromBackupViewModelBase with _$RestoreFromBackupViewModel; abstract class RestoreFromBackupViewModelBase with Store { RestoreFromBackupViewModelBase(this.backupService) - : state = InitialExecutionState(), - filePath = ''; + : state = InitialExecutionState(), + filePath = ''; final BackupService backupService; @@ -45,8 +44,14 @@ abstract class RestoreFromBackupViewModelBase with Store { final file = File(filePath); final data = await file.readAsBytes(); + await backupService.importBackup(data, password); - await initializeAppAtRoot(reInitializing: true); + + try { + await initializeAppAtRoot(reInitializing: true); + } catch (e, s) { + throw Exception('failed_app_initialization: $e $s'); + } final store = getIt.get(); ReactionDisposer? reaction; @@ -63,11 +68,25 @@ abstract class RestoreFromBackupViewModelBase with Store { state = ExecutedSuccessfullyState(); } catch (e, s) { - var msg = e.toString(); + var msg = e.toString().toLowerCase(); - if (msg.toLowerCase().contains("message authentication code (mac)")) { + // can't use a switch here because of .contains() / not an exact match + bool shouldBeMadeAware = false; + if (msg.contains("message authentication code (mac)")) { msg = 'Incorrect backup password'; + } else if (msg.contains("faileddecryption")) { + msg = 'Failed to decrypt backup file, please check you entered the right password'; + } else if (msg.contains("failed_to_decode")) { + msg = 'Failed to decode backup file, please try again'; + shouldBeMadeAware = true; + } else if (msg.contains("failed_app_initialization")) { + msg = 'Failed to initialize app, please try again'; + shouldBeMadeAware = true; } else { + shouldBeMadeAware = true; + } + + if (shouldBeMadeAware) { await ExceptionHandler.onError(FlutterErrorDetails( exception: e, stack: s, diff --git a/lib/view_model/wallet_restore_view_model.dart b/lib/view_model/wallet_restore_view_model.dart index 8a497a605..3e5220447 100644 --- a/lib/view_model/wallet_restore_view_model.dart +++ b/lib/view_model/wallet_restore_view_model.dart @@ -67,7 +67,6 @@ abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store { availableModes = [WalletRestoreMode.seed]; break; } - isButtonEnabled = !hasSeedLanguageSelector && !hasBlockchainHeightLanguageSelector; walletCreationService.changeWalletType(type: type); }