From e03dcc7fe94052c65674744fec97686656eb8d01 Mon Sep 17 00:00:00 2001 From: cyan Date: Mon, 26 May 2025 10:38:36 +0200 Subject: [PATCH] feat: better backup errors (#2290) Instead of creating error reports show the error to user use BackupVersion.unknown --- lib/core/backup_service_v3.dart | 4 ++-- .../screens/restore/restore_from_backup_page.dart | 15 +++++++++++++-- .../restore_from_backup_view_model.dart | 7 +++---- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/core/backup_service_v3.dart b/lib/core/backup_service_v3.dart index 76798aa64..be678b679 100644 --- a/lib/core/backup_service_v3.dart +++ b/lib/core/backup_service_v3.dart @@ -177,7 +177,7 @@ class BackupServiceV3 extends $BackupService { final archive = ZipDecoder().decodeStream(inputStream); final metadataFile = archive.findFile('metadata.json'); if (metadataFile == null) { - throw Exception('Invalid v3 backup: missing metadata.json'); + return BackupVersion.unknown; } final metadataBytes = metadataFile.rawContent!.readBytes(); final metadataString = utf8.decode(metadataBytes); @@ -188,7 +188,7 @@ class BackupServiceV3 extends $BackupService { } } - throw Exception('Invalid backup file: unknown version'); + return BackupVersion.unknown; } finally { raf.closeSync(); } diff --git a/lib/src/screens/restore/restore_from_backup_page.dart b/lib/src/screens/restore/restore_from_backup_page.dart index 3341b3b4b..0f5bdd324 100644 --- a/lib/src/screens/restore/restore_from_backup_page.dart +++ b/lib/src/screens/restore/restore_from_backup_page.dart @@ -173,8 +173,19 @@ class RestoreFromBackupPage extends BasePage { return; } - - await restoreFromBackupViewModel.import(textEditingController.text); + try { + await restoreFromBackupViewModel.import(textEditingController.text); + } catch (e) { + await showPopUp( + context: context, + builder: (_) { + return AlertWithOneAction( + alertTitle: S.current.error, + alertContent: e.toString(), + buttonText: S.of(context).ok, + buttonAction: () => Navigator.of(context).pop()); + }); + } textEditingController.text = ''; } } diff --git a/lib/view_model/restore_from_backup_view_model.dart b/lib/view_model/restore_from_backup_view_model.dart index 6745c264b..f51fd8988 100644 --- a/lib/view_model/restore_from_backup_view_model.dart +++ b/lib/view_model/restore_from_backup_view_model.dart @@ -45,12 +45,11 @@ abstract class RestoreFromBackupViewModelBase with Store { try { await backupService.importBackupFile(file, password); - } catch (e, s) { + } catch (e) { 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'); + state = FailureState('This is not a valid backup file, please make sure you have selected the correct one'); } else { - state = FailureState('Failed to restore backup, please try again'); - ExceptionHandler.onError(FlutterErrorDetails(exception: e, stack: s)); + state = FailureState(e.toString()); } }