From 22678ea22b1e05e8c04c80c45482aa8fb5ee31ed Mon Sep 17 00:00:00 2001 From: Dynesshely Date: Sat, 24 Sep 2022 15:08:36 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=F0=9F=94=A7=20Fix(GitHub):=20type=20erro?= =?UTF-8?q?r=20:)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/---bug-report.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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. From 9ce55d443c424fe3a30f8ea09d1c5843ef4fb1c3 Mon Sep 17 00:00:00 2001 From: Dynesshely Date: Sat, 24 Sep 2022 23:03:58 +0800 Subject: [PATCH 02/11] =?UTF-8?q?=F0=9F=92=BE=20=F0=9F=94=A7=20Feat,=20Fix?= =?UTF-8?q?(Dashboard.WebServer):=20=E5=90=91=E6=89=80=E6=9C=89=E5=8F=97?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=9A=84=E7=BD=91=E7=BB=9C=E9=80=82=E9=85=8D?= =?UTF-8?q?=E5=99=A8=E5=8F=91=E9=80=81=E6=8A=A5=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KitX Dashboard/Services/WebServer.cs | 45 ++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/KitX Dashboard/Services/WebServer.cs b/KitX Dashboard/Services/WebServer.cs index 13cf181f..55a17f26 100644 --- a/KitX Dashboard/Services/WebServer.cs +++ b/KitX Dashboard/Services/WebServer.cs @@ -177,10 +177,42 @@ private async void ReciveMessage(object obj) /// public static void MultiDevicesBroadCastSend() { - UdpClient udpClient = new(Program.GlobalConfig.App.UDPPortSend); + #region 初始化 UDP 客户端 + + UdpClient udpClient = new(Program.GlobalConfig.App.UDPPortSend, + AddressFamily.InterNetwork) + { + EnableBroadcast = true, + MulticastLoopback = true + }; udpClient.JoinMulticastGroup(IPAddress.Parse("224.0.0.0")); IPEndPoint multicast = new(IPAddress.Parse("224.0.0.0"), Program.GlobalConfig.App.UDPPortReceive); + + #endregion + + #region 寻找受支持的网络适配器 + + List networkInterfaceIndexes = new(); + 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 + ) + continue; + IPv4InterfaceProperties p = adapter.GetIPProperties().GetIPv4Properties(); + if (p == null) continue; // IPv4 is not configured on this adapter + networkInterfaceIndexes.Add(IPAddress.HostToNetworkOrder(p.Index)); + } + + #endregion + System.Timers.Timer timer = new() { Interval = 2000, @@ -192,7 +224,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 networkInterfaceIndexes) + { + udpClient.Client.SetSocketOption(SocketOptionLevel.IP, + SocketOptionName.MulticastInterface, item); + udpClient.Send(sendBytes, sendBytes.Length, multicast); + } } catch (Exception e) { @@ -214,7 +252,8 @@ public static void MultiDevicesBroadCastSend() /// public static void MultiDevicesBroadCastReceive() { - UdpClient udpClient = new(Program.GlobalConfig.App.UDPPortReceive); + UdpClient udpClient = new(Program.GlobalConfig.App.UDPPortReceive, + AddressFamily.InterNetwork); udpClient.JoinMulticastGroup(IPAddress.Parse("224.0.0.0")); IPEndPoint multicast = new(IPAddress.Parse("224.0.0.0"), Program.GlobalConfig.App.UDPPortSend); From f2683b85fb84503216b6bfe8c1b9f02a915b1ae8 Mon Sep 17 00:00:00 2001 From: Dynesshely Date: Sat, 24 Sep 2022 23:14:29 +0800 Subject: [PATCH 03/11] =?UTF-8?q?=F0=9F=8E=87=20Style:=20=E7=BC=A9?= =?UTF-8?q?=E5=87=8F=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KitX Dashboard/App.axaml.cs | 12 ++-- KitX Dashboard/Helper.cs | 14 ++--- .../Models/GreetingTextGenerator.cs | 10 ++-- KitX Dashboard/Program.cs | 4 +- KitX Dashboard/Services/AnouncementManager.cs | 6 +- KitX Dashboard/Services/PluginsManager.cs | 4 +- .../ViewModels/AnouncementsWindowViewModel.cs | 8 +-- .../Pages/Controls/PluginBarViewModel.cs | 4 +- .../Pages/Controls/PluginCardViewModel.cs | 8 +-- .../Controls/Settings_GeneralViewModel.cs | 56 +++++++++---------- .../ViewModels/Pages/HomePageViewModel.cs | 4 +- .../ViewModels/Pages/RepoPageViewModel.cs | 6 +- .../ViewModels/Pages/SettingsPageViewModel.cs | 4 +- .../Views/AnouncementsWindow.axaml.cs | 12 ++-- KitX Dashboard/Views/MainWindow.axaml.cs | 46 +++++++-------- KitX Dashboard/Views/Pages/HomePage.axaml.cs | 4 +- .../Views/Pages/SettingsPage.axaml.cs | 4 +- 17 files changed, 103 insertions(+), 103 deletions(-) diff --git a/KitX Dashboard/App.axaml.cs b/KitX Dashboard/App.axaml.cs index 7178e85b..3458fb52 100644 --- a/KitX Dashboard/App.axaml.cs +++ b/KitX Dashboard/App.axaml.cs @@ -24,7 +24,7 @@ public override void Initialize() { AvaloniaXamlLoader.Load(this); - string lang = Program.GlobalConfig.App.AppLanguage; + string lang = Program.AppConfig.App.AppLanguage; try { Resources.MergedDictionaries.Clear(); @@ -38,7 +38,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.AppConfig.App.SurpportLanguages.Keys.First(); Resources.MergedDictionaries.Clear(); Resources.MergedDictionaries.Add( AvaloniaRuntimeXamlLoader.Load( @@ -46,7 +46,7 @@ public override void Initialize() ) as ResourceDictionary ); - Program.GlobalConfig.App.AppLanguage = backup_lang; + Program.AppConfig.App.AppLanguage = backup_lang; } finally { @@ -55,7 +55,7 @@ public override void Initialize() EventHandlers.Invoke("LanguageChanged"); - Color c = Color.Parse(Program.GlobalConfig.App.ThemeColor); + Color c = Color.Parse(Program.AppConfig.App.ThemeColor); if (Current != null) { @@ -84,10 +84,10 @@ public override void OnFrameworkInitializationCompleted() }; } - string color = Program.GlobalConfig.App.ThemeColor; + string color = Program.AppConfig.App.ThemeColor; Resources["ThemePrimaryAccent"] = new SolidColorBrush(Color.Parse(color)); - if (Program.GlobalConfig.App.ShowAnnouncementWhenStart) + if (Program.AppConfig.App.ShowAnnouncementWhenStart) new Thread(async () => { await Services.AnouncementManager.CheckNewAnnouncements(); diff --git a/KitX Dashboard/Helper.cs b/KitX Dashboard/Helper.cs index 342b2c24..79ae34b3 100644 --- a/KitX Dashboard/Helper.cs +++ b/KitX Dashboard/Helper.cs @@ -32,7 +32,7 @@ public static void StartUpCheck() //InitLiteLogger(Program.LocalLogger); - string logdir = Path.GetFullPath(Program.GlobalConfig.App.LogFilePath); + string logdir = Path.GetFullPath(Program.AppConfig.App.LogFilePath); if (!Directory.Exists(logdir)) Directory.CreateDirectory(logdir); @@ -41,14 +41,14 @@ public static void StartUpCheck() .MinimumLevel.Information() .WriteTo.File( $"{logdir}Log_.log", - outputTemplate: Program.GlobalConfig.App.LogTemplate, + outputTemplate: Program.AppConfig.App.LogTemplate, rollingInterval: RollingInterval.Hour, - fileSizeLimitBytes: Program.GlobalConfig.App.LogFileSingleMaxSize, + fileSizeLimitBytes: Program.AppConfig.App.LogFileSingleMaxSize, buffered: true, - flushToDiskInterval: new(0, 0, Program.GlobalConfig.App.LogFileFlushInterval), + flushToDiskInterval: new(0, 0, Program.AppConfig.App.LogFileFlushInterval), restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Information, rollOnFileSizeLimit: true, - retainedFileCountLimit: Program.GlobalConfig.App.LogFileMaxCount + retainedFileCountLimit: Program.AppConfig.App.LogFileMaxCount ) .CreateLogger(); @@ -90,7 +90,7 @@ public static void SaveConfig() new Thread(() => { BasicHelper.IO.FileHelper.WriteIn(Path.GetFullPath(GlobalInfo.ConfigFilePath), - JsonSerializer.Serialize(Program.GlobalConfig, options)); + JsonSerializer.Serialize(Program.AppConfig, options)); }).Start(); } @@ -117,7 +117,7 @@ public static void SavePluginsListConfig() /// public static void LoadConfig() { - Program.GlobalConfig = JsonSerializer.Deserialize( + Program.AppConfig = 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..33d5fcec 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.AppConfig.Windows .MainWindow.GreetingTextCount_Morning + 1); break; case Step.Noon: - result = random.Next(1, Program.GlobalConfig.Windows + result = random.Next(1, Program.AppConfig.Windows .MainWindow.GreetingTextCount_Noon + 1); break; case Step.AfterNoon: - result = random.Next(1, Program.GlobalConfig.Windows + result = random.Next(1, Program.AppConfig.Windows .MainWindow.GreetingTextCount_AfterNoon + 1); break; case Step.Evening: - result = random.Next(1, Program.GlobalConfig.Windows + result = random.Next(1, Program.AppConfig.Windows .MainWindow.GreetingTextCount_Evening + 1); break; case Step.Night: - result = random.Next(1, Program.GlobalConfig.Windows + result = random.Next(1, Program.AppConfig.Windows .MainWindow.GreetingTextCount_Night + 1); break; } diff --git a/KitX Dashboard/Program.cs b/KitX Dashboard/Program.cs index 92a418b3..7a77774f 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 Config AppConfig = new(); internal static WebServer? LocalWebServer; @@ -87,7 +87,7 @@ public static void Main(string[] args) #endregion - GlobalConfig.App.RanTime++; + AppConfig.App.RanTime++; #region Ӧѭ diff --git a/KitX Dashboard/Services/AnouncementManager.cs b/KitX Dashboard/Services/AnouncementManager.cs index 9f9fbf3c..f90413d6 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.AppConfig.App.APIServer}" + + $"{Program.AppConfig.App.APIPath}"; // 获取公告列表的api链接 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.AppConfig.App.AppLanguage}" + $"&" + $"date={item:yyyy-MM-dd HH-mm}"; string? md = JsonSerializer.Deserialize(await client.GetStringAsync(apiLink)); diff --git a/KitX Dashboard/Services/PluginsManager.cs b/KitX Dashboard/Services/PluginsManager.cs index 185861bb..5fec9632 100644 --- a/KitX Dashboard/Services/PluginsManager.cs +++ b/KitX Dashboard/Services/PluginsManager.cs @@ -164,7 +164,7 @@ internal static void ImportPlugin(string[] kxpfiles, bool inGraphic = false) LoaderStruct loaderStruct = JsonSerializer.Deserialize(rst.Item1); PluginStruct pluginStruct = JsonSerializer.Deserialize(rst.Item2); Config? config = null; - if (inGraphic) config = Program.GlobalConfig; + if (inGraphic) config = Program.AppConfig; else config = JsonSerializer.Deserialize(File.ReadAllText( Path.GetFullPath($"{GlobalInfo.ConfigPath}config.json") )); @@ -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.AppConfig.App.LocalPluginsFileDirectory}/" + $"{pg.PluginDetails.PublisherName}_{pg.PluginDetails.AuthorName}/" + $"{pg.PluginDetails.Name}/{pg.PluginDetails.Version}/" ); diff --git a/KitX Dashboard/ViewModels/AnouncementsWindowViewModel.cs b/KitX Dashboard/ViewModels/AnouncementsWindowViewModel.cs index 10e4b6d9..6c98685c 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.AppConfig.Windows.AnnouncementWindow.Window_Width; + set => Program.AppConfig.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.AppConfig.Windows.AnnouncementWindow.Window_Height; + set => Program.AppConfig.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..4185ffe5 100644 --- a/KitX Dashboard/ViewModels/Pages/Controls/PluginBarViewModel.cs +++ b/KitX Dashboard/ViewModels/Pages/Controls/PluginBarViewModel.cs @@ -47,8 +47,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.AppConfig.App.AppLanguage) + ? PluginDetail.PluginDetails.DisplayName[Program.AppConfig.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..89a32b3e 100644 --- a/KitX Dashboard/ViewModels/Pages/Controls/PluginCardViewModel.cs +++ b/KitX Dashboard/ViewModels/Pages/Controls/PluginCardViewModel.cs @@ -18,15 +18,15 @@ public PluginCardViewModel() } internal string DisplayName => pluginStruct.DisplayName - .ContainsKey(Program.GlobalConfig.App.AppLanguage) - ? pluginStruct.DisplayName[Program.GlobalConfig.App.AppLanguage] + .ContainsKey(Program.AppConfig.App.AppLanguage) + ? pluginStruct.DisplayName[Program.AppConfig.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.AppConfig.App.AppLanguage) + ? pluginStruct.SimpleDescription[Program.AppConfig.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..b5ec2dbd 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.AppConfig.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.AppConfig.App.AppLanguage).IsIt); } /// @@ -75,9 +75,9 @@ private void InitCommands() FluentAvaloniaTheme.HighContrastModeString }; - private string _currentAppTheme = Program.GlobalConfig.App.Theme == "Follow" + private string _currentAppTheme = Program.AppConfig.App.Theme == "Follow" ? AvaloniaLocator.Current.GetService().RequestedTheme - : Program.GlobalConfig.App.Theme; + : Program.AppConfig.App.Theme; private Color2 nowColor = new(); @@ -98,7 +98,7 @@ internal string CurrentAppTheme get => _currentAppTheme; set { - Program.GlobalConfig.App.Theme = value; + Program.AppConfig.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.AppConfig.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.AppConfig.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.AppConfig.Windows.MainWindow.EnabledMica ? 0 : 1; set { - Program.GlobalConfig.Windows.MainWindow.EnabledMica = value != 1; + Program.AppConfig.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.AppConfig.Windows.MainWindow.MicaOpacity; set { - Program.GlobalConfig.Windows.MainWindow.MicaOpacity = value; + Program.AppConfig.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.AppConfig.App.IPFilter; + set => Program.AppConfig.App.IPFilter = value; } /// @@ -216,10 +216,10 @@ internal static string LocalIPFilter /// internal static int GreetingTextUpdateInterval { - get => Program.GlobalConfig.Windows.MainWindow.GreetingUpdateInterval; + get => Program.AppConfig.Windows.MainWindow.GreetingUpdateInterval; set { - Program.GlobalConfig.Windows.MainWindow.GreetingUpdateInterval = value; + Program.AppConfig.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.AppConfig.App.LocalPluginsFileDirectory; set { - Program.GlobalConfig.App.LocalPluginsFileDirectory = value; + Program.AppConfig.App.LocalPluginsFileDirectory = value; SaveChanges(); } } @@ -243,10 +243,10 @@ internal static string LocalPluginsFileDirectory /// internal static string LocalPluginsDataDirectory { - get => Program.GlobalConfig.App.LocalPluginsDataDirectory; + get => Program.AppConfig.App.LocalPluginsDataDirectory; set { - Program.GlobalConfig.App.LocalPluginsDataDirectory = value; + Program.AppConfig.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.AppConfig.App.ShowAnnouncementWhenStart ? 0 : 1; set { - Program.GlobalConfig.App.ShowAnnouncementWhenStart = value == 0; + Program.AppConfig.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.AppConfig.App.DeveloperSetting ? 0 : 1; set { - Program.GlobalConfig.App.DeveloperSetting = value == 0; - MicaOpacityConfirmButtonVisibility = Program.GlobalConfig.App.DeveloperSetting; + Program.AppConfig.App.DeveloperSetting = value == 0; + MicaOpacityConfirmButtonVisibility = Program.AppConfig.App.DeveloperSetting; SaveChanges(); } } @@ -283,10 +283,10 @@ internal int DeveloperSettingStatus /// internal static bool MicaToolTipIsOpen { - get => Program.GlobalConfig.Pages.SettingsPage.MicaToolTipIsOpen; + get => Program.AppConfig.Pages.SettingsPage.MicaToolTipIsOpen; set { - Program.GlobalConfig.Pages.SettingsPage.MicaToolTipIsOpen = value; + Program.AppConfig.Pages.SettingsPage.MicaToolTipIsOpen = value; SaveChanges(); } } @@ -296,7 +296,7 @@ internal static bool MicaToolTipIsOpen /// internal bool MicaOpacityConfirmButtonVisibility { - get => Program.GlobalConfig.App.DeveloperSetting; + get => Program.AppConfig.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.AppConfig.App.ThemeColor = nowColor.ToHexString(); SaveChanges(); } diff --git a/KitX Dashboard/ViewModels/Pages/HomePageViewModel.cs b/KitX Dashboard/ViewModels/Pages/HomePageViewModel.cs index f8b74d8e..ed42dd07 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.AppConfig.Pages.HomePage.IsNavigationViewPaneOpened; set { - Program.GlobalConfig.Pages.HomePage.IsNavigationViewPaneOpened = value; + Program.AppConfig.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..d14a7e6c 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.AppConfig.App.DeveloperSetting; }; } @@ -77,10 +77,10 @@ internal double NoPlugins_TipHeight internal bool ImportButtonVisibility { - get => Program.GlobalConfig.App.DeveloperSetting; + get => Program.AppConfig.App.DeveloperSetting; set { - Program.GlobalConfig.App.DeveloperSetting = value; + Program.AppConfig.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..1e5fcd1a 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.AppConfig.Pages.SettingsPage.IsNavigationViewPaneOpened; set { - Program.GlobalConfig.Pages.SettingsPage.IsNavigationViewPaneOpened = value; + Program.AppConfig.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..9734170a 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.AppConfig.Windows.AnnouncementWindow.Window_Left, true, Screens ), WindowAttributesConverter.PositionCameCenter( - Program.GlobalConfig.Windows.AnnouncementWindow.Window_Top, + Program.AppConfig.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.AppConfig.Windows.AnnouncementWindow.Window_Left = Position.X; + Program.AppConfig.Windows.AnnouncementWindow.Window_Top = Position.Y; + Program.AppConfig.Windows.AnnouncementWindow.Window_Width = Width; + Program.AppConfig.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..63c6e8ac 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.AppConfig.Windows.MainWindow.Window_Left, true, Screens ), WindowAttributesConverter.PositionCameCenter( - Program.GlobalConfig.Windows.MainWindow.Window_Top, + Program.AppConfig.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.AppConfig.Windows.MainWindow.Window_Width + 16, + Program.AppConfig.Windows.MainWindow.Window_Height + 38 ); } else { ClientSize = new( - Program.GlobalConfig.Windows.MainWindow.Window_Width, - Program.GlobalConfig.Windows.MainWindow.Window_Height + Program.AppConfig.Windows.MainWindow.Window_Width, + Program.AppConfig.Windows.MainWindow.Window_Height ); } @@ -81,18 +81,18 @@ public MainWindow() private void InitMainWindow() { // 导航到上次关闭时界面 - SelectedPageName = Program.GlobalConfig.Windows.MainWindow.Tags["SelectedPage"]; + SelectedPageName = Program.AppConfig.Windows.MainWindow.Tags["SelectedPage"]; MainNavigationView.SelectedItem = this.FindControl(SelectedPageName); // 如果主题不设置为 `跟随系统` 则手动变更主题 - if (!Program.GlobalConfig.App.Theme.Equals("Follow")) + if (!Program.AppConfig.App.Theme.Equals("Follow")) AvaloniaLocator.Current.GetService().RequestedTheme = - Program.GlobalConfig.App.Theme; + Program.AppConfig.App.Theme; // 透明度变更事件, 让透明度变更立即生效 EventHandlers.MicaOpacityChanged += () => { - if (Program.GlobalConfig.Windows.MainWindow.EnabledMica) + if (Program.AppConfig.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.AppConfig.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.AppConfig.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.AppConfig.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.AppConfig.Windows.MainWindow.Window_Left = Position.X; + Program.AppConfig.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.AppConfig.Windows.MainWindow.Window_Width = ClientSize.Width; + Program.AppConfig.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.AppConfig.Windows.MainWindow.Window_Width = ClientSize.Width; + Program.AppConfig.Windows.MainWindow.Window_Height = ClientSize.Height; } - Program.GlobalConfig.Windows.MainWindow. + Program.AppConfig.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)[5] - if (Program.GlobalConfig.Windows.MainWindow.EnabledMica + if (Program.AppConfig.Windows.MainWindow.EnabledMica && RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { // 如果是 Windows 11 而且没有选择 `高对比度` 主题 @@ -293,7 +293,7 @@ private void TryEnableMicaEffect(FluentAvaloniaTheme thm) color = color.LightenPercent(-0.8f); Background = new ImmutableSolidColorBrush(color, - Program.GlobalConfig.Windows.MainWindow.MicaOpacity); + Program.AppConfig.Windows.MainWindow.MicaOpacity); } else if (thm.RequestedTheme == FluentAvaloniaTheme.LightModeString) { @@ -303,7 +303,7 @@ private void TryEnableMicaEffect(FluentAvaloniaTheme thm) color = color.LightenPercent(0.5f); Background = new ImmutableSolidColorBrush(color, - Program.GlobalConfig.Windows.MainWindow.MicaOpacity); + Program.AppConfig.Windows.MainWindow.MicaOpacity); } } } diff --git a/KitX Dashboard/Views/Pages/HomePage.axaml.cs b/KitX Dashboard/Views/Pages/HomePage.axaml.cs index 7188271a..8bbf8a88 100644 --- a/KitX Dashboard/Views/Pages/HomePage.axaml.cs +++ b/KitX Dashboard/Views/Pages/HomePage.axaml.cs @@ -40,8 +40,8 @@ private void InitHomePage() private static string SelectedViewName { - get => Program.GlobalConfig.Pages.HomePage.SelectedViewName; - set => Program.GlobalConfig.Pages.HomePage.SelectedViewName = value; + get => Program.AppConfig.Pages.HomePage.SelectedViewName; + set => Program.AppConfig.Pages.HomePage.SelectedViewName = value; } /// diff --git a/KitX Dashboard/Views/Pages/SettingsPage.axaml.cs b/KitX Dashboard/Views/Pages/SettingsPage.axaml.cs index afa2ac1d..c788b61e 100644 --- a/KitX Dashboard/Views/Pages/SettingsPage.axaml.cs +++ b/KitX Dashboard/Views/Pages/SettingsPage.axaml.cs @@ -61,8 +61,8 @@ private void SettingsNavigationView_SelectionChanged(object? sender, private static string SelectedViewName { - get => Program.GlobalConfig.Pages.SettingsPage.SelectedViewName; - set => Program.GlobalConfig.Pages.SettingsPage.SelectedViewName = value; + get => Program.AppConfig.Pages.SettingsPage.SelectedViewName; + set => Program.AppConfig.Pages.SettingsPage.SelectedViewName = value; } private static Type SelectedViewType() => SelectedViewName switch From 294469200d97063c9f6bc21adbb3cc641948d633 Mon Sep 17 00:00:00 2001 From: Dynesshely Date: Sat, 24 Sep 2022 23:15:59 +0800 Subject: [PATCH 04/11] =?UTF-8?q?=F0=9F=8E=87=20Style:=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=8F=98=E9=87=8F=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KitX Dashboard/App.axaml.cs | 12 ++-- .../Data/{Config.cs => AppConfig.cs} | 4 +- KitX Dashboard/Helper.cs | 14 ++--- .../Models/GreetingTextGenerator.cs | 10 ++-- KitX Dashboard/Program.cs | 4 +- KitX Dashboard/Services/AnouncementManager.cs | 6 +- KitX Dashboard/Services/PluginsManager.cs | 8 +-- .../ViewModels/AnouncementsWindowViewModel.cs | 8 +-- .../Pages/Controls/PluginBarViewModel.cs | 4 +- .../Pages/Controls/PluginCardViewModel.cs | 8 +-- .../Controls/Settings_GeneralViewModel.cs | 56 +++++++++---------- .../ViewModels/Pages/HomePageViewModel.cs | 4 +- .../ViewModels/Pages/RepoPageViewModel.cs | 6 +- .../ViewModels/Pages/SettingsPageViewModel.cs | 4 +- .../Views/AnouncementsWindow.axaml.cs | 12 ++-- KitX Dashboard/Views/MainWindow.axaml.cs | 46 +++++++-------- KitX Dashboard/Views/Pages/HomePage.axaml.cs | 4 +- .../Views/Pages/SettingsPage.axaml.cs | 4 +- 18 files changed, 107 insertions(+), 107 deletions(-) rename KitX Dashboard/Data/{Config.cs => AppConfig.cs} (99%) diff --git a/KitX Dashboard/App.axaml.cs b/KitX Dashboard/App.axaml.cs index 3458fb52..6d085425 100644 --- a/KitX Dashboard/App.axaml.cs +++ b/KitX Dashboard/App.axaml.cs @@ -24,7 +24,7 @@ public override void Initialize() { AvaloniaXamlLoader.Load(this); - string lang = Program.AppConfig.App.AppLanguage; + string lang = Program.Config.App.AppLanguage; try { Resources.MergedDictionaries.Clear(); @@ -38,7 +38,7 @@ public override void Initialize() { Log.Warning($"Language File {lang}.axaml not found."); - string backup_lang = Program.AppConfig.App.SurpportLanguages.Keys.First(); + string backup_lang = Program.Config.App.SurpportLanguages.Keys.First(); Resources.MergedDictionaries.Clear(); Resources.MergedDictionaries.Add( AvaloniaRuntimeXamlLoader.Load( @@ -46,7 +46,7 @@ public override void Initialize() ) as ResourceDictionary ); - Program.AppConfig.App.AppLanguage = backup_lang; + Program.Config.App.AppLanguage = backup_lang; } finally { @@ -55,7 +55,7 @@ public override void Initialize() EventHandlers.Invoke("LanguageChanged"); - Color c = Color.Parse(Program.AppConfig.App.ThemeColor); + Color c = Color.Parse(Program.Config.App.ThemeColor); if (Current != null) { @@ -84,10 +84,10 @@ public override void OnFrameworkInitializationCompleted() }; } - string color = Program.AppConfig.App.ThemeColor; + string color = Program.Config.App.ThemeColor; Resources["ThemePrimaryAccent"] = new SolidColorBrush(Color.Parse(color)); - if (Program.AppConfig.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 99% rename from KitX Dashboard/Data/Config.cs rename to KitX Dashboard/Data/AppConfig.cs index b39fca1c..64acfcfe 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(); @@ -18,7 +18,7 @@ public class Config public Config_Pages Pages { get; set; } = new(); /// - /// AppConfig + /// Config /// public class Config_App { diff --git a/KitX Dashboard/Helper.cs b/KitX Dashboard/Helper.cs index 79ae34b3..27b0c24c 100644 --- a/KitX Dashboard/Helper.cs +++ b/KitX Dashboard/Helper.cs @@ -32,7 +32,7 @@ public static void StartUpCheck() //InitLiteLogger(Program.LocalLogger); - string logdir = Path.GetFullPath(Program.AppConfig.App.LogFilePath); + string logdir = Path.GetFullPath(Program.Config.App.LogFilePath); if (!Directory.Exists(logdir)) Directory.CreateDirectory(logdir); @@ -41,14 +41,14 @@ public static void StartUpCheck() .MinimumLevel.Information() .WriteTo.File( $"{logdir}Log_.log", - outputTemplate: Program.AppConfig.App.LogTemplate, + outputTemplate: Program.Config.App.LogTemplate, rollingInterval: RollingInterval.Hour, - fileSizeLimitBytes: Program.AppConfig.App.LogFileSingleMaxSize, + fileSizeLimitBytes: Program.Config.App.LogFileSingleMaxSize, buffered: true, - flushToDiskInterval: new(0, 0, Program.AppConfig.App.LogFileFlushInterval), + flushToDiskInterval: new(0, 0, Program.Config.App.LogFileFlushInterval), restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Information, rollOnFileSizeLimit: true, - retainedFileCountLimit: Program.AppConfig.App.LogFileMaxCount + retainedFileCountLimit: Program.Config.App.LogFileMaxCount ) .CreateLogger(); @@ -90,7 +90,7 @@ public static void SaveConfig() new Thread(() => { BasicHelper.IO.FileHelper.WriteIn(Path.GetFullPath(GlobalInfo.ConfigFilePath), - JsonSerializer.Serialize(Program.AppConfig, options)); + JsonSerializer.Serialize(Program.Config, options)); }).Start(); } @@ -117,7 +117,7 @@ public static void SavePluginsListConfig() /// public static void LoadConfig() { - Program.AppConfig = 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 33d5fcec..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.AppConfig.Windows + result = random.Next(1, Program.Config.Windows .MainWindow.GreetingTextCount_Morning + 1); break; case Step.Noon: - result = random.Next(1, Program.AppConfig.Windows + result = random.Next(1, Program.Config.Windows .MainWindow.GreetingTextCount_Noon + 1); break; case Step.AfterNoon: - result = random.Next(1, Program.AppConfig.Windows + result = random.Next(1, Program.Config.Windows .MainWindow.GreetingTextCount_AfterNoon + 1); break; case Step.Evening: - result = random.Next(1, Program.AppConfig.Windows + result = random.Next(1, Program.Config.Windows .MainWindow.GreetingTextCount_Evening + 1); break; case Step.Night: - result = random.Next(1, Program.AppConfig.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 7a77774f..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 AppConfig = new(); + internal static AppConfig Config = new(); internal static WebServer? LocalWebServer; @@ -87,7 +87,7 @@ public static void Main(string[] args) #endregion - AppConfig.App.RanTime++; + Config.App.RanTime++; #region Ӧѭ diff --git a/KitX Dashboard/Services/AnouncementManager.cs b/KitX Dashboard/Services/AnouncementManager.cs index f90413d6..22f84fb5 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.AppConfig.App.APIServer}" + - $"{Program.AppConfig.App.APIPath}"; + $"{Program.Config.App.APIServer}" + + $"{Program.Config.App.APIPath}"; // 获取公告列表的api链接 string link = $"{linkBase}{GlobalInfo.Api_Get_Announcements}"; @@ -66,7 +66,7 @@ await FileHelper.ReadAllAsync(confPath) // 获取单个公告的链接 string apiLink = $"{linkBase}{GlobalInfo.Api_Get_Announcement}" + $"?" + - $"lang={Program.AppConfig.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/PluginsManager.cs b/KitX Dashboard/Services/PluginsManager.cs index 5fec9632..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.AppConfig; - 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.AppConfig.App.LocalPluginsFileDirectory}/" + + $"{Program.Config.App.LocalPluginsFileDirectory}/" + $"{pg.PluginDetails.PublisherName}_{pg.PluginDetails.AuthorName}/" + $"{pg.PluginDetails.Name}/{pg.PluginDetails.Version}/" ); diff --git a/KitX Dashboard/ViewModels/AnouncementsWindowViewModel.cs b/KitX Dashboard/ViewModels/AnouncementsWindowViewModel.cs index 6c98685c..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.AppConfig.Windows.AnnouncementWindow.Window_Width; - set => Program.AppConfig.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.AppConfig.Windows.AnnouncementWindow.Window_Height; - set => Program.AppConfig.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 4185ffe5..8d650c33 100644 --- a/KitX Dashboard/ViewModels/Pages/Controls/PluginBarViewModel.cs +++ b/KitX Dashboard/ViewModels/Pages/Controls/PluginBarViewModel.cs @@ -47,8 +47,8 @@ internal string? DisplayName { if (PluginDetail != null) return PluginDetail.PluginDetails.DisplayName - .ContainsKey(Program.AppConfig.App.AppLanguage) - ? PluginDetail.PluginDetails.DisplayName[Program.AppConfig.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 89a32b3e..a2e94e34 100644 --- a/KitX Dashboard/ViewModels/Pages/Controls/PluginCardViewModel.cs +++ b/KitX Dashboard/ViewModels/Pages/Controls/PluginCardViewModel.cs @@ -18,15 +18,15 @@ public PluginCardViewModel() } internal string DisplayName => pluginStruct.DisplayName - .ContainsKey(Program.AppConfig.App.AppLanguage) - ? pluginStruct.DisplayName[Program.AppConfig.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.AppConfig.App.AppLanguage) - ? pluginStruct.SimpleDescription[Program.AppConfig.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 b5ec2dbd..e7f3b61e 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.AppConfig.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.AppConfig.App.AppLanguage).IsIt); + new LanguageMatch(Program.Config.App.AppLanguage).IsIt); } /// @@ -75,9 +75,9 @@ private void InitCommands() FluentAvaloniaTheme.HighContrastModeString }; - private string _currentAppTheme = Program.AppConfig.App.Theme == "Follow" + private string _currentAppTheme = Program.Config.App.Theme == "Follow" ? AvaloniaLocator.Current.GetService().RequestedTheme - : Program.AppConfig.App.Theme; + : Program.Config.App.Theme; private Color2 nowColor = new(); @@ -98,7 +98,7 @@ internal string CurrentAppTheme get => _currentAppTheme; set { - Program.AppConfig.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.AppConfig.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.AppConfig.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.AppConfig.Windows.MainWindow.EnabledMica ? 0 : 1; + get => Program.Config.Windows.MainWindow.EnabledMica ? 0 : 1; set { - Program.AppConfig.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.AppConfig.Windows.MainWindow.MicaOpacity; + get => Program.Config.Windows.MainWindow.MicaOpacity; set { - Program.AppConfig.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.AppConfig.App.IPFilter; - set => Program.AppConfig.App.IPFilter = value; + get => Program.Config.App.IPFilter; + set => Program.Config.App.IPFilter = value; } /// @@ -216,10 +216,10 @@ internal static string LocalIPFilter /// internal static int GreetingTextUpdateInterval { - get => Program.AppConfig.Windows.MainWindow.GreetingUpdateInterval; + get => Program.Config.Windows.MainWindow.GreetingUpdateInterval; set { - Program.AppConfig.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.AppConfig.App.LocalPluginsFileDirectory; + get => Program.Config.App.LocalPluginsFileDirectory; set { - Program.AppConfig.App.LocalPluginsFileDirectory = value; + Program.Config.App.LocalPluginsFileDirectory = value; SaveChanges(); } } @@ -243,10 +243,10 @@ internal static string LocalPluginsFileDirectory /// internal static string LocalPluginsDataDirectory { - get => Program.AppConfig.App.LocalPluginsDataDirectory; + get => Program.Config.App.LocalPluginsDataDirectory; set { - Program.AppConfig.App.LocalPluginsDataDirectory = value; + Program.Config.App.LocalPluginsDataDirectory = value; SaveChanges(); } } @@ -256,10 +256,10 @@ internal static string LocalPluginsDataDirectory /// internal static int ShowAnnouncementsStatus { - get => Program.AppConfig.App.ShowAnnouncementWhenStart ? 0 : 1; + get => Program.Config.App.ShowAnnouncementWhenStart ? 0 : 1; set { - Program.AppConfig.App.ShowAnnouncementWhenStart = value == 0; + Program.Config.App.ShowAnnouncementWhenStart = value == 0; SaveChanges(); } } @@ -269,11 +269,11 @@ internal static int ShowAnnouncementsStatus /// internal int DeveloperSettingStatus { - get => Program.AppConfig.App.DeveloperSetting ? 0 : 1; + get => Program.Config.App.DeveloperSetting ? 0 : 1; set { - Program.AppConfig.App.DeveloperSetting = value == 0; - MicaOpacityConfirmButtonVisibility = Program.AppConfig.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.AppConfig.Pages.SettingsPage.MicaToolTipIsOpen; + get => Program.Config.Pages.SettingsPage.MicaToolTipIsOpen; set { - Program.AppConfig.Pages.SettingsPage.MicaToolTipIsOpen = value; + Program.Config.Pages.SettingsPage.MicaToolTipIsOpen = value; SaveChanges(); } } @@ -296,7 +296,7 @@ internal static bool MicaToolTipIsOpen /// internal bool MicaOpacityConfirmButtonVisibility { - get => Program.AppConfig.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.AppConfig.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 ed42dd07..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.AppConfig.Pages.HomePage.IsNavigationViewPaneOpened; + get => Program.Config.Pages.HomePage.IsNavigationViewPaneOpened; set { - Program.AppConfig.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 d14a7e6c..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.AppConfig.App.DeveloperSetting; + ImportButtonVisibility = Program.Config.App.DeveloperSetting; }; } @@ -77,10 +77,10 @@ internal double NoPlugins_TipHeight internal bool ImportButtonVisibility { - get => Program.AppConfig.App.DeveloperSetting; + get => Program.Config.App.DeveloperSetting; set { - Program.AppConfig.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 1e5fcd1a..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.AppConfig.Pages.SettingsPage.IsNavigationViewPaneOpened; + get => Program.Config.Pages.SettingsPage.IsNavigationViewPaneOpened; set { - Program.AppConfig.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 9734170a..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.AppConfig.Windows.AnnouncementWindow.Window_Left, + Program.Config.Windows.AnnouncementWindow.Window_Left, true, Screens ), WindowAttributesConverter.PositionCameCenter( - Program.AppConfig.Windows.AnnouncementWindow.Window_Top, + Program.Config.Windows.AnnouncementWindow.Window_Top, false, Screens ) ); @@ -51,10 +51,10 @@ private void InitializeComponent() private void SaveMetaData() { - Program.AppConfig.Windows.AnnouncementWindow.Window_Left = Position.X; - Program.AppConfig.Windows.AnnouncementWindow.Window_Top = Position.Y; - Program.AppConfig.Windows.AnnouncementWindow.Window_Width = Width; - Program.AppConfig.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 63c6e8ac..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.AppConfig.Windows.MainWindow.Window_Left, + Program.Config.Windows.MainWindow.Window_Left, true, Screens ), WindowAttributesConverter.PositionCameCenter( - Program.AppConfig.Windows.MainWindow.Window_Top, + Program.Config.Windows.MainWindow.Window_Top, false, Screens ) ); @@ -56,15 +56,15 @@ public MainWindow() if (OperatingSystem.IsWindows()) { ClientSize = new( - Program.AppConfig.Windows.MainWindow.Window_Width + 16, - Program.AppConfig.Windows.MainWindow.Window_Height + 38 + Program.Config.Windows.MainWindow.Window_Width + 16, + Program.Config.Windows.MainWindow.Window_Height + 38 ); } else { ClientSize = new( - Program.AppConfig.Windows.MainWindow.Window_Width, - Program.AppConfig.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.AppConfig.Windows.MainWindow.Tags["SelectedPage"]; + SelectedPageName = Program.Config.Windows.MainWindow.Tags["SelectedPage"]; MainNavigationView.SelectedItem = this.FindControl(SelectedPageName); // 如果主题不设置为 `跟随系统` 则手动变更主题 - if (!Program.AppConfig.App.Theme.Equals("Follow")) + if (!Program.Config.App.Theme.Equals("Follow")) AvaloniaLocator.Current.GetService().RequestedTheme = - Program.AppConfig.App.Theme; + Program.Config.App.Theme; // 透明度变更事件, 让透明度变更立即生效 EventHandlers.MicaOpacityChanged += () => { - if (Program.AppConfig.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.AppConfig.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.AppConfig.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.AppConfig.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.AppConfig.Windows.MainWindow.Window_Left = Position.X; - Program.AppConfig.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.AppConfig.Windows.MainWindow.Window_Width = ClientSize.Width; - Program.AppConfig.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.AppConfig.Windows.MainWindow.Window_Width = ClientSize.Width; - Program.AppConfig.Windows.MainWindow.Window_Height = ClientSize.Height; + Program.Config.Windows.MainWindow.Window_Width = ClientSize.Width; + Program.Config.Windows.MainWindow.Window_Height = ClientSize.Height; } - Program.AppConfig.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)[5] - if (Program.AppConfig.Windows.MainWindow.EnabledMica + if (Program.Config.Windows.MainWindow.EnabledMica && RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { // 如果是 Windows 11 而且没有选择 `高对比度` 主题 @@ -293,7 +293,7 @@ private void TryEnableMicaEffect(FluentAvaloniaTheme thm) color = color.LightenPercent(-0.8f); Background = new ImmutableSolidColorBrush(color, - Program.AppConfig.Windows.MainWindow.MicaOpacity); + Program.Config.Windows.MainWindow.MicaOpacity); } else if (thm.RequestedTheme == FluentAvaloniaTheme.LightModeString) { @@ -303,7 +303,7 @@ private void TryEnableMicaEffect(FluentAvaloniaTheme thm) color = color.LightenPercent(0.5f); Background = new ImmutableSolidColorBrush(color, - Program.AppConfig.Windows.MainWindow.MicaOpacity); + Program.Config.Windows.MainWindow.MicaOpacity); } } } diff --git a/KitX Dashboard/Views/Pages/HomePage.axaml.cs b/KitX Dashboard/Views/Pages/HomePage.axaml.cs index 8bbf8a88..32facc70 100644 --- a/KitX Dashboard/Views/Pages/HomePage.axaml.cs +++ b/KitX Dashboard/Views/Pages/HomePage.axaml.cs @@ -40,8 +40,8 @@ private void InitHomePage() private static string SelectedViewName { - get => Program.AppConfig.Pages.HomePage.SelectedViewName; - set => Program.AppConfig.Pages.HomePage.SelectedViewName = value; + get => Program.Config.Pages.HomePage.SelectedViewName; + set => Program.Config.Pages.HomePage.SelectedViewName = value; } /// diff --git a/KitX Dashboard/Views/Pages/SettingsPage.axaml.cs b/KitX Dashboard/Views/Pages/SettingsPage.axaml.cs index c788b61e..94c6ec8f 100644 --- a/KitX Dashboard/Views/Pages/SettingsPage.axaml.cs +++ b/KitX Dashboard/Views/Pages/SettingsPage.axaml.cs @@ -61,8 +61,8 @@ private void SettingsNavigationView_SelectionChanged(object? sender, private static string SelectedViewName { - get => Program.AppConfig.Pages.SettingsPage.SelectedViewName; - set => Program.AppConfig.Pages.SettingsPage.SelectedViewName = value; + get => Program.Config.Pages.SettingsPage.SelectedViewName; + set => Program.Config.Pages.SettingsPage.SelectedViewName = value; } private static Type SelectedViewType() => SelectedViewName switch From d9be3c3532e4847e32392eee6f384cc6bd6f5e2e Mon Sep 17 00:00:00 2001 From: Dynesshely Date: Sun, 25 Sep 2022 00:03:46 +0800 Subject: [PATCH 05/11] =?UTF-8?q?=F0=9F=92=BE=20Feat(Dashboard):=20?= =?UTF-8?q?=E4=BF=9D=E8=AF=81=E6=9C=80=E5=90=8E=E4=B8=80=E4=B8=AA=E5=85=83?= =?UTF-8?q?=E7=B4=A0=E4=B9=8B=E5=90=8E=E8=BF=98=E6=9C=89=E6=BB=9A=E5=8A=A8?= =?UTF-8?q?=E7=9A=84=E7=A9=BA=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KitX Dashboard/Views/Pages/Controls/Settings_About.axaml | 2 ++ KitX Dashboard/Views/Pages/Controls/Settings_General.axaml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/KitX Dashboard/Views/Pages/Controls/Settings_About.axaml b/KitX Dashboard/Views/Pages/Controls/Settings_About.axaml index 4a968d7a..bdbd3a46 100644 --- a/KitX Dashboard/Views/Pages/Controls/Settings_About.axaml +++ b/KitX Dashboard/Views/Pages/Controls/Settings_About.axaml @@ -184,6 +184,8 @@ + + diff --git a/KitX Dashboard/Views/Pages/Controls/Settings_General.axaml b/KitX Dashboard/Views/Pages/Controls/Settings_General.axaml index f27dafe8..fec82b84 100644 --- a/KitX Dashboard/Views/Pages/Controls/Settings_General.axaml +++ b/KitX Dashboard/Views/Pages/Controls/Settings_General.axaml @@ -293,6 +293,8 @@ + + From e08d5aac7c31b093790713956c5bd662d00bdd51 Mon Sep 17 00:00:00 2001 From: Dynesshely Date: Sun, 25 Sep 2022 00:04:59 +0800 Subject: [PATCH 06/11] =?UTF-8?q?=F0=9F=92=BE=20Feat(Dashboard.WebServer):?= =?UTF-8?q?=20=E5=8F=91=E9=80=81=E6=8A=A5=E6=96=87=E6=97=B6=E5=8F=91?= =?UTF-8?q?=E9=80=81=E5=88=B0=E6=89=80=E6=9C=89=E6=94=AF=E6=8C=81=E7=9A=84?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E9=80=82=E9=85=8D=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KitX Dashboard/Services/WebServer.cs | 70 +++++++++++++++++----------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/KitX Dashboard/Services/WebServer.cs b/KitX Dashboard/Services/WebServer.cs index 55a17f26..adf11932 100644 --- a/KitX Dashboard/Services/WebServer.cs +++ b/KitX Dashboard/Services/WebServer.cs @@ -30,11 +30,14 @@ public WebServer() DevicesManager.KeepCheckAndRemove(); PluginsManager.KeepCheckAndRemove(); PluginsManager.KeepCheckAndRemoveOrDelete(); + FindSurpportNetworkInterface(); MultiDevicesBroadCastSend(); MultiDevicesBroadCastReceive(); }).Start(); } + #region TCP Socket 服务于 Loaders 的服务器 + /// /// 开始执行 /// @@ -124,7 +127,7 @@ private async void ReciveMessage(object obj) while (keepListen) { - byte[] data = new byte[Program.GlobalConfig.App.SocketBufferSize]; + byte[] data = new byte[Program.Config.App.SocketBufferSize]; //如果远程主机已关闭连接,Read将立即返回零字节 //int length = await stream.ReadAsync(data, 0, data.Length); int length = await stream.ReadAsync(data); @@ -171,29 +174,17 @@ private async void ReciveMessage(object obj) client.Dispose(); } } + #endregion + + #region UDP Socket 服务于自发现自组网 + + private static readonly List SurpportedNetworkInterfaces = new(); /// - /// 多设备广播发送方法 + /// 寻找受支持的网络适配器 /// - public static void MultiDevicesBroadCastSend() + private static void FindSurpportNetworkInterface() { - #region 初始化 UDP 客户端 - - UdpClient udpClient = new(Program.GlobalConfig.App.UDPPortSend, - AddressFamily.InterNetwork) - { - EnableBroadcast = true, - MulticastLoopback = true - }; - udpClient.JoinMulticastGroup(IPAddress.Parse("224.0.0.0")); - IPEndPoint multicast = new(IPAddress.Parse("224.0.0.0"), - Program.GlobalConfig.App.UDPPortReceive); - - #endregion - - #region 寻找受支持的网络适配器 - - List networkInterfaceIndexes = new(); NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface adapter in nics) { @@ -208,8 +199,25 @@ public static void MultiDevicesBroadCastSend() continue; IPv4InterfaceProperties p = adapter.GetIPProperties().GetIPv4Properties(); if (p == null) continue; // IPv4 is not configured on this adapter - networkInterfaceIndexes.Add(IPAddress.HostToNetworkOrder(p.Index)); + SurpportedNetworkInterfaces.Add(IPAddress.HostToNetworkOrder(p.Index)); } + } + + /// + /// 多设备广播发送方法 + /// + public static void MultiDevicesBroadCastSend() + { + #region 初始化 UDP 客户端 + + UdpClient udpClient = new(Program.Config.App.UDPPortSend, AddressFamily.InterNetwork) + { + EnableBroadcast = true, + MulticastLoopback = true + }; + udpClient.JoinMulticastGroup(IPAddress.Parse("224.0.0.0")); + IPEndPoint multicast = new(IPAddress.Parse("224.0.0.0"), + Program.Config.App.UDPPortReceive); #endregion @@ -225,7 +233,7 @@ public static void MultiDevicesBroadCastSend() string sendText = JsonSerializer.Serialize(GetDeviceInfo()); byte[] sendBytes = Encoding.UTF8.GetBytes(sendText); - foreach (var item in networkInterfaceIndexes) + foreach (var item in SurpportedNetworkInterfaces) { udpClient.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, item); @@ -252,11 +260,19 @@ public static void MultiDevicesBroadCastSend() /// public static void MultiDevicesBroadCastReceive() { - UdpClient udpClient = new(Program.GlobalConfig.App.UDPPortReceive, - AddressFamily.InterNetwork); + #region 初始化 UDP 客户端 + + UdpClient udpClient = new(Program.Config.App.UDPPortReceive, AddressFamily.InterNetwork) + { + EnableBroadcast = true, + MulticastLoopback = true + }; udpClient.JoinMulticastGroup(IPAddress.Parse("224.0.0.0")); IPEndPoint multicast = new(IPAddress.Parse("224.0.0.0"), - Program.GlobalConfig.App.UDPPortSend); + Program.Config.App.UDPPortSend); + + #endregion + new Thread(() => { try @@ -304,7 +320,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.App.IPFilter) // 满足自定义规则 select ip).First().ToString(); } @@ -332,6 +348,8 @@ private static string GetInterNetworkIPv4() PluginsCount = Program.PluginCards.Count, }; + #endregion + /// /// 释放资源 /// From 7814f53c02732b15fe6e75cb9f78d24780e7664f Mon Sep 17 00:00:00 2001 From: Dynesshely Date: Sun, 25 Sep 2022 00:19:56 +0800 Subject: [PATCH 07/11] =?UTF-8?q?=F0=9F=92=BE=20Feat(Dashboard):=20?= =?UTF-8?q?=E6=8B=86=E5=88=86=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KitX Dashboard/Data/AppConfig.cs | 88 ++++++++++++------- KitX Dashboard/Helper.cs | 10 +-- KitX Dashboard/Services/AnouncementManager.cs | 4 +- KitX Dashboard/Services/LoadersManager.cs | 2 + KitX Dashboard/Services/WebServer.cs | 13 ++- .../Controls/Settings_GeneralViewModel.cs | 4 +- 6 files changed, 71 insertions(+), 50 deletions(-) diff --git a/KitX Dashboard/Data/AppConfig.cs b/KitX Dashboard/Data/AppConfig.cs index 64acfcfe..e7948c3b 100644 --- a/KitX Dashboard/Data/AppConfig.cs +++ b/KitX Dashboard/Data/AppConfig.cs @@ -17,6 +17,12 @@ public class AppConfig [JsonInclude] public Config_Pages Pages { get; set; } = new(); + [JsonInclude] + public Config_Web Web { get; set; } = new(); + + [JsonInclude] + public Config_Log Log { get; set; } = new(); + /// /// Config /// @@ -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,54 @@ 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 IPFilter { get; set; } = "192.168"; + + [JsonInclude] + public int SocketBufferSize { get; set; } = 1024 * 100; + } + + /// + /// 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 27b0c24c..bee3ce81 100644 --- a/KitX Dashboard/Helper.cs +++ b/KitX Dashboard/Helper.cs @@ -32,7 +32,7 @@ public static void StartUpCheck() //InitLiteLogger(Program.LocalLogger); - string logdir = Path.GetFullPath(Program.Config.App.LogFilePath); + string logdir = Path.GetFullPath(Program.Config.Log.LogFilePath); if (!Directory.Exists(logdir)) Directory.CreateDirectory(logdir); @@ -41,14 +41,14 @@ public static void StartUpCheck() .MinimumLevel.Information() .WriteTo.File( $"{logdir}Log_.log", - outputTemplate: Program.Config.App.LogTemplate, + outputTemplate: Program.Config.Log.LogTemplate, rollingInterval: RollingInterval.Hour, - fileSizeLimitBytes: Program.Config.App.LogFileSingleMaxSize, + fileSizeLimitBytes: Program.Config.Log.LogFileSingleMaxSize, buffered: true, - flushToDiskInterval: new(0, 0, Program.Config.App.LogFileFlushInterval), + flushToDiskInterval: new(0, 0, Program.Config.Log.LogFileFlushInterval), restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Information, rollOnFileSizeLimit: true, - retainedFileCountLimit: Program.Config.App.LogFileMaxCount + retainedFileCountLimit: Program.Config.Log.LogFileMaxCount ) .CreateLogger(); diff --git a/KitX Dashboard/Services/AnouncementManager.cs b/KitX Dashboard/Services/AnouncementManager.cs index 22f84fb5..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.Config.App.APIServer}" + - $"{Program.Config.App.APIPath}"; + $"{Program.Config.Web.APIServer}" + + $"{Program.Config.Web.APIPath}"; // 获取公告列表的api链接 string link = $"{linkBase}{GlobalInfo.Api_Get_Announcements}"; 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/WebServer.cs b/KitX Dashboard/Services/WebServer.cs index adf11932..6de1170b 100644 --- a/KitX Dashboard/Services/WebServer.cs +++ b/KitX Dashboard/Services/WebServer.cs @@ -127,7 +127,7 @@ private async void ReciveMessage(object obj) while (keepListen) { - byte[] data = new byte[Program.Config.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); @@ -210,14 +210,14 @@ public static void MultiDevicesBroadCastSend() { #region 初始化 UDP 客户端 - UdpClient udpClient = new(Program.Config.App.UDPPortSend, AddressFamily.InterNetwork) + UdpClient udpClient = new(Program.Config.Web.UDPPortSend, AddressFamily.InterNetwork) { EnableBroadcast = true, MulticastLoopback = true }; udpClient.JoinMulticastGroup(IPAddress.Parse("224.0.0.0")); IPEndPoint multicast = new(IPAddress.Parse("224.0.0.0"), - Program.Config.App.UDPPortReceive); + Program.Config.Web.UDPPortReceive); #endregion @@ -262,14 +262,13 @@ public static void MultiDevicesBroadCastReceive() { #region 初始化 UDP 客户端 - UdpClient udpClient = new(Program.Config.App.UDPPortReceive, AddressFamily.InterNetwork) + UdpClient udpClient = new(Program.Config.Web.UDPPortReceive, AddressFamily.InterNetwork) { EnableBroadcast = true, MulticastLoopback = true }; udpClient.JoinMulticastGroup(IPAddress.Parse("224.0.0.0")); - IPEndPoint multicast = new(IPAddress.Parse("224.0.0.0"), - Program.Config.App.UDPPortSend); + IPEndPoint multicast = new(IPAddress.Any, 0); #endregion @@ -320,7 +319,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.Config.App.IPFilter) // 满足自定义规则 + && ip.ToString().StartsWith(Program.Config.Web.IPFilter) // 满足自定义规则 select ip).First().ToString(); } diff --git a/KitX Dashboard/ViewModels/Pages/Controls/Settings_GeneralViewModel.cs b/KitX Dashboard/ViewModels/Pages/Controls/Settings_GeneralViewModel.cs index e7f3b61e..0c5b168d 100644 --- a/KitX Dashboard/ViewModels/Pages/Controls/Settings_GeneralViewModel.cs +++ b/KitX Dashboard/ViewModels/Pages/Controls/Settings_GeneralViewModel.cs @@ -207,8 +207,8 @@ internal static double MicaOpacity /// internal static string LocalIPFilter { - get => Program.Config.App.IPFilter; - set => Program.Config.App.IPFilter = value; + get => Program.Config.Web.IPFilter; + set => Program.Config.Web.IPFilter = value; } /// From 2c28f4dbb119acba26d5a9b995c40d32e6c83754 Mon Sep 17 00:00:00 2001 From: Dynesshely Date: Sun, 25 Sep 2022 00:35:58 +0800 Subject: [PATCH 08/11] =?UTF-8?q?=F0=9F=8E=87=20Style:=20=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E4=BB=A3=E7=A0=81=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KitX Dashboard/App.axaml.cs | 1 - KitX Dashboard/Helper.cs | 5 +---- .../ViewModels/Pages/Controls/PluginBarViewModel.cs | 1 - .../ViewModels/Pages/Controls/PluginCardViewModel.cs | 1 - 4 files changed, 1 insertion(+), 7 deletions(-) diff --git a/KitX Dashboard/App.axaml.cs b/KitX Dashboard/App.axaml.cs index 6d085425..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; diff --git a/KitX Dashboard/Helper.cs b/KitX Dashboard/Helper.cs index bee3ce81..d50baae9 100644 --- a/KitX Dashboard/Helper.cs +++ b/KitX Dashboard/Helper.cs @@ -1,7 +1,4 @@ -using Avalonia; -using Avalonia.Media; -using FluentAvalonia.UI.Media; -using KitX_Dashboard.Data; +using KitX_Dashboard.Data; using KitX_Dashboard.Models; using Serilog; using System; diff --git a/KitX Dashboard/ViewModels/Pages/Controls/PluginBarViewModel.cs b/KitX Dashboard/ViewModels/Pages/Controls/PluginBarViewModel.cs index 8d650c33..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 { diff --git a/KitX Dashboard/ViewModels/Pages/Controls/PluginCardViewModel.cs b/KitX Dashboard/ViewModels/Pages/Controls/PluginCardViewModel.cs index a2e94e34..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 { From a688ebeb86be39a3dddea3f3e8b68782f11fa360 Mon Sep 17 00:00:00 2001 From: Dynesshely Date: Sun, 25 Sep 2022 00:36:38 +0800 Subject: [PATCH 09/11] =?UTF-8?q?=F0=9F=92=BE=20Feat:=20=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=8A=A5=E6=96=87=E7=94=9F=E5=AD=98=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E9=85=8D=E7=BD=AE=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KitX Dashboard/Data/AppConfig.cs | 3 +++ KitX Dashboard/Services/DevicesManager.cs | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/KitX Dashboard/Data/AppConfig.cs b/KitX Dashboard/Data/AppConfig.cs index e7948c3b..a6ceb544 100644 --- a/KitX Dashboard/Data/AppConfig.cs +++ b/KitX Dashboard/Data/AppConfig.cs @@ -214,6 +214,9 @@ public class Config_Web [JsonInclude] public int SocketBufferSize { get; set; } = 1024 * 100; + + [JsonInclude] + public int DeviceInfoStructTTLSeconds { get; set; } = 5; } /// 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) From 1056b4b4393332a6613577a3c6ca67cc88ab422c Mon Sep 17 00:00:00 2001 From: Dynesshely Date: Sun, 25 Sep 2022 03:38:25 +0800 Subject: [PATCH 10/11] =?UTF-8?q?=F0=9F=92=BE=20=F0=9F=94=A7=20Feat,=20Fix?= =?UTF-8?q?(Dashboard):=20=E5=9C=A8=E6=89=80=E6=9C=89=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E9=80=82=E9=85=8D=E5=99=A8=E4=B8=8A=E5=8A=A0=E5=85=A5=E7=BB=84?= =?UTF-8?q?=E6=92=AD,=20Close=20#121.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KitX Dashboard/Services/WebServer.cs | 45 +++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/KitX Dashboard/Services/WebServer.cs b/KitX Dashboard/Services/WebServer.cs index 6de1170b..f0b2a31a 100644 --- a/KitX Dashboard/Services/WebServer.cs +++ b/KitX Dashboard/Services/WebServer.cs @@ -195,8 +195,8 @@ private static void FindSurpportNetworkInterface() // multicast is meaningless for this type of connection || OperationalStatus.Up != adapter.OperationalStatus // this adapter is off or not connected - ) - continue; + || !adapter.Supports(NetworkInterfaceComponent.IPv4) + ) continue; IPv4InterfaceProperties p = adapter.GetIPProperties().GetIPv4Properties(); if (p == null) continue; // IPv4 is not configured on this adapter SurpportedNetworkInterfaces.Add(IPAddress.HostToNetworkOrder(p.Index)); @@ -262,16 +262,45 @@ public static void MultiDevicesBroadCastReceive() { #region 初始化 UDP 客户端 - UdpClient udpClient = new(Program.Config.Web.UDPPortReceive, AddressFamily.InterNetwork) - { - EnableBroadcast = true, - MulticastLoopback = true - }; - udpClient.JoinMulticastGroup(IPAddress.Parse("224.0.0.0")); + //UdpClient udpClient = new(Program.Config.Web.UDPPortReceive, AddressFamily.InterNetwork) + //{ + // EnableBroadcast = true, + // MulticastLoopback = true + //}; + //udpClient.JoinMulticastGroup(IPAddress.Parse("224.0.0.0")); IPEndPoint multicast = new(IPAddress.Any, 0); #endregion + #region UDP 客户端在所有网络适配器上加入组播 + + IPAddress multicastAddress = IPAddress.Parse("224.0.0.0"); + IPEndPoint iPEndPoint = new(IPAddress.Any, Program.Config.Web.UDPPortReceive); + UdpClient udpClient = new(iPEndPoint); + NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces(); + foreach (NetworkInterface adapter in networkInterfaces) + { + if (adapter.GetIPProperties().MulticastAddresses.Count == 0 + || !adapter.SupportsMulticast + || OperationalStatus.Up != adapter.OperationalStatus + || !adapter.Supports(NetworkInterfaceComponent.IPv4) + ) continue; + IPInterfaceProperties adapterProperties = adapter.GetIPProperties(); + UnicastIPAddressInformationCollection unicastIPAddresses + = adapterProperties.UnicastAddresses; + IPAddress ipAddress = null; + foreach (UnicastIPAddressInformation unicastIPAddress in unicastIPAddresses) + { + if (unicastIPAddress.Address.AddressFamily != AddressFamily.InterNetwork) continue; + ipAddress = unicastIPAddress.Address; + break; + } + if (ipAddress == null) continue; + udpClient.JoinMulticastGroup(multicastAddress, ipAddress); + } + + #endregion + new Thread(() => { try From 61b2a8bc6861343d4861336965116e9231d7e099 Mon Sep 17 00:00:00 2001 From: Dynesshely Date: Sun, 25 Sep 2022 04:08:14 +0800 Subject: [PATCH 11/11] =?UTF-8?q?=F0=9F=92=BE=20=F0=9F=8E=87=20Feat,=20Sty?= =?UTF-8?q?le:=20=E5=A4=8D=E7=94=A8=E9=81=8D=E5=8E=86=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E9=80=82=E9=85=8D=E5=99=A8=E7=9A=84=E4=BB=A3=E7=A0=81,=20?= =?UTF-8?q?=E7=BB=84=E6=92=AD=E5=9C=B0=E5=9D=80=E5=8F=AF=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KitX Dashboard/Data/AppConfig.cs | 3 + KitX Dashboard/Services/WebServer.cs | 85 +++++++++++++--------------- 2 files changed, 42 insertions(+), 46 deletions(-) diff --git a/KitX Dashboard/Data/AppConfig.cs b/KitX Dashboard/Data/AppConfig.cs index a6ceb544..5e1fa8af 100644 --- a/KitX Dashboard/Data/AppConfig.cs +++ b/KitX Dashboard/Data/AppConfig.cs @@ -209,6 +209,9 @@ public class Config_Web [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"; diff --git a/KitX Dashboard/Services/WebServer.cs b/KitX Dashboard/Services/WebServer.cs index f0b2a31a..9a5e998a 100644 --- a/KitX Dashboard/Services/WebServer.cs +++ b/KitX Dashboard/Services/WebServer.cs @@ -30,7 +30,10 @@ public WebServer() DevicesManager.KeepCheckAndRemove(); PluginsManager.KeepCheckAndRemove(); PluginsManager.KeepCheckAndRemoveOrDelete(); - FindSurpportNetworkInterface(); + FindSurpportNetworkInterface(new() + { + UdpClient_Send, UdpClient_Receive + }, IPAddress.Parse(Program.Config.Web.UDPBroadcastAddress)); MultiDevicesBroadCastSend(); MultiDevicesBroadCastReceive(); }).Start(); @@ -181,9 +184,25 @@ private async void ReciveMessage(object obj) 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)); + + /// + /// 寻找受支持的网络适配器并把UDP客户端加入组播 /// - private static void FindSurpportNetworkInterface() + private static void FindSurpportNetworkInterface(List clients, IPAddress multicastAddress) { NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface adapter in nics) @@ -197,9 +216,22 @@ private static void FindSurpportNetworkInterface() // this adapter is off or not connected || !adapter.Supports(NetworkInterfaceComponent.IPv4) ) continue; - IPv4InterfaceProperties p = adapter.GetIPProperties().GetIPv4Properties(); + 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); } } @@ -210,13 +242,8 @@ public static void MultiDevicesBroadCastSend() { #region 初始化 UDP 客户端 - UdpClient udpClient = new(Program.Config.Web.UDPPortSend, AddressFamily.InterNetwork) - { - EnableBroadcast = true, - MulticastLoopback = true - }; - udpClient.JoinMulticastGroup(IPAddress.Parse("224.0.0.0")); - IPEndPoint multicast = new(IPAddress.Parse("224.0.0.0"), + UdpClient udpClient = UdpClient_Send; + IPEndPoint multicast = new(IPAddress.Parse(Program.Config.Web.UDPBroadcastAddress), Program.Config.Web.UDPPortReceive); #endregion @@ -262,45 +289,11 @@ public static void MultiDevicesBroadCastReceive() { #region 初始化 UDP 客户端 - //UdpClient udpClient = new(Program.Config.Web.UDPPortReceive, AddressFamily.InterNetwork) - //{ - // EnableBroadcast = true, - // MulticastLoopback = true - //}; - //udpClient.JoinMulticastGroup(IPAddress.Parse("224.0.0.0")); + UdpClient udpClient = UdpClient_Receive; IPEndPoint multicast = new(IPAddress.Any, 0); #endregion - #region UDP 客户端在所有网络适配器上加入组播 - - IPAddress multicastAddress = IPAddress.Parse("224.0.0.0"); - IPEndPoint iPEndPoint = new(IPAddress.Any, Program.Config.Web.UDPPortReceive); - UdpClient udpClient = new(iPEndPoint); - NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces(); - foreach (NetworkInterface adapter in networkInterfaces) - { - if (adapter.GetIPProperties().MulticastAddresses.Count == 0 - || !adapter.SupportsMulticast - || OperationalStatus.Up != adapter.OperationalStatus - || !adapter.Supports(NetworkInterfaceComponent.IPv4) - ) continue; - IPInterfaceProperties adapterProperties = adapter.GetIPProperties(); - UnicastIPAddressInformationCollection unicastIPAddresses - = adapterProperties.UnicastAddresses; - IPAddress ipAddress = null; - foreach (UnicastIPAddressInformation unicastIPAddress in unicastIPAddresses) - { - if (unicastIPAddress.Address.AddressFamily != AddressFamily.InterNetwork) continue; - ipAddress = unicastIPAddress.Address; - break; - } - if (ipAddress == null) continue; - udpClient.JoinMulticastGroup(multicastAddress, ipAddress); - } - - #endregion - new Thread(() => { try