diff --git a/.github/ISSUE_TEMPLATE/---bug-report.md b/.github/ISSUE_TEMPLATE/---bug-report.md
index 612aa06b..a249f974 100644
--- a/.github/ISSUE_TEMPLATE/---bug-report.md
+++ b/.github/ISSUE_TEMPLATE/---bug-report.md
@@ -25,12 +25,12 @@ If applicable, add screenshots to help explain your problem.
**馃枼 Desktop (please complete the following information):**
- OS: [e.g. Windows 11 Build xxx]
- - Version [e.g. KitX v3.0.0]
+ - Version: [e.g. KitX v3.0.0]
**馃摫 Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- - Version [e.g. KitX Mobile v1.0.0]
+ - Version: [e.g. KitX Mobile v1.0.0]
**馃搸 Additional context**
Add any other context about the problem here.
diff --git a/KitX Dashboard/App.axaml.cs b/KitX Dashboard/App.axaml.cs
index 7178e85b..25b7dacf 100644
--- a/KitX Dashboard/App.axaml.cs
+++ b/KitX Dashboard/App.axaml.cs
@@ -5,7 +5,6 @@
using Avalonia.Media;
using BasicHelper.IO;
using BasicHelper.Util;
-using FluentAvalonia.UI.Media;
using KitX_Dashboard.Data;
using KitX_Dashboard.Models;
using KitX_Dashboard.ViewModels;
@@ -24,7 +23,7 @@ public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
- string lang = Program.GlobalConfig.App.AppLanguage;
+ string lang = Program.Config.App.AppLanguage;
try
{
Resources.MergedDictionaries.Clear();
@@ -38,7 +37,7 @@ public override void Initialize()
{
Log.Warning($"Language File {lang}.axaml not found.");
- string backup_lang = Program.GlobalConfig.App.SurpportLanguages.Keys.First();
+ string backup_lang = Program.Config.App.SurpportLanguages.Keys.First();
Resources.MergedDictionaries.Clear();
Resources.MergedDictionaries.Add(
AvaloniaRuntimeXamlLoader.Load(
@@ -46,7 +45,7 @@ public override void Initialize()
) as ResourceDictionary
);
- Program.GlobalConfig.App.AppLanguage = backup_lang;
+ Program.Config.App.AppLanguage = backup_lang;
}
finally
{
@@ -55,7 +54,7 @@ public override void Initialize()
EventHandlers.Invoke("LanguageChanged");
- Color c = Color.Parse(Program.GlobalConfig.App.ThemeColor);
+ Color c = Color.Parse(Program.Config.App.ThemeColor);
if (Current != null)
{
@@ -84,10 +83,10 @@ public override void OnFrameworkInitializationCompleted()
};
}
- string color = Program.GlobalConfig.App.ThemeColor;
+ string color = Program.Config.App.ThemeColor;
Resources["ThemePrimaryAccent"] = new SolidColorBrush(Color.Parse(color));
- if (Program.GlobalConfig.App.ShowAnnouncementWhenStart)
+ if (Program.Config.App.ShowAnnouncementWhenStart)
new Thread(async () =>
{
await Services.AnouncementManager.CheckNewAnnouncements();
diff --git a/KitX Dashboard/Data/Config.cs b/KitX Dashboard/Data/AppConfig.cs
similarity index 92%
rename from KitX Dashboard/Data/Config.cs
rename to KitX Dashboard/Data/AppConfig.cs
index b39fca1c..5e1fa8af 100644
--- a/KitX Dashboard/Data/Config.cs
+++ b/KitX Dashboard/Data/AppConfig.cs
@@ -6,7 +6,7 @@ namespace KitX_Dashboard.Data
///
/// 閰嶇疆缁撴瀯
///
- public class Config
+ public class AppConfig
{
[JsonInclude]
public Config_App App { get; set; } = new();
@@ -17,8 +17,14 @@ public class Config
[JsonInclude]
public Config_Pages Pages { get; set; } = new();
+ [JsonInclude]
+ public Config_Web Web { get; set; } = new();
+
+ [JsonInclude]
+ public Config_Log Log { get; set; } = new();
+
///
- /// AppConfig
+ /// Config
///
public class Config_App
{
@@ -49,45 +55,11 @@ public class Config_App
[JsonInclude]
public bool DeveloperSetting { get; set; } = false;
- [JsonInclude]
- public int UDPPortSend { get; set; } = 23404;
-
- [JsonInclude]
- public int UDPPortReceive { get; set; } = 24040;
-
- [JsonInclude]
- public string APIServer { get; set; } = "api.catrol.cn";
-
- [JsonInclude]
- public string APIPath { get; set; } = "/apps/kitx/";
-
[JsonInclude]
public bool ShowAnnouncementWhenStart { get; set; } = true;
[JsonInclude]
public ulong RanTime { get; set; } = 0;
-
- [JsonInclude]
- public string IPFilter { get; set; } = "192.168";
-
- [JsonInclude]
- public long LogFileSingleMaxSize { get; set; } = 1024 * 10000; // 10MB
-
- [JsonInclude]
- public string LogFilePath { get; set; } = "./Log/";
-
- [JsonInclude]
- public string LogTemplate { get; set; } = "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz}] " +
- "[{Level:u3}] {Message:lj}{NewLine}{Exception}";
-
- [JsonInclude]
- public int LogFileMaxCount { get; set; } = 50;
-
- [JsonInclude]
- public int LogFileFlushInterval { get; set; } = 30;
-
- [JsonInclude]
- public int SocketBufferSize { get; set; } = 1024 * 100;
}
///
@@ -218,6 +190,60 @@ public class Config_SettingsPage
public bool IsNavigationViewPaneOpened { get; set; } = true;
}
}
+
+ ///
+ /// WebConfig
+ ///
+ public class Config_Web
+ {
+
+ [JsonInclude]
+ public string APIServer { get; set; } = "api.catrol.cn";
+
+ [JsonInclude]
+ public string APIPath { get; set; } = "/apps/kitx/";
+
+ [JsonInclude]
+ public int UDPPortSend { get; set; } = 23404;
+
+ [JsonInclude]
+ public int UDPPortReceive { get; set; } = 24040;
+
+ [JsonInclude]
+ public string UDPBroadcastAddress { get; set; } = "224.0.0.0";
+
+ [JsonInclude]
+ public string IPFilter { get; set; } = "192.168";
+
+ [JsonInclude]
+ public int SocketBufferSize { get; set; } = 1024 * 100;
+
+ [JsonInclude]
+ public int DeviceInfoStructTTLSeconds { get; set; } = 5;
+ }
+
+ ///
+ /// LogConfig
+ ///
+ public class Config_Log
+ {
+
+ [JsonInclude]
+ public long LogFileSingleMaxSize { get; set; } = 1024 * 10000; // 10MB
+
+ [JsonInclude]
+ public string LogFilePath { get; set; } = "./Log/";
+
+ [JsonInclude]
+ public string LogTemplate { get; set; } = "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz}] " +
+ "[{Level:u3}] {Message:lj}{NewLine}{Exception}";
+
+ [JsonInclude]
+ public int LogFileMaxCount { get; set; } = 50;
+
+ [JsonInclude]
+ public int LogFileFlushInterval { get; set; } = 30;
+ }
}
}
diff --git a/KitX Dashboard/Helper.cs b/KitX Dashboard/Helper.cs
index 342b2c24..d50baae9 100644
--- a/KitX Dashboard/Helper.cs
+++ b/KitX Dashboard/Helper.cs
@@ -1,7 +1,4 @@
-锘縰sing Avalonia;
-using Avalonia.Media;
-using FluentAvalonia.UI.Media;
-using KitX_Dashboard.Data;
+锘縰sing KitX_Dashboard.Data;
using KitX_Dashboard.Models;
using Serilog;
using System;
@@ -32,7 +29,7 @@ public static void StartUpCheck()
//InitLiteLogger(Program.LocalLogger);
- string logdir = Path.GetFullPath(Program.GlobalConfig.App.LogFilePath);
+ string logdir = Path.GetFullPath(Program.Config.Log.LogFilePath);
if (!Directory.Exists(logdir))
Directory.CreateDirectory(logdir);
@@ -41,14 +38,14 @@ public static void StartUpCheck()
.MinimumLevel.Information()
.WriteTo.File(
$"{logdir}Log_.log",
- outputTemplate: Program.GlobalConfig.App.LogTemplate,
+ outputTemplate: Program.Config.Log.LogTemplate,
rollingInterval: RollingInterval.Hour,
- fileSizeLimitBytes: Program.GlobalConfig.App.LogFileSingleMaxSize,
+ fileSizeLimitBytes: Program.Config.Log.LogFileSingleMaxSize,
buffered: true,
- flushToDiskInterval: new(0, 0, Program.GlobalConfig.App.LogFileFlushInterval),
+ flushToDiskInterval: new(0, 0, Program.Config.Log.LogFileFlushInterval),
restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Information,
rollOnFileSizeLimit: true,
- retainedFileCountLimit: Program.GlobalConfig.App.LogFileMaxCount
+ retainedFileCountLimit: Program.Config.Log.LogFileMaxCount
)
.CreateLogger();
@@ -90,7 +87,7 @@ public static void SaveConfig()
new Thread(() =>
{
BasicHelper.IO.FileHelper.WriteIn(Path.GetFullPath(GlobalInfo.ConfigFilePath),
- JsonSerializer.Serialize(Program.GlobalConfig, options));
+ JsonSerializer.Serialize(Program.Config, options));
}).Start();
}
@@ -117,7 +114,7 @@ public static void SavePluginsListConfig()
///
public static void LoadConfig()
{
- Program.GlobalConfig = JsonSerializer.Deserialize(
+ Program.Config = JsonSerializer.Deserialize(
BasicHelper.IO.FileHelper.ReadAll(Path.GetFullPath(GlobalInfo.ConfigFilePath)));
}
diff --git a/KitX Dashboard/Models/GreetingTextGenerator.cs b/KitX Dashboard/Models/GreetingTextGenerator.cs
index c4491625..925fa9da 100644
--- a/KitX Dashboard/Models/GreetingTextGenerator.cs
+++ b/KitX Dashboard/Models/GreetingTextGenerator.cs
@@ -46,23 +46,23 @@ internal static int GenerateRandomIndex(Step step)
switch (step)
{
case Step.Morning:
- result = random.Next(1, Program.GlobalConfig.Windows
+ result = random.Next(1, Program.Config.Windows
.MainWindow.GreetingTextCount_Morning + 1);
break;
case Step.Noon:
- result = random.Next(1, Program.GlobalConfig.Windows
+ result = random.Next(1, Program.Config.Windows
.MainWindow.GreetingTextCount_Noon + 1);
break;
case Step.AfterNoon:
- result = random.Next(1, Program.GlobalConfig.Windows
+ result = random.Next(1, Program.Config.Windows
.MainWindow.GreetingTextCount_AfterNoon + 1);
break;
case Step.Evening:
- result = random.Next(1, Program.GlobalConfig.Windows
+ result = random.Next(1, Program.Config.Windows
.MainWindow.GreetingTextCount_Evening + 1);
break;
case Step.Night:
- result = random.Next(1, Program.GlobalConfig.Windows
+ result = random.Next(1, Program.Config.Windows
.MainWindow.GreetingTextCount_Night + 1);
break;
}
diff --git a/KitX Dashboard/Program.cs b/KitX Dashboard/Program.cs
index 92a418b3..10b6217b 100644
--- a/KitX Dashboard/Program.cs
+++ b/KitX Dashboard/Program.cs
@@ -14,7 +14,7 @@ internal class Program
{
//internal static LoggerManager LocalLogger = new();
- internal static Config GlobalConfig = new();
+ internal static AppConfig Config = new();
internal static WebServer? LocalWebServer;
@@ -87,7 +87,7 @@ public static void Main(string[] args)
#endregion
- GlobalConfig.App.RanTime++;
+ Config.App.RanTime++;
#region 进入应用生命周期循环
diff --git a/KitX Dashboard/Services/AnouncementManager.cs b/KitX Dashboard/Services/AnouncementManager.cs
index 9f9fbf3c..086d3922 100644
--- a/KitX Dashboard/Services/AnouncementManager.cs
+++ b/KitX Dashboard/Services/AnouncementManager.cs
@@ -24,8 +24,8 @@ public static async Task CheckNewAnnouncements()
// 閾炬帴澶撮儴
string linkBase = $"http://" +
- $"{Program.GlobalConfig.App.APIServer}" +
- $"{Program.GlobalConfig.App.APIPath}";
+ $"{Program.Config.Web.APIServer}" +
+ $"{Program.Config.Web.APIPath}";
// 鑾峰彇鍏憡鍒楄〃鐨刟pi閾炬帴
string link = $"{linkBase}{GlobalInfo.Api_Get_Announcements}";
@@ -66,7 +66,7 @@ await FileHelper.ReadAllAsync(confPath)
// 鑾峰彇鍗曚釜鍏憡鐨勯摼鎺
string apiLink = $"{linkBase}{GlobalInfo.Api_Get_Announcement}" +
$"?" +
- $"lang={Program.GlobalConfig.App.AppLanguage}" +
+ $"lang={Program.Config.App.AppLanguage}" +
$"&" +
$"date={item:yyyy-MM-dd HH-mm}";
string? md = JsonSerializer.Deserialize(await client.GetStringAsync(apiLink));
diff --git a/KitX Dashboard/Services/DevicesManager.cs b/KitX Dashboard/Services/DevicesManager.cs
index cbf5c2d2..920de79f 100644
--- a/KitX Dashboard/Services/DevicesManager.cs
+++ b/KitX Dashboard/Services/DevicesManager.cs
@@ -56,7 +56,8 @@ internal static void KeepCheckAndRemove()
continue;
}
MacAddressVisited.Add(item.viewModel.DeviceInfo.DeviceMacAddress);
- if (DateTime.Now - item.viewModel.DeviceInfo.SendTime > new TimeSpan(0, 0, 5))
+ if (DateTime.Now - item.viewModel.DeviceInfo.SendTime
+ > new TimeSpan(0, 0, Program.Config.Web.DeviceInfoStructTTLSeconds))
DevicesNeed2BeRemoved.Add(item);
}
foreach (var item in DevicesNeed2BeRemoved)
diff --git a/KitX Dashboard/Services/LoadersManager.cs b/KitX Dashboard/Services/LoadersManager.cs
index 42868500..5023e522 100644
--- a/KitX Dashboard/Services/LoadersManager.cs
+++ b/KitX Dashboard/Services/LoadersManager.cs
@@ -2,5 +2,7 @@
{
internal class LoadersManager
{
+
+
}
}
diff --git a/KitX Dashboard/Services/PluginsManager.cs b/KitX Dashboard/Services/PluginsManager.cs
index 185861bb..206bb899 100644
--- a/KitX Dashboard/Services/PluginsManager.cs
+++ b/KitX Dashboard/Services/PluginsManager.cs
@@ -163,9 +163,9 @@ internal static void ImportPlugin(string[] kxpfiles, bool inGraphic = false)
Directory.Delete(releaseDir, true);
LoaderStruct loaderStruct = JsonSerializer.Deserialize(rst.Item1);
PluginStruct pluginStruct = JsonSerializer.Deserialize(rst.Item2);
- Config? config = null;
- if (inGraphic) config = Program.GlobalConfig;
- else config = JsonSerializer.Deserialize(File.ReadAllText(
+ AppConfig? config = null;
+ if (inGraphic) config = Program.Config;
+ else config = JsonSerializer.Deserialize(File.ReadAllText(
Path.GetFullPath($"{GlobalInfo.ConfigPath}config.json")
));
if (config == null)
@@ -242,7 +242,7 @@ internal static void KeepCheckAndRemoveOrDelete()
Plugin pg = pluginsToDelete.Dequeue();
Program.PluginsList.Plugins.Remove(pg);
string pgfiledir = Path.GetFullPath(
- $"{Program.GlobalConfig.App.LocalPluginsFileDirectory}/" +
+ $"{Program.Config.App.LocalPluginsFileDirectory}/" +
$"{pg.PluginDetails.PublisherName}_{pg.PluginDetails.AuthorName}/" +
$"{pg.PluginDetails.Name}/{pg.PluginDetails.Version}/"
);
diff --git a/KitX Dashboard/Services/WebServer.cs b/KitX Dashboard/Services/WebServer.cs
index 13cf181f..9a5e998a 100644
--- a/KitX Dashboard/Services/WebServer.cs
+++ b/KitX Dashboard/Services/WebServer.cs
@@ -30,11 +30,17 @@ public WebServer()
DevicesManager.KeepCheckAndRemove();
PluginsManager.KeepCheckAndRemove();
PluginsManager.KeepCheckAndRemoveOrDelete();
+ FindSurpportNetworkInterface(new()
+ {
+ UdpClient_Send, UdpClient_Receive
+ }, IPAddress.Parse(Program.Config.Web.UDPBroadcastAddress));
MultiDevicesBroadCastSend();
MultiDevicesBroadCastReceive();
}).Start();
}
+ #region TCP Socket 鏈嶅姟浜 Loaders 鐨勬湇鍔″櫒
+
///
/// 寮濮嬫墽琛
///
@@ -124,7 +130,7 @@ private async void ReciveMessage(object obj)
while (keepListen)
{
- byte[] data = new byte[Program.GlobalConfig.App.SocketBufferSize];
+ byte[] data = new byte[Program.Config.Web.SocketBufferSize];
//濡傛灉杩滅▼涓绘満宸插叧闂繛鎺,Read灏嗙珛鍗宠繑鍥為浂瀛楄妭
//int length = await stream.ReadAsync(data, 0, data.Length);
int length = await stream.ReadAsync(data);
@@ -171,16 +177,77 @@ private async void ReciveMessage(object obj)
client.Dispose();
}
}
+ #endregion
+
+ #region UDP Socket 鏈嶅姟浜庤嚜鍙戠幇鑷粍缃
+
+ private static readonly List SurpportedNetworkInterfaces = new();
+
+ ///
+ /// UDP 鍙戝寘瀹㈡埛绔
+ ///
+ private static readonly UdpClient UdpClient_Send
+ = new(Program.Config.Web.UDPPortSend, AddressFamily.InterNetwork)
+ {
+ EnableBroadcast = true,
+ MulticastLoopback = true
+ };
+
+ ///
+ /// UDP 鏀跺寘瀹㈡埛绔
+ ///
+ private static readonly UdpClient UdpClient_Receive
+ = new(new IPEndPoint(IPAddress.Any, Program.Config.Web.UDPPortReceive));
+
+ ///
+ /// 瀵绘壘鍙楁敮鎸佺殑缃戠粶閫傞厤鍣ㄥ苟鎶奤DP瀹㈡埛绔姞鍏ョ粍鎾
+ ///
+ private static void FindSurpportNetworkInterface(List clients, IPAddress multicastAddress)
+ {
+ NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
+ foreach (NetworkInterface adapter in nics)
+ {
+ IPInterfaceProperties ip_properties = adapter.GetIPProperties();
+ if (adapter.GetIPProperties().MulticastAddresses.Count == 0
+ // most of VPN adapters will be skipped
+ || !adapter.SupportsMulticast
+ // multicast is meaningless for this type of connection
+ || OperationalStatus.Up != adapter.OperationalStatus
+ // this adapter is off or not connected
+ || !adapter.Supports(NetworkInterfaceComponent.IPv4)
+ ) continue;
+ IPInterfaceProperties adapterProperties = adapter.GetIPProperties();
+ UnicastIPAddressInformationCollection unicastIPAddresses
+ = adapterProperties.UnicastAddresses;
+ IPv4InterfaceProperties p = adapterProperties.GetIPv4Properties();
+ if (p == null) continue; // IPv4 is not configured on this adapter
+ SurpportedNetworkInterfaces.Add(IPAddress.HostToNetworkOrder(p.Index));
+ IPAddress ipAddress = null;
+ foreach (UnicastIPAddressInformation unicastIPAddress in unicastIPAddresses)
+ {
+ if (unicastIPAddress.Address.AddressFamily != AddressFamily.InterNetwork) continue;
+ ipAddress = unicastIPAddress.Address;
+ break;
+ }
+ if (ipAddress == null) continue;
+ foreach (var udpClient in clients)
+ udpClient.JoinMulticastGroup(multicastAddress, ipAddress);
+ }
+ }
///
/// 澶氳澶囧箍鎾彂閫佹柟娉
///
public static void MultiDevicesBroadCastSend()
{
- UdpClient udpClient = new(Program.GlobalConfig.App.UDPPortSend);
- udpClient.JoinMulticastGroup(IPAddress.Parse("224.0.0.0"));
- IPEndPoint multicast = new(IPAddress.Parse("224.0.0.0"),
- Program.GlobalConfig.App.UDPPortReceive);
+ #region 鍒濆鍖 UDP 瀹㈡埛绔
+
+ UdpClient udpClient = UdpClient_Send;
+ IPEndPoint multicast = new(IPAddress.Parse(Program.Config.Web.UDPBroadcastAddress),
+ Program.Config.Web.UDPPortReceive);
+
+ #endregion
+
System.Timers.Timer timer = new()
{
Interval = 2000,
@@ -192,7 +259,13 @@ public static void MultiDevicesBroadCastSend()
{
string sendText = JsonSerializer.Serialize(GetDeviceInfo());
byte[] sendBytes = Encoding.UTF8.GetBytes(sendText);
- udpClient.Send(sendBytes, sendBytes.Length, multicast);
+
+ foreach (var item in SurpportedNetworkInterfaces)
+ {
+ udpClient.Client.SetSocketOption(SocketOptionLevel.IP,
+ SocketOptionName.MulticastInterface, item);
+ udpClient.Send(sendBytes, sendBytes.Length, multicast);
+ }
}
catch (Exception e)
{
@@ -214,10 +287,13 @@ public static void MultiDevicesBroadCastSend()
///
public static void MultiDevicesBroadCastReceive()
{
- UdpClient udpClient = new(Program.GlobalConfig.App.UDPPortReceive);
- udpClient.JoinMulticastGroup(IPAddress.Parse("224.0.0.0"));
- IPEndPoint multicast = new(IPAddress.Parse("224.0.0.0"),
- Program.GlobalConfig.App.UDPPortSend);
+ #region 鍒濆鍖 UDP 瀹㈡埛绔
+
+ UdpClient udpClient = UdpClient_Receive;
+ IPEndPoint multicast = new(IPAddress.Any, 0);
+
+ #endregion
+
new Thread(() =>
{
try
@@ -265,7 +341,7 @@ private static string GetInterNetworkIPv4()
|| (IPv4_2_4Parts(ip.ToString()).Item1 == 172 // 172.16-31.x.x
&& IPv4_2_4Parts(ip.ToString()).Item2 >= 16
&& IPv4_2_4Parts(ip.ToString()).Item2 <= 31))
- && ip.ToString().StartsWith(Program.GlobalConfig.App.IPFilter) // 婊¤冻鑷畾涔夎鍒
+ && ip.ToString().StartsWith(Program.Config.Web.IPFilter) // 婊¤冻鑷畾涔夎鍒
select ip).First().ToString();
}
@@ -293,6 +369,8 @@ private static string GetInterNetworkIPv4()
PluginsCount = Program.PluginCards.Count,
};
+ #endregion
+
///
/// 閲婃斁璧勬簮
///
diff --git a/KitX Dashboard/ViewModels/AnouncementsWindowViewModel.cs b/KitX Dashboard/ViewModels/AnouncementsWindowViewModel.cs
index 10e4b6d9..a640d564 100644
--- a/KitX Dashboard/ViewModels/AnouncementsWindowViewModel.cs
+++ b/KitX Dashboard/ViewModels/AnouncementsWindowViewModel.cs
@@ -28,14 +28,14 @@ private void InitCommands()
internal static double Window_Width
{
- get => Program.GlobalConfig.Windows.AnnouncementWindow.Window_Width;
- set => Program.GlobalConfig.Windows.AnnouncementWindow.Window_Width = value;
+ get => Program.Config.Windows.AnnouncementWindow.Window_Width;
+ set => Program.Config.Windows.AnnouncementWindow.Window_Width = value;
}
internal static double Window_Height
{
- get => Program.GlobalConfig.Windows.AnnouncementWindow.Window_Height;
- set => Program.GlobalConfig.Windows.AnnouncementWindow.Window_Height = value;
+ get => Program.Config.Windows.AnnouncementWindow.Window_Height;
+ set => Program.Config.Windows.AnnouncementWindow.Window_Height = value;
}
private NavigationViewItem? selectedMenuItem;
diff --git a/KitX Dashboard/ViewModels/Pages/Controls/PluginBarViewModel.cs b/KitX Dashboard/ViewModels/Pages/Controls/PluginBarViewModel.cs
index ad00ed10..fc3d50fe 100644
--- a/KitX Dashboard/ViewModels/Pages/Controls/PluginBarViewModel.cs
+++ b/KitX Dashboard/ViewModels/Pages/Controls/PluginBarViewModel.cs
@@ -8,7 +8,6 @@
using System.ComponentModel;
using System.Drawing;
using System.IO;
-using System.Text;
namespace KitX_Dashboard.ViewModels.Pages.Controls
{
@@ -47,8 +46,8 @@ internal string? DisplayName
{
if (PluginDetail != null)
return PluginDetail.PluginDetails.DisplayName
- .ContainsKey(Program.GlobalConfig.App.AppLanguage)
- ? PluginDetail.PluginDetails.DisplayName[Program.GlobalConfig.App.AppLanguage]
+ .ContainsKey(Program.Config.App.AppLanguage)
+ ? PluginDetail.PluginDetails.DisplayName[Program.Config.App.AppLanguage]
: PluginDetail.PluginDetails.DisplayName.Values.GetEnumerator().Current;
return null;
}
diff --git a/KitX Dashboard/ViewModels/Pages/Controls/PluginCardViewModel.cs b/KitX Dashboard/ViewModels/Pages/Controls/PluginCardViewModel.cs
index e06baf4b..380db85a 100644
--- a/KitX Dashboard/ViewModels/Pages/Controls/PluginCardViewModel.cs
+++ b/KitX Dashboard/ViewModels/Pages/Controls/PluginCardViewModel.cs
@@ -4,7 +4,6 @@
using Serilog;
using System;
using System.IO;
-using System.Text;
namespace KitX_Dashboard.ViewModels.Pages.Controls
{
@@ -18,15 +17,15 @@ public PluginCardViewModel()
}
internal string DisplayName => pluginStruct.DisplayName
- .ContainsKey(Program.GlobalConfig.App.AppLanguage)
- ? pluginStruct.DisplayName[Program.GlobalConfig.App.AppLanguage]
+ .ContainsKey(Program.Config.App.AppLanguage)
+ ? pluginStruct.DisplayName[Program.Config.App.AppLanguage]
: pluginStruct.DisplayName.Values.GetEnumerator().Current;
internal string Version => pluginStruct.Version;
internal string SimpleDescription => pluginStruct.SimpleDescription.ContainsKey(
- Program.GlobalConfig.App.AppLanguage)
- ? pluginStruct.SimpleDescription[Program.GlobalConfig.App.AppLanguage]
+ Program.Config.App.AppLanguage)
+ ? pluginStruct.SimpleDescription[Program.Config.App.AppLanguage]
: string.Empty;
internal string IconInBase64 => pluginStruct.IconInBase64;
diff --git a/KitX Dashboard/ViewModels/Pages/Controls/Settings_GeneralViewModel.cs b/KitX Dashboard/ViewModels/Pages/Controls/Settings_GeneralViewModel.cs
index dbb7d85a..0c5b168d 100644
--- a/KitX Dashboard/ViewModels/Pages/Controls/Settings_GeneralViewModel.cs
+++ b/KitX Dashboard/ViewModels/Pages/Controls/Settings_GeneralViewModel.cs
@@ -36,7 +36,7 @@ internal Settings_GeneralViewModel()
///
private void InitData()
{
- foreach (var item in Program.GlobalConfig.App.SurpportLanguages)
+ foreach (var item in Program.Config.App.SurpportLanguages)
{
SurpportLanguages.Add(new SurpportLanguages()
{
@@ -45,7 +45,7 @@ private void InitData()
});
}
LanguageSelected = SurpportLanguages.FindIndex(0, SurpportLanguages.Count,
- new LanguageMatch(Program.GlobalConfig.App.AppLanguage).IsIt);
+ new LanguageMatch(Program.Config.App.AppLanguage).IsIt);
}
///
@@ -75,9 +75,9 @@ private void InitCommands()
FluentAvaloniaTheme.HighContrastModeString
};
- private string _currentAppTheme = Program.GlobalConfig.App.Theme == "Follow"
+ private string _currentAppTheme = Program.Config.App.Theme == "Follow"
? AvaloniaLocator.Current.GetService().RequestedTheme
- : Program.GlobalConfig.App.Theme;
+ : Program.Config.App.Theme;
private Color2 nowColor = new();
@@ -98,7 +98,7 @@ internal string CurrentAppTheme
get => _currentAppTheme;
set
{
- Program.GlobalConfig.App.Theme = value;
+ Program.Config.App.Theme = value;
if (RaiseAndSetIfChanged(ref _currentAppTheme, value))
{
var faTheme = AvaloniaLocator.Current.GetService();
@@ -115,7 +115,7 @@ internal string CurrentAppTheme
///
internal static void LoadLanguage()
{
- string lang = Program.GlobalConfig.App.AppLanguage;
+ string lang = Program.Config.App.AppLanguage;
try
{
Application.Current.Resources.MergedDictionaries.Clear();
@@ -160,7 +160,7 @@ internal int LanguageSelected
try
{
languageSelected = value;
- Program.GlobalConfig.App.AppLanguage = SurpportLanguages[value].LanguageCode;
+ Program.Config.App.AppLanguage = SurpportLanguages[value].LanguageCode;
LoadLanguage();
SaveChanges();
}
@@ -176,10 +176,10 @@ internal int LanguageSelected
///
internal static int MicaStatus
{
- get => Program.GlobalConfig.Windows.MainWindow.EnabledMica ? 0 : 1;
+ get => Program.Config.Windows.MainWindow.EnabledMica ? 0 : 1;
set
{
- Program.GlobalConfig.Windows.MainWindow.EnabledMica = value != 1;
+ Program.Config.Windows.MainWindow.EnabledMica = value != 1;
SaveChanges();
}
}
@@ -189,10 +189,10 @@ internal static int MicaStatus
///
internal static double MicaOpacity
{
- get => Program.GlobalConfig.Windows.MainWindow.MicaOpacity;
+ get => Program.Config.Windows.MainWindow.MicaOpacity;
set
{
- Program.GlobalConfig.Windows.MainWindow.MicaOpacity = value;
+ Program.Config.Windows.MainWindow.MicaOpacity = value;
EventHandlers.Invoke("MicaOpacityChanged");
}
}
@@ -207,8 +207,8 @@ internal static double MicaOpacity
///
internal static string LocalIPFilter
{
- get => Program.GlobalConfig.App.IPFilter;
- set => Program.GlobalConfig.App.IPFilter = value;
+ get => Program.Config.Web.IPFilter;
+ set => Program.Config.Web.IPFilter = value;
}
///
@@ -216,10 +216,10 @@ internal static string LocalIPFilter
///
internal static int GreetingTextUpdateInterval
{
- get => Program.GlobalConfig.Windows.MainWindow.GreetingUpdateInterval;
+ get => Program.Config.Windows.MainWindow.GreetingUpdateInterval;
set
{
- Program.GlobalConfig.Windows.MainWindow.GreetingUpdateInterval = value;
+ Program.Config.Windows.MainWindow.GreetingUpdateInterval = value;
EventHandlers.Invoke("GreetingTextIntervalUpdated");
SaveChanges();
}
@@ -230,10 +230,10 @@ internal static int GreetingTextUpdateInterval
///
internal static string LocalPluginsFileDirectory
{
- get => Program.GlobalConfig.App.LocalPluginsFileDirectory;
+ get => Program.Config.App.LocalPluginsFileDirectory;
set
{
- Program.GlobalConfig.App.LocalPluginsFileDirectory = value;
+ Program.Config.App.LocalPluginsFileDirectory = value;
SaveChanges();
}
}
@@ -243,10 +243,10 @@ internal static string LocalPluginsFileDirectory
///
internal static string LocalPluginsDataDirectory
{
- get => Program.GlobalConfig.App.LocalPluginsDataDirectory;
+ get => Program.Config.App.LocalPluginsDataDirectory;
set
{
- Program.GlobalConfig.App.LocalPluginsDataDirectory = value;
+ Program.Config.App.LocalPluginsDataDirectory = value;
SaveChanges();
}
}
@@ -256,10 +256,10 @@ internal static string LocalPluginsDataDirectory
///
internal static int ShowAnnouncementsStatus
{
- get => Program.GlobalConfig.App.ShowAnnouncementWhenStart ? 0 : 1;
+ get => Program.Config.App.ShowAnnouncementWhenStart ? 0 : 1;
set
{
- Program.GlobalConfig.App.ShowAnnouncementWhenStart = value == 0;
+ Program.Config.App.ShowAnnouncementWhenStart = value == 0;
SaveChanges();
}
}
@@ -269,11 +269,11 @@ internal static int ShowAnnouncementsStatus
///
internal int DeveloperSettingStatus
{
- get => Program.GlobalConfig.App.DeveloperSetting ? 0 : 1;
+ get => Program.Config.App.DeveloperSetting ? 0 : 1;
set
{
- Program.GlobalConfig.App.DeveloperSetting = value == 0;
- MicaOpacityConfirmButtonVisibility = Program.GlobalConfig.App.DeveloperSetting;
+ Program.Config.App.DeveloperSetting = value == 0;
+ MicaOpacityConfirmButtonVisibility = Program.Config.App.DeveloperSetting;
SaveChanges();
}
}
@@ -283,10 +283,10 @@ internal int DeveloperSettingStatus
///
internal static bool MicaToolTipIsOpen
{
- get => Program.GlobalConfig.Pages.SettingsPage.MicaToolTipIsOpen;
+ get => Program.Config.Pages.SettingsPage.MicaToolTipIsOpen;
set
{
- Program.GlobalConfig.Pages.SettingsPage.MicaToolTipIsOpen = value;
+ Program.Config.Pages.SettingsPage.MicaToolTipIsOpen = value;
SaveChanges();
}
}
@@ -296,7 +296,7 @@ internal static bool MicaToolTipIsOpen
///
internal bool MicaOpacityConfirmButtonVisibility
{
- get => Program.GlobalConfig.App.DeveloperSetting;
+ get => Program.Config.App.DeveloperSetting;
set => PropertyChanged?.Invoke(this,
new(nameof(MicaOpacityConfirmButtonVisibility)));
}
@@ -334,7 +334,7 @@ private void ColorConfirmed(object _)
new SolidColorBrush(new Color((byte)(i * 10 + i), c.R, c.G, c.B));
}
});
- Program.GlobalConfig.App.ThemeColor = nowColor.ToHexString();
+ Program.Config.App.ThemeColor = nowColor.ToHexString();
SaveChanges();
}
diff --git a/KitX Dashboard/ViewModels/Pages/HomePageViewModel.cs b/KitX Dashboard/ViewModels/Pages/HomePageViewModel.cs
index f8b74d8e..bcdcb245 100644
--- a/KitX Dashboard/ViewModels/Pages/HomePageViewModel.cs
+++ b/KitX Dashboard/ViewModels/Pages/HomePageViewModel.cs
@@ -9,10 +9,10 @@ public HomePageViewModel()
internal static bool IsPaneOpen
{
- get => Program.GlobalConfig.Pages.HomePage.IsNavigationViewPaneOpened;
+ get => Program.Config.Pages.HomePage.IsNavigationViewPaneOpened;
set
{
- Program.GlobalConfig.Pages.HomePage.IsNavigationViewPaneOpened = value;
+ Program.Config.Pages.HomePage.IsNavigationViewPaneOpened = value;
Models.EventHandlers.Invoke("ConfigSettingsChanged");
}
}
diff --git a/KitX Dashboard/ViewModels/Pages/RepoPageViewModel.cs b/KitX Dashboard/ViewModels/Pages/RepoPageViewModel.cs
index 30e14653..ed558f90 100644
--- a/KitX Dashboard/ViewModels/Pages/RepoPageViewModel.cs
+++ b/KitX Dashboard/ViewModels/Pages/RepoPageViewModel.cs
@@ -36,7 +36,7 @@ private void InitEvents()
{
Models.EventHandlers.ConfigSettingsChanged += () =>
{
- ImportButtonVisibility = Program.GlobalConfig.App.DeveloperSetting;
+ ImportButtonVisibility = Program.Config.App.DeveloperSetting;
};
}
@@ -77,10 +77,10 @@ internal double NoPlugins_TipHeight
internal bool ImportButtonVisibility
{
- get => Program.GlobalConfig.App.DeveloperSetting;
+ get => Program.Config.App.DeveloperSetting;
set
{
- Program.GlobalConfig.App.DeveloperSetting = value;
+ Program.Config.App.DeveloperSetting = value;
PropertyChanged?.Invoke(this, new(nameof(ImportButtonVisibility)));
}
}
diff --git a/KitX Dashboard/ViewModels/Pages/SettingsPageViewModel.cs b/KitX Dashboard/ViewModels/Pages/SettingsPageViewModel.cs
index dd38fbdb..3f61915e 100644
--- a/KitX Dashboard/ViewModels/Pages/SettingsPageViewModel.cs
+++ b/KitX Dashboard/ViewModels/Pages/SettingsPageViewModel.cs
@@ -9,10 +9,10 @@ internal SettingsPageViewModel()
internal static bool IsPaneOpen
{
- get => Program.GlobalConfig.Pages.SettingsPage.IsNavigationViewPaneOpened;
+ get => Program.Config.Pages.SettingsPage.IsNavigationViewPaneOpened;
set
{
- Program.GlobalConfig.Pages.SettingsPage.IsNavigationViewPaneOpened = value;
+ Program.Config.Pages.SettingsPage.IsNavigationViewPaneOpened = value;
Models.EventHandlers.Invoke("ConfigSettingsChanged");
}
}
diff --git a/KitX Dashboard/Views/AnouncementsWindow.axaml.cs b/KitX Dashboard/Views/AnouncementsWindow.axaml.cs
index 497daecd..8687e33d 100644
--- a/KitX Dashboard/Views/AnouncementsWindow.axaml.cs
+++ b/KitX Dashboard/Views/AnouncementsWindow.axaml.cs
@@ -24,11 +24,11 @@ public AnouncementsWindow()
Position = new(
WindowAttributesConverter.PositionCameCenter(
- Program.GlobalConfig.Windows.AnnouncementWindow.Window_Left,
+ Program.Config.Windows.AnnouncementWindow.Window_Left,
true, Screens
),
WindowAttributesConverter.PositionCameCenter(
- Program.GlobalConfig.Windows.AnnouncementWindow.Window_Top,
+ Program.Config.Windows.AnnouncementWindow.Window_Top,
false, Screens
)
);
@@ -51,10 +51,10 @@ private void InitializeComponent()
private void SaveMetaData()
{
- Program.GlobalConfig.Windows.AnnouncementWindow.Window_Left = Position.X;
- Program.GlobalConfig.Windows.AnnouncementWindow.Window_Top = Position.Y;
- Program.GlobalConfig.Windows.AnnouncementWindow.Window_Width = Width;
- Program.GlobalConfig.Windows.AnnouncementWindow.Window_Height = Height;
+ Program.Config.Windows.AnnouncementWindow.Window_Left = Position.X;
+ Program.Config.Windows.AnnouncementWindow.Window_Top = Position.Y;
+ Program.Config.Windows.AnnouncementWindow.Window_Width = Width;
+ Program.Config.Windows.AnnouncementWindow.Window_Height = Height;
}
protected override void OnClosing(CancelEventArgs e)
diff --git a/KitX Dashboard/Views/MainWindow.axaml.cs b/KitX Dashboard/Views/MainWindow.axaml.cs
index 857001b9..35d6cedf 100644
--- a/KitX Dashboard/Views/MainWindow.axaml.cs
+++ b/KitX Dashboard/Views/MainWindow.axaml.cs
@@ -44,11 +44,11 @@ public MainWindow()
Position = new(
WindowAttributesConverter.PositionCameCenter(
- Program.GlobalConfig.Windows.MainWindow.Window_Left,
+ Program.Config.Windows.MainWindow.Window_Left,
true, Screens
),
WindowAttributesConverter.PositionCameCenter(
- Program.GlobalConfig.Windows.MainWindow.Window_Top,
+ Program.Config.Windows.MainWindow.Window_Top,
false, Screens
)
);
@@ -56,15 +56,15 @@ public MainWindow()
if (OperatingSystem.IsWindows())
{
ClientSize = new(
- Program.GlobalConfig.Windows.MainWindow.Window_Width + 16,
- Program.GlobalConfig.Windows.MainWindow.Window_Height + 38
+ Program.Config.Windows.MainWindow.Window_Width + 16,
+ Program.Config.Windows.MainWindow.Window_Height + 38
);
}
else
{
ClientSize = new(
- Program.GlobalConfig.Windows.MainWindow.Window_Width,
- Program.GlobalConfig.Windows.MainWindow.Window_Height
+ Program.Config.Windows.MainWindow.Window_Width,
+ Program.Config.Windows.MainWindow.Window_Height
);
}
@@ -81,18 +81,18 @@ public MainWindow()
private void InitMainWindow()
{
// 瀵艰埅鍒颁笂娆″叧闂椂鐣岄潰
- SelectedPageName = Program.GlobalConfig.Windows.MainWindow.Tags["SelectedPage"];
+ SelectedPageName = Program.Config.Windows.MainWindow.Tags["SelectedPage"];
MainNavigationView.SelectedItem = this.FindControl(SelectedPageName);
// 濡傛灉涓婚涓嶈缃负 `璺熼殢绯荤粺` 鍒欐墜鍔ㄥ彉鏇翠富棰
- if (!Program.GlobalConfig.App.Theme.Equals("Follow"))
+ if (!Program.Config.App.Theme.Equals("Follow"))
AvaloniaLocator.Current.GetService().RequestedTheme =
- Program.GlobalConfig.App.Theme;
+ Program.Config.App.Theme;
// 閫忔槑搴﹀彉鏇翠簨浠, 璁╅忔槑搴﹀彉鏇寸珛鍗崇敓鏁
EventHandlers.MicaOpacityChanged += () =>
{
- if (Program.GlobalConfig.Windows.MainWindow.EnabledMica)
+ if (Program.Config.Windows.MainWindow.EnabledMica)
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && IsWindows11)
{
switch (AvaloniaLocator.Current.GetService().RequestedTheme)
@@ -102,14 +102,14 @@ private void InitMainWindow()
out var value1) ? (Color2)(Color)value1 : new Color2(32, 32, 32);
Background = new ImmutableSolidColorBrush(color1,
- Program.GlobalConfig.Windows.MainWindow.MicaOpacity);
+ Program.Config.Windows.MainWindow.MicaOpacity);
break;
case "Dark":
var color2 = this.TryFindResource("SolidBackgroundFillColorBase",
out var value2) ? (Color2)(Color)value2 : new Color2(243, 243, 243);
Background = new ImmutableSolidColorBrush(color2,
- Program.GlobalConfig.Windows.MainWindow.MicaOpacity);
+ Program.Config.Windows.MainWindow.MicaOpacity);
break;
}
}
@@ -122,7 +122,7 @@ private void InitMainWindow()
Timer timer = new()
{
AutoReset = true,
- Interval = 1000 * 60 * Program.GlobalConfig.Windows.MainWindow.GreetingUpdateInterval
+ Interval = 1000 * 60 * Program.Config.Windows.MainWindow.GreetingUpdateInterval
};
timer.Elapsed += (_, _) => UpdateGreetingText();
timer.Start();
@@ -194,19 +194,19 @@ private void MainNavigationView_SelectionChanged(object? sender,
///
private void SaveMetaData()
{
- Program.GlobalConfig.Windows.MainWindow.Window_Left = Position.X;
- Program.GlobalConfig.Windows.MainWindow.Window_Top = Position.Y;
+ Program.Config.Windows.MainWindow.Window_Left = Position.X;
+ Program.Config.Windows.MainWindow.Window_Top = Position.Y;
if (OperatingSystem.IsWindows())
{
- Program.GlobalConfig.Windows.MainWindow.Window_Width = ClientSize.Width;
- Program.GlobalConfig.Windows.MainWindow.Window_Height = ClientSize.Height - 30;
+ Program.Config.Windows.MainWindow.Window_Width = ClientSize.Width;
+ Program.Config.Windows.MainWindow.Window_Height = ClientSize.Height - 30;
}
else
{
- Program.GlobalConfig.Windows.MainWindow.Window_Width = ClientSize.Width;
- Program.GlobalConfig.Windows.MainWindow.Window_Height = ClientSize.Height;
+ Program.Config.Windows.MainWindow.Window_Width = ClientSize.Width;
+ Program.Config.Windows.MainWindow.Window_Height = ClientSize.Height;
}
- Program.GlobalConfig.Windows.MainWindow.
+ Program.Config.Windows.MainWindow.
Tags["SelectedPage"] = SelectedPageName;
}
@@ -244,7 +244,7 @@ protected override void OnOpened(EventArgs e)
// 濡傛灉鏄 Windows 绯荤粺, 涓旀暟鎹簱琛ㄧず鍚敤 Mica 鏁堟灉
//if ((bool)(Helper.local_db_table.Query(1).ReturnResult as List