feat: better backup errors (#2290)

Instead of creating error reports show the error to user
use BackupVersion.unknown
This commit is contained in:
cyan 2025-05-26 10:38:36 +02:00 committed by GitHub
parent d342173239
commit e03dcc7fe9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 18 additions and 8 deletions

View file

@ -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();
}

View file

@ -173,8 +173,19 @@ class RestoreFromBackupPage extends BasePage {
return;
}
await restoreFromBackupViewModel.import(textEditingController.text);
try {
await restoreFromBackupViewModel.import(textEditingController.text);
} catch (e) {
await showPopUp<void>(
context: context,
builder: (_) {
return AlertWithOneAction(
alertTitle: S.current.error,
alertContent: e.toString(),
buttonText: S.of(context).ok,
buttonAction: () => Navigator.of(context).pop());
});
}
textEditingController.text = '';
}
}

View file

@ -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());
}
}