From c8dcbe456985c3aa6e9fbba6d7ba8ceac3b2abbf Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Fri, 11 Dec 2020 13:42:01 +0100 Subject: [PATCH] Block invalid move to external storage This way we atleast avoid the app getting bricked and showing a white screen. Related to #355 --- lib/screens/settings_screen.dart | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart index 1abd4c8b..66748ab3 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/screens/settings_screen.dart @@ -29,6 +29,7 @@ import 'package:gitjournal/screens/settings_tags.dart'; import 'package:gitjournal/screens/settings_widgets.dart'; import 'package:gitjournal/settings.dart'; import 'package:gitjournal/utils.dart'; +import 'package:gitjournal/utils/logger.dart'; import 'package:gitjournal/widgets/folder_selection_dialog.dart'; import 'package:gitjournal/widgets/pro_overlay.dart'; @@ -298,7 +299,7 @@ class SettingsListState extends State { settings.save(); setState(() {}); - repo.moveRepoToPath(); + await repo.moveRepoToPath(); } else { var req = await Permission.storage.request(); if (req.isDenied) { @@ -307,19 +308,22 @@ class SettingsListState extends State { settings.save(); setState(() {}); - repo.moveRepoToPath(); + await repo.moveRepoToPath(); return; } settings.storeInternally = true; var path = await ExtStorage.getExternalStorageDirectory(); - if (path == null) { - settings.storeInternally = false; + if (path == null || path.isEmpty) { + settings.storeInternally = true; settings.storageLocation = ""; settings.save(); setState(() {}); - repo.moveRepoToPath(); + await repo.moveRepoToPath(); + + showSnackbar( + context, "Unable to get External Storage Directory"); return; } @@ -328,7 +332,23 @@ class SettingsListState extends State { settings.save(); setState(() {}); - repo.moveRepoToPath(); + try { + await repo.moveRepoToPath(); + } catch (ex, st) { + Log.e("Moving Repo to External Storage", + ex: ex, stacktrace: st); + + settings.storeInternally = true; + settings.storageLocation = ""; + + settings.save(); + setState(() {}); + await repo.moveRepoToPath(); + + showSnackbar( + context, "Unable to save in External Storage Directory"); + return; + } return; } },