144 lines
4.9 KiB
C#
144 lines
4.9 KiB
C#
using System.Windows;
|
|
using Explorer.Application;
|
|
using Explorer.Hosting;
|
|
using Explorer.Presentation.ViewModels;
|
|
|
|
namespace Explorer.App;
|
|
|
|
public partial class SettingsWindow : Window
|
|
{
|
|
private readonly MainViewModel _vm;
|
|
private readonly string _originalTheme;
|
|
|
|
public SettingsWindow(MainViewModel vm)
|
|
{
|
|
InitializeComponent();
|
|
_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 ?? "";
|
|
}
|
|
|
|
private void OnThemeChanged(object sender, RoutedEventArgs e)
|
|
{
|
|
if (!IsLoaded)
|
|
{
|
|
return;
|
|
}
|
|
|
|
_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()
|
|
};
|
|
await _vm.ApplyPreferencesAsync(prefs).ConfigureAwait(true);
|
|
ApplyBackgroundHostAutostart(prefs.BackgroundHostAtLogon);
|
|
DialogResult = true;
|
|
Close();
|
|
}
|
|
|
|
private void ApplyBackgroundHostAutostart(bool enabled)
|
|
{
|
|
if (enabled)
|
|
{
|
|
var exe = HostLogonAutostart.FindHostExecutable();
|
|
if (exe is null)
|
|
{
|
|
MessageBox.Show(
|
|
this,
|
|
"Explorer.Host.exe was not found next to Explorer Workbench, so the sign-in task was not registered.",
|
|
"Background host",
|
|
MessageBoxButton.OK,
|
|
MessageBoxImage.Warning);
|
|
return;
|
|
}
|
|
|
|
if (!HostLogonAutostart.TryRegister(exe, out var error))
|
|
{
|
|
MessageBox.Show(this, error, "Background host", MessageBoxButton.OK, MessageBoxImage.Warning);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if (!HostLogonAutostart.TryUnregister(out var unregisterError))
|
|
{
|
|
MessageBox.Show(this, unregisterError, "Background host", MessageBoxButton.OK, MessageBoxImage.Warning);
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|