Show folder names immediately and refresh stale index sizes without walking the whole drive.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using System.ComponentModel;
|
||||
using System.Windows;
|
||||
using Explorer.Application;
|
||||
using Explorer.App.Settings;
|
||||
using Explorer.Hosting;
|
||||
using Explorer.Presentation.ViewModels;
|
||||
|
||||
@@ -8,6 +9,7 @@ namespace Explorer.App;
|
||||
public partial class SettingsWindow : Window
|
||||
{
|
||||
private readonly MainViewModel _vm;
|
||||
private readonly SettingsDraft _draft;
|
||||
private readonly string _originalTheme;
|
||||
|
||||
public SettingsWindow(MainViewModel vm)
|
||||
@@ -16,48 +18,25 @@ public partial class SettingsWindow : Window
|
||||
_vm = vm;
|
||||
var prefs = vm.CurrentPreferences();
|
||||
_originalTheme = prefs.Theme;
|
||||
ThemeDark.IsChecked = prefs.Theme != "Light";
|
||||
ThemeLight.IsChecked = prefs.Theme == "Light";
|
||||
GroupNetwork.IsChecked = prefs.GroupNetworkPlaces;
|
||||
GroupCloud.IsChecked = prefs.GroupCloudPlaces;
|
||||
IndexArchives.IsChecked = prefs.IndexArchiveContents;
|
||||
AutoIndexRemovable.IsChecked = prefs.AutoIndexRemovable;
|
||||
BackgroundHostAtLogon.IsChecked = prefs.BackgroundHostAtLogon;
|
||||
ShowHidden.IsChecked = prefs.ShowHiddenFiles;
|
||||
ShowProtected.IsChecked = prefs.ShowProtectedSystemLocations;
|
||||
AutoClearQueue.IsChecked = prefs.AutoClearQueueWhenDone;
|
||||
SevenZipPath.Text = prefs.SevenZipPath ?? "";
|
||||
GitPath.Text = prefs.GitPath ?? "";
|
||||
FfmpegPath.Text = prefs.FfmpegPath ?? "";
|
||||
_draft = SettingsDraft.From(prefs);
|
||||
_draft.PropertyChanged += OnDraftChanged;
|
||||
DataContext = new SettingsShell(_draft, SettingsCatalog.Create());
|
||||
Closed += (_, _) => _draft.PropertyChanged -= OnDraftChanged;
|
||||
}
|
||||
|
||||
private void OnThemeChanged(object sender, RoutedEventArgs e)
|
||||
private void OnDraftChanged(object? sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
if (!IsLoaded)
|
||||
if (e.PropertyName is nameof(SettingsDraft.Theme)
|
||||
or nameof(SettingsDraft.IsDarkTheme)
|
||||
or nameof(SettingsDraft.IsLightTheme))
|
||||
{
|
||||
return;
|
||||
_vm.Theme = _draft.Theme;
|
||||
}
|
||||
|
||||
_vm.Theme = ThemeLight.IsChecked == true ? "Light" : "Dark";
|
||||
}
|
||||
|
||||
private async void OnOk(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var prefs = _vm.CurrentPreferences() with
|
||||
{
|
||||
Theme = ThemeLight.IsChecked == true ? "Light" : "Dark",
|
||||
GroupNetworkPlaces = GroupNetwork.IsChecked == true,
|
||||
GroupCloudPlaces = GroupCloud.IsChecked == true,
|
||||
IndexArchiveContents = IndexArchives.IsChecked == true,
|
||||
AutoIndexRemovable = AutoIndexRemovable.IsChecked == true,
|
||||
BackgroundHostAtLogon = BackgroundHostAtLogon.IsChecked == true,
|
||||
ShowHiddenFiles = ShowHidden.IsChecked == true,
|
||||
ShowProtectedSystemLocations = ShowProtected.IsChecked == true,
|
||||
AutoClearQueueWhenDone = AutoClearQueue.IsChecked == true,
|
||||
SevenZipPath = string.IsNullOrWhiteSpace(SevenZipPath.Text) ? null : SevenZipPath.Text.Trim(),
|
||||
GitPath = string.IsNullOrWhiteSpace(GitPath.Text) ? null : GitPath.Text.Trim(),
|
||||
FfmpegPath = string.IsNullOrWhiteSpace(FfmpegPath.Text) ? null : FfmpegPath.Text.Trim()
|
||||
};
|
||||
var prefs = _draft.ApplyTo(_vm.CurrentPreferences());
|
||||
await _vm.ApplyPreferencesAsync(prefs).ConfigureAwait(true);
|
||||
ApplyBackgroundHostAutostart(prefs.BackgroundHostAtLogon);
|
||||
DialogResult = true;
|
||||
@@ -94,48 +73,6 @@ public partial class SettingsWindow : Window
|
||||
}
|
||||
}
|
||||
|
||||
private void OnBrowseSevenZip(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var dlg = new Microsoft.Win32.OpenFileDialog
|
||||
{
|
||||
Title = "7-Zip executable",
|
||||
Filter = "7-Zip|7z.exe;7za.exe|Executables|*.exe|All files|*.*",
|
||||
FileName = SevenZipPath.Text
|
||||
};
|
||||
if (dlg.ShowDialog(this) == true)
|
||||
{
|
||||
SevenZipPath.Text = dlg.FileName;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnBrowseGit(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var dlg = new Microsoft.Win32.OpenFileDialog
|
||||
{
|
||||
Title = "Git executable",
|
||||
Filter = "Git|git.exe|Executables|*.exe|All files|*.*",
|
||||
FileName = GitPath.Text
|
||||
};
|
||||
if (dlg.ShowDialog(this) == true)
|
||||
{
|
||||
GitPath.Text = dlg.FileName;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnBrowseFfmpeg(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var dlg = new Microsoft.Win32.OpenFileDialog
|
||||
{
|
||||
Title = "FFmpeg executable",
|
||||
Filter = "FFmpeg|ffmpeg.exe|Executables|*.exe|All files|*.*",
|
||||
FileName = FfmpegPath.Text
|
||||
};
|
||||
if (dlg.ShowDialog(this) == true)
|
||||
{
|
||||
FfmpegPath.Text = dlg.FileName;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnCancel(object sender, RoutedEventArgs e)
|
||||
{
|
||||
_vm.Theme = _originalTheme;
|
||||
|
||||
Reference in New Issue
Block a user