diff --git a/src/ViewModels/Clone.cs b/src/ViewModels/Clone.cs index 3123d62a..2b7c2580 100644 --- a/src/ViewModels/Clone.cs +++ b/src/ViewModels/Clone.cs @@ -64,6 +64,17 @@ namespace SourceGit.ViewModels _pageId = pageId; View = new Views.Clone() { DataContext = this }; + // Use workspace-specific DefaultCloneDir if available + var activeWorkspace = Preferences.Instance.GetActiveWorkspace(); + if (activeWorkspace != null && !string.IsNullOrEmpty(activeWorkspace.DefaultCloneDir)) + { + ParentFolder = activeWorkspace.DefaultCloneDir; + } + else + { + ParentFolder = Preferences.Instance.GitDefaultCloneDir; + } + Task.Run(async () => { try @@ -170,7 +181,7 @@ namespace SourceGit.ViewModels private string _remote = string.Empty; private bool _useSSH = false; private string _sshKey = string.Empty; - private string _parentFolder = Preferences.Instance.GitDefaultCloneDir; + private string _parentFolder = string.Empty; private string _local = string.Empty; private string _extraArgs = string.Empty; } diff --git a/src/ViewModels/Workspace.cs b/src/ViewModels/Workspace.cs index d527ff48..3ae935c7 100644 --- a/src/ViewModels/Workspace.cs +++ b/src/ViewModels/Workspace.cs @@ -46,6 +46,12 @@ namespace SourceGit.ViewModels set => SetProperty(ref _restoreOnStartup, value); } + public string DefaultCloneDir + { + get => _defaultCloneDir; + set => SetProperty(ref _defaultCloneDir, value); + } + public IBrush Brush { get => new SolidColorBrush(_color); @@ -55,5 +61,6 @@ namespace SourceGit.ViewModels private uint _color = 4278221015; private bool _isActive = false; private bool _restoreOnStartup = true; + private string _defaultCloneDir = string.Empty; } } diff --git a/src/Views/ConfigureWorkspace.axaml b/src/Views/ConfigureWorkspace.axaml index 79eab390..0bef89b9 100644 --- a/src/Views/ConfigureWorkspace.axaml +++ b/src/Views/ConfigureWorkspace.axaml @@ -98,13 +98,20 @@ - + - - + + + + + + + diff --git a/src/Views/ConfigureWorkspace.axaml.cs b/src/Views/ConfigureWorkspace.axaml.cs index 9e458f6f..8ef5dec7 100644 --- a/src/Views/ConfigureWorkspace.axaml.cs +++ b/src/Views/ConfigureWorkspace.axaml.cs @@ -1,4 +1,7 @@ using Avalonia.Controls; +using Avalonia.Interactivity; +using Avalonia.Platform.Storage; +using System; namespace SourceGit.Views { @@ -16,5 +19,28 @@ namespace SourceGit.Views if (!Design.IsDesignMode) ViewModels.Preferences.Instance.Save(); } + + private async void SelectDefaultCloneDir(object _, RoutedEventArgs e) + { + var workspace = DataContext as ViewModels.ConfigureWorkspace; + if (workspace?.Selected == null) + return; + + var options = new FolderPickerOpenOptions() { AllowMultiple = false }; + try + { + var selected = await StorageProvider.OpenFolderPickerAsync(options); + if (selected.Count == 1) + { + workspace.Selected.DefaultCloneDir = selected[0].Path.LocalPath; + } + } + catch (Exception ex) + { + App.RaiseException(string.Empty, $"Failed to select default clone directory: {ex.Message}"); + } + + e.Handled = true; + } } }