client: Windows 客户端(WinUI3 壳 + agent-core;调试用 Electron 壳存档);localserver token 改为常数时间比较

This commit is contained in:
Qiufeng
2026-08-20 20:38:21 +08:00
parent 33b7d57498
commit 9abf7f8213
60 changed files with 10025 additions and 0 deletions
+102
View File
@@ -0,0 +1,102 @@
using System;
using System.IO;
using System.Text.Json;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Windows.System;
using EveryPublish.Client.Services;
namespace EveryPublish.Client.Pages;
public sealed partial class SettingsPage : Page
{
private ClientContext _ctx = null!;
public SettingsPage()
{
InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
_ctx = (ClientContext)e.Parameter;
DataDirText.Text = _ctx.DataDir;
ServerBox.Text = ReadServer();
AutoStartToggle.IsOn = AutoStart.IsEnabled();
FakeAllToggle.IsOn = ReadBool("fakeAll");
}
private bool ReadBool(string key)
{
try
{
var path = Path.Combine(_ctx.DataDir, "config.json");
if (!File.Exists(path)) return false;
using var doc = JsonDocument.Parse(File.ReadAllText(path));
if (doc.RootElement.TryGetProperty(key, out var v)) return v.GetBoolean();
}
catch { /* 忽略 */ }
return false;
}
private string ReadServer()
{
try
{
var path = Path.Combine(_ctx.DataDir, "config.json");
if (!File.Exists(path)) return "http://127.0.0.1:8090";
using var doc = JsonDocument.Parse(File.ReadAllText(path));
if (doc.RootElement.TryGetProperty("server", out var s)) return s.GetString() ?? "";
}
catch { /* 忽略 */ }
return "http://127.0.0.1:8090";
}
private void WriteServer(string server)
{
var path = Path.Combine(_ctx.DataDir, "config.json");
var doc = File.Exists(path)
? JsonSerializer.Deserialize<JsonElement>(File.ReadAllText(path))
: JsonDocument.Parse("{}").RootElement;
using var json = JsonDocument.Parse(doc.GetRawText());
var dict = JsonSerializer.Deserialize<Dictionary<string, JsonElement>>(json.RootElement.GetRawText()) ?? new();
dict["server"] = JsonSerializer.SerializeToElement(server);
File.WriteAllText(path, JsonSerializer.Serialize(dict, new JsonSerializerOptions { WriteIndented = true }));
}
private void Save_Click(object sender, RoutedEventArgs e)
{
var server = ServerBox.Text.Trim();
if (string.IsNullOrEmpty(server))
{
ResultText.Text = "服务器地址不能为空";
return;
}
WriteServer(server);
WriteBool("fakeAll", FakeAllToggle.IsOn);
AutoStart.SetEnabled(AutoStartToggle.IsOn);
_ctx.Watchdog.Restart();
ResultText.Text = "已保存,核心进程已重启";
}
private void WriteBool(string key, bool value)
{
var path = Path.Combine(_ctx.DataDir, "config.json");
var dict = File.Exists(path)
? JsonSerializer.Deserialize<Dictionary<string, JsonElement>>(File.ReadAllText(path)) ?? new()
: new();
dict[key] = JsonSerializer.SerializeToElement(value);
File.WriteAllText(path, JsonSerializer.Serialize(dict, new JsonSerializerOptions { WriteIndented = true }));
}
private async void OpenDir_Click(object sender, RoutedEventArgs e)
{
Directory.CreateDirectory(_ctx.DataDir);
await Launcher.LaunchFolderPathAsync(_ctx.DataDir);
}
private void Exit_Click(object sender, RoutedEventArgs e)
{
MainWindow.ExitAction?.Invoke();
}
}