using System.Diagnostics; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; namespace LumaTunnel.Client.Views; public sealed partial class SettingsPage : Page { public SettingsPage() => InitializeComponent(); private void OnLoaded(object sender, RoutedEventArgs e) { var profile = AppServices.Profile; HttpPortBox.Value = profile.HttpPort; SocksPortBox.Value = profile.SocksPort; StartupToggle.IsOn = profile.StartAtLogin; CloseToTrayToggle.IsOn = profile.CloseToTray; ThemeBox.SelectedIndex = profile.Theme switch { "Light" => 1, "Dark" => 2, _ => 0 }; } private async void OnSave(object sender, RoutedEventArgs e) { var http = checked((int)HttpPortBox.Value); var socks = checked((int)SocksPortBox.Value); if (http == socks || http is < 1 or > 65535 || socks is < 1 or > 65535) { Show("端口必须有效且不能相同。", InfoBarSeverity.Error); return; } if (AppServices.IsEnabled) { Show("请先关闭代理,再修改监听端口。", InfoBarSeverity.Warning); return; } var theme = ThemeBox.SelectedIndex switch { 1 => "Light", 2 => "Dark", _ => "System" }; await AppServices.UpdateSettingsAsync(http, socks, CloseToTrayToggle.IsOn, StartupToggle.IsOn, theme); if (App.MainWindow?.Content is FrameworkElement root) root.RequestedTheme = theme switch { "Light" => ElementTheme.Light, "Dark" => ElementTheme.Dark, _ => ElementTheme.Default }; Show("设置已保存。", InfoBarSeverity.Success); } private void OnOpenLogs(object sender, RoutedEventArgs e) { Directory.CreateDirectory(AppServices.ProfileStore.LogPath); Process.Start(new ProcessStartInfo("explorer.exe", AppServices.ProfileStore.LogPath) { UseShellExecute = true }); } private void Show(string message, InfoBarSeverity severity) { MessageBar.Message = message; MessageBar.Severity = severity; MessageBar.IsOpen = true; } }