LumaTunnel
【WinUI】LumaTunnel 是一个面向个人多设备的 Windows 代理系统。客户端在本机提供 HTTP/HTTPS CONNECT 与 SOCKS5 TCP 代理,并通过一个受信任 TLS 证书保护的 WSS 会话,将多个 TCP 流复用到自建 Windows Server 节点。
关注
0
Fork
0
Star
0
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; }
}
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; }
}