fix: OpenFolderPickerAsync raise exception when selected a drive root such as E:\

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo 2025-05-30 17:12:56 +08:00
parent 1bd2044589
commit bc5deac9fe
No known key found for this signature in database
8 changed files with 32 additions and 9 deletions

View file

@ -6,6 +6,7 @@
{
WorkingDirectory = repo;
Context = repo;
Editor = EditorType.None;
Args = $"format-patch {commit} -1 --output=\"{saveTo}\"";
}
}

View file

@ -452,7 +452,9 @@ namespace SourceGit.ViewModels
var selected = await storageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
{
var saveTo = Path.Combine(selected[0].Path.LocalPath, Path.GetFileName(file.Path));
var folder = selected[0];
var folderPath = folder is { Path: { IsAbsoluteUri: true } path } ? path.LocalPath : folder?.Path.ToString();
var saveTo = Path.Combine(folderPath, Path.GetFileName(file.Path));
Commands.SaveRevisionFile.Run(_repo.FullPath, _commit.SHA, file.Path, saveTo);
}
}

View file

@ -333,10 +333,12 @@ namespace SourceGit.ViewModels
{
log = _repo.CreateLog("Save as Patch");
var folder = picker[0];
var folderPath = folder is { Path: { IsAbsoluteUri: true } path } ? path.LocalPath : folder?.Path.ToString();
var succ = false;
for (var i = 0; i < selected.Count; i++)
{
var saveTo = GetPatchFileName(picker[0].Path.LocalPath, selected[i], i);
var saveTo = GetPatchFileName(folderPath, selected[i], i);
succ = await Task.Run(() => new Commands.FormatPatch(_repo.FullPath, selected[i].SHA, saveTo).Use(log).Exec());
if (!succ)
break;
@ -691,8 +693,10 @@ namespace SourceGit.ViewModels
{
log = _repo.CreateLog("Save as Patch");
var saveTo = GetPatchFileName(selected[0].Path.LocalPath, commit);
var succ = new Commands.FormatPatch(_repo.FullPath, commit.SHA, saveTo).Use(log).Exec();
var folder = selected[0];
var folderPath = folder is { Path: { IsAbsoluteUri: true } path } ? path.LocalPath : folder?.Path.ToString();
var saveTo = GetPatchFileName(folderPath, commit);
var succ = await Task.Run(() => new Commands.FormatPatch(_repo.FullPath, commit.SHA, saveTo).Use(log).Exec());
if (succ)
App.SendNotification(_repo.FullPath, App.Text("SaveAsPatchSuccess"));
}

View file

@ -23,7 +23,11 @@ namespace SourceGit.Views
{
var selected = await toplevel.StorageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
TxtLocation.Text = selected[0].Path.LocalPath;
{
var folder = selected[0];
var folderPath = folder is { Path: { IsAbsoluteUri: true } path } ? path.LocalPath : folder?.Path.ToString();
TxtLocation.Text = folderPath;
}
}
catch (Exception exception)
{

View file

@ -23,7 +23,11 @@ namespace SourceGit.Views
{
var selected = await toplevel.StorageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
TxtParentFolder.Text = selected[0].Path.LocalPath;
{
var folder = selected[0];
var folderPath = folder is { Path: { IsAbsoluteUri: true } path } ? path.LocalPath : folder?.Path.ToString();
TxtParentFolder.Text = folderPath;
}
}
catch (Exception exception)
{

View file

@ -32,7 +32,9 @@ namespace SourceGit.Views
var selected = await StorageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
{
workspace.Selected.DefaultCloneDir = selected[0].Path.LocalPath;
var folder = selected[0];
var folderPath = folder is { Path: { IsAbsoluteUri: true } path } ? path.LocalPath : folder?.Path.ToString();
workspace.Selected.DefaultCloneDir = folderPath;
}
}
catch (Exception ex)

View file

@ -250,7 +250,9 @@ namespace SourceGit.Views
var selected = await StorageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
{
ViewModels.Preferences.Instance.GitDefaultCloneDir = selected[0].Path.LocalPath;
var folder = selected[0];
var folderPath = folder is { Path: { IsAbsoluteUri: true } path } ? path.LocalPath : folder?.Path.ToString();
ViewModels.Preferences.Instance.GitDefaultCloneDir = folderPath;
}
}
catch (Exception ex)

View file

@ -35,7 +35,11 @@ namespace SourceGit.Views
{
var selected = await topLevel.StorageProvider.OpenFolderPickerAsync(options);
if (selected.Count == 1)
ViewModels.Welcome.Instance.OpenOrInitRepository(selected[0].Path.LocalPath, null, false);
{
var folder = selected[0];
var folderPath = folder is { Path: { IsAbsoluteUri: true } path } ? path.LocalPath : folder?.Path.ToString();
ViewModels.Welcome.Instance.OpenOrInitRepository(folderPath, null, false);
}
}
catch (Exception exception)
{