fix: try-catch OpenFolderPickerAsync to avoid crash when select a directory is NOT exist

This commit is contained in:
Gadfly 2024-08-27 10:40:49 +08:00
parent 492f22fcfa
commit 80559ce199
No known key found for this signature in database
6 changed files with 66 additions and 21 deletions

View file

@ -390,11 +390,18 @@ namespace SourceGit.ViewModels
return;
var options = new FolderPickerOpenOptions() { AllowMultiple = false };
var selected = await storageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
try
{
var saveTo = Path.Combine(selected[0].Path.LocalPath, Path.GetFileName(file.Path));
Commands.SaveRevisionFile.Run(_repo.FullPath, _commit.SHA, file.Path, saveTo);
var selected = await storageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
{
var saveTo = Path.Combine(selected[0].Path.LocalPath, Path.GetFileName(file.Path));
Commands.SaveRevisionFile.Run(_repo.FullPath, _commit.SHA, file.Path, saveTo);
}
}
catch (Exception e)
{
App.RaiseException(_repo.FullPath, $"Failed to save file: {e.Message}");
}
ev.Handled = true;

View file

@ -454,12 +454,19 @@ namespace SourceGit.ViewModels
return;
var options = new FolderPickerOpenOptions() { AllowMultiple = false };
var selected = await storageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
try
{
var succ = new Commands.FormatPatch(_repo.FullPath, commit.SHA, selected[0].Path.LocalPath).Exec();
if (succ)
App.SendNotification(_repo.FullPath, App.Text("SaveAsPatchSuccess"));
var selected = await storageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
{
var succ = new Commands.FormatPatch(_repo.FullPath, commit.SHA, selected[0].Path.LocalPath).Exec();
if (succ)
App.SendNotification(_repo.FullPath, App.Text("SaveAsPatchSuccess"));
}
}
catch (Exception exception)
{
App.RaiseException(_repo.FullPath, $"Failed to save as patch: {exception.Message}");
}
e.Handled = true;

View file

@ -1,3 +1,4 @@
using System;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Platform.Storage;
@ -18,9 +19,16 @@ namespace SourceGit.Views
return;
var options = new FolderPickerOpenOptions() { AllowMultiple = false };
var selected = await toplevel.StorageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
TxtLocation.Text = selected[0].Path.LocalPath;
try
{
var selected = await toplevel.StorageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
TxtLocation.Text = selected[0].Path.LocalPath;
}
catch (Exception exception)
{
App.RaiseException(string.Empty, $"Failed to select location: {exception.Message}");
}
e.Handled = true;
}

View file

@ -1,3 +1,4 @@
using System;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Platform.Storage;
@ -18,9 +19,16 @@ namespace SourceGit.Views
if (toplevel == null)
return;
var selected = await toplevel.StorageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
TxtParentFolder.Text = selected[0].Path.LocalPath;
try
{
var selected = await toplevel.StorageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
TxtParentFolder.Text = selected[0].Path.LocalPath;
}
catch (Exception exception)
{
App.RaiseException(string.Empty, $"Failed to select parent folder: {exception.Message}");
}
e.Handled = true;
}

View file

@ -186,10 +186,17 @@ namespace SourceGit.Views
private async void SelectDefaultCloneDir(object _1, RoutedEventArgs _2)
{
var options = new FolderPickerOpenOptions() { AllowMultiple = false };
var selected = await StorageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
try
{
ViewModels.Preference.Instance.GitDefaultCloneDir = selected[0].Path.LocalPath;
var selected = await StorageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
{
ViewModels.Preference.Instance.GitDefaultCloneDir = selected[0].Path.LocalPath;
}
}
catch (Exception e)
{
App.RaiseException(string.Empty, $"Failed to select default clone directory: {e.Message}");
}
}

View file

@ -1,3 +1,4 @@
using System;
using System.IO;
using Avalonia.Controls;
@ -30,9 +31,16 @@ namespace SourceGit.Views
options.SuggestedStartLocation = folder;
}
var selected = await topLevel.StorageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
OpenOrInitRepository(selected[0].Path.LocalPath);
try
{
var selected = await topLevel.StorageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
OpenOrInitRepository(selected[0].Path.LocalPath);
}
catch (Exception exception)
{
App.RaiseException(string.Empty, $"Failed to open repository: {exception.Message}");
}
e.Handled = true;
}