From e6eb19aba6c6afe7391160aac88d22c546a2d4d4 Mon Sep 17 00:00:00 2001 From: Ca2didi Date: Tue, 20 May 2025 00:10:22 +0800 Subject: [PATCH] fix: a lots of issues are fixed --- .../ViewModels/SettingViewModel.cs | 47 +++++++++++++++---- .../Views/ModalBox/MergeDialogView.axaml | 2 +- .../ModalBox/PasswordChangeDialogView.axaml | 2 +- .../Views/ModalBox/UserCreateDialogView.axaml | 2 +- Flawless.Client/Views/SettingView.axaml | 10 ++-- 5 files changed, 46 insertions(+), 17 deletions(-) diff --git a/Flawless.Client/ViewModels/SettingViewModel.cs b/Flawless.Client/ViewModels/SettingViewModel.cs index 55f3f75..0faef80 100644 --- a/Flawless.Client/ViewModels/SettingViewModel.cs +++ b/Flawless.Client/ViewModels/SettingViewModel.cs @@ -3,6 +3,7 @@ using System.Collections.ObjectModel; using System.Diagnostics; using System.Linq; using System.Net; +using System.Reactive.Linq; using System.Text; using System.Threading.Tasks; using Avalonia.Threading; @@ -61,16 +62,21 @@ public partial class SettingViewModel : RoutableViewModelBase public SettingViewModel(IScreen hostScreen) : base(hostScreen) { - LoadClientSettings(); + _ = LoadClientSettingsAsync(); } - private async Task LoadServerData() + private async Task LoadServerDataAsync() { try { - var sb = new StringBuilder(); - ServerBlacklist = sb.AppendJoin(",\n", await Api.C.Gateway.IpWhitelistGet()).ToString(); - ServerBlacklist = sb.Clear().AppendJoin(",\n", await Api.C.Gateway.IpBlacklistGet()).ToString(); + using (UIHelper.MakeLoading("Fetch server data...")) + { + await RefreshUsersCommand.Execute(); + + var sb = new StringBuilder(); + ServerBlacklist = sb.AppendJoin(",\n", await Api.C.Gateway.IpWhitelistGet()).ToString(); + ServerBlacklist = sb.Clear().AppendJoin(",\n", await Api.C.Gateway.IpBlacklistGet()).ToString(); + } } catch (Exception ex) { @@ -86,7 +92,7 @@ public partial class SettingViewModel : RoutableViewModelBase } } - private async Task LoadClientSettings() + private async Task LoadClientSettingsAsync() { LoginUser = (await UserService.C.GetOrDownloadUserInfoAsync(Api.C.Username.Value!))!; @@ -96,7 +102,7 @@ public partial class SettingViewModel : RoutableViewModelBase Gender = LoginUser.Sex; Bio = LoginUser.Bio; - if (LoginUser.IsAdmin) await LoadServerData(); + if (LoginUser.IsAdmin) await LoadServerDataAsync(); } [ReactiveCommand] @@ -231,6 +237,30 @@ public partial class SettingViewModel : RoutableViewModelBase } } + [ReactiveCommand] + private async Task RefreshUsersAsync() + { + try + { + var users = await Api.C.Gateway.List(); + Users.Clear(); + foreach (var user in users) + { + Users.Add(new UserModel + { + Username = user.Username, + Email = user.Email, + IsActive = user.IsActive, + IsAdmin = user.IsAdmin ?? false + }); + } + } + catch (ApiException ex) + { + UIHelper.NotifyError(ex); + } + } + [ReactiveCommand] private async Task CreateUserAsync() { @@ -248,7 +278,7 @@ public partial class SettingViewModel : RoutableViewModelBase try { - await Api.C.Gateway.Register(new RegisterRequest() + await Api.C.Gateway.Register(new RegisterRequest { Username = result.Username, Password = result.Password, @@ -348,6 +378,7 @@ public partial class SettingViewModel : RoutableViewModelBase if (active) await Api.C.Gateway.Enable(username); else await Api.C.Gateway.Disable(username); + Users.First(x => x.Username == username).IsActive = active; UIHelper.NotifySuccess($"{username} has already {(active ? "enabled" : "disabled")}."); } catch (Exception ex) diff --git a/Flawless.Client/Views/ModalBox/MergeDialogView.axaml b/Flawless.Client/Views/ModalBox/MergeDialogView.axaml index 4b8f4d7..ad2f2a6 100644 --- a/Flawless.Client/Views/ModalBox/MergeDialogView.axaml +++ b/Flawless.Client/Views/ModalBox/MergeDialogView.axaml @@ -8,7 +8,7 @@ mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" MinWidth="400" x:Class="Flawless.Client.Views.ModalBox.MergeDialogView"> - + diff --git a/Flawless.Client/Views/ModalBox/PasswordChangeDialogView.axaml b/Flawless.Client/Views/ModalBox/PasswordChangeDialogView.axaml index 92c1b0f..c81a58f 100644 --- a/Flawless.Client/Views/ModalBox/PasswordChangeDialogView.axaml +++ b/Flawless.Client/Views/ModalBox/PasswordChangeDialogView.axaml @@ -5,7 +5,7 @@ x:DataType="vm:PasswordChangeDialogViewModel" MinWidth="400"> - + diff --git a/Flawless.Client/Views/ModalBox/UserCreateDialogView.axaml b/Flawless.Client/Views/ModalBox/UserCreateDialogView.axaml index b44a1f2..499ef1b 100644 --- a/Flawless.Client/Views/ModalBox/UserCreateDialogView.axaml +++ b/Flawless.Client/Views/ModalBox/UserCreateDialogView.axaml @@ -4,7 +4,7 @@ x:Class="Flawless.Client.Views.ModalBox.UserCreateDialogView" x:DataType="vm:UserCreateDialogViewModel"> - + diff --git a/Flawless.Client/Views/SettingView.axaml b/Flawless.Client/Views/SettingView.axaml index 99a2ccc..9f59d30 100644 --- a/Flawless.Client/Views/SettingView.axaml +++ b/Flawless.Client/Views/SettingView.axaml @@ -64,8 +64,6 @@ - - @@ -83,18 +81,18 @@ - +