initial commit

This commit is contained in:
guiling
2026-05-08 11:59:26 +08:00
commit 2b5e66c1e7
20 changed files with 1604 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
using System.ComponentModel;
using System.Runtime.CompilerServices;
using ClashWidget.Models;
using ClashWidget.Services;
namespace ClashWidget.ViewModels;
public class SettingsViewModel : INotifyPropertyChanged
{
private readonly AppConfig _config;
public SettingsViewModel()
{
_config = ConfigService.Load();
_apiHost = _config.ApiHost;
_apiPort = _config.ApiPort.ToString();
_apiSecret = _config.ApiSecret;
_testUrl = _config.TestUrl;
}
private string _apiHost;
public string ApiHost
{
get => _apiHost;
set => SetProperty(ref _apiHost, value);
}
private string _apiPort;
public string ApiPort
{
get => _apiPort;
set => SetProperty(ref _apiPort, value);
}
private string _apiSecret;
public string ApiSecret
{
get => _apiSecret;
set => SetProperty(ref _apiSecret, value);
}
private string _testUrl;
public string TestUrl
{
get => _testUrl;
set => SetProperty(ref _testUrl, value);
}
public AppConfig GetConfig()
{
int.TryParse(ApiPort, out int port);
if (port <= 0 || port > 65535) port = 9090;
return new AppConfig
{
ApiHost = ApiHost.Trim(),
ApiPort = port,
ApiSecret = ApiSecret.Trim(),
TestUrl = TestUrl.Trim()
};
}
public event PropertyChangedEventHandler? PropertyChanged;
private void SetProperty<T>(ref T field, T value, [CallerMemberName] string? name = null)
{
if (EqualityComparer<T>.Default.Equals(field, value)) return;
field = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}