From e1657d9234e77686fae563cc9255e488963c8049 Mon Sep 17 00:00:00 2001 From: Cinka Date: Mon, 27 Jan 2025 15:55:30 +0300 Subject: [PATCH] - add: ServerLink think --- Nebula.Launcher/Assets/svg/discord.svg | 1 + Nebula.Launcher/Assets/svg/forum.svg | 5 ++ Nebula.Launcher/Assets/svg/github.svg | 1 + Nebula.Launcher/Assets/svg/web.svg | 1 + Nebula.Launcher/Assets/svg/wiki.svg | 1 + .../ServiceCollectionExtensions.cs | 14 ++++-- .../ViewModels/Pages/AccountInfoViewModel.cs | 31 +++++++----- .../ViewModels/Pages/ServerListViewModel.cs | 10 ++-- .../ViewModels/Popup/InfoPopupViewModel.cs | 3 +- .../ViewModels/ServerEntryModelView.cs | 50 +++++++++++++++++-- Nebula.Launcher/Views/ServerEntryView.axaml | 37 +++++++++++++- Nebula.Shared/Utils/Helper.cs | 28 ++++++----- 12 files changed, 143 insertions(+), 39 deletions(-) create mode 100644 Nebula.Launcher/Assets/svg/discord.svg create mode 100644 Nebula.Launcher/Assets/svg/forum.svg create mode 100644 Nebula.Launcher/Assets/svg/github.svg create mode 100644 Nebula.Launcher/Assets/svg/web.svg create mode 100644 Nebula.Launcher/Assets/svg/wiki.svg diff --git a/Nebula.Launcher/Assets/svg/discord.svg b/Nebula.Launcher/Assets/svg/discord.svg new file mode 100644 index 0000000..a071f72 --- /dev/null +++ b/Nebula.Launcher/Assets/svg/discord.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Nebula.Launcher/Assets/svg/forum.svg b/Nebula.Launcher/Assets/svg/forum.svg new file mode 100644 index 0000000..fa88df7 --- /dev/null +++ b/Nebula.Launcher/Assets/svg/forum.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/Nebula.Launcher/Assets/svg/github.svg b/Nebula.Launcher/Assets/svg/github.svg new file mode 100644 index 0000000..c17c69b --- /dev/null +++ b/Nebula.Launcher/Assets/svg/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Nebula.Launcher/Assets/svg/web.svg b/Nebula.Launcher/Assets/svg/web.svg new file mode 100644 index 0000000..21bb95f --- /dev/null +++ b/Nebula.Launcher/Assets/svg/web.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Nebula.Launcher/Assets/svg/wiki.svg b/Nebula.Launcher/Assets/svg/wiki.svg new file mode 100644 index 0000000..74e5b11 --- /dev/null +++ b/Nebula.Launcher/Assets/svg/wiki.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Nebula.Launcher/ServiceCollectionExtensions.cs b/Nebula.Launcher/ServiceCollectionExtensions.cs index 3e7a4d1..b5e0daf 100644 --- a/Nebula.Launcher/ServiceCollectionExtensions.cs +++ b/Nebula.Launcher/ServiceCollectionExtensions.cs @@ -41,9 +41,17 @@ public static class ServiceCollectionExtensions foreach (var (viewModel, view, isSingleton) in GetTypesWithHelpAttribute(Assembly.GetExecutingAssembly())) { - if (isSingleton) services.AddSingleton(viewModel); - else services.AddTransient(viewModel); - if (view != null) services.AddTransient(view); + if (isSingleton) + { + services.AddSingleton(viewModel); + if (view != null) services.AddSingleton(view); + } + else + { + services.AddTransient(viewModel); + if (view != null) services.AddTransient(view); + } + } } diff --git a/Nebula.Launcher/ViewModels/Pages/AccountInfoViewModel.cs b/Nebula.Launcher/ViewModels/Pages/AccountInfoViewModel.cs index ea2ca94..d269df6 100644 --- a/Nebula.Launcher/ViewModels/Pages/AccountInfoViewModel.cs +++ b/Nebula.Launcher/ViewModels/Pages/AccountInfoViewModel.cs @@ -1,5 +1,7 @@ +using System; using System.Collections.ObjectModel; using System.Linq; +using System.Threading.Tasks; using System.Windows.Input; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; @@ -75,24 +77,29 @@ public partial class AccountInfoViewModel : ViewModelBase DoAuth(); } - public async void DoAuth() + public void DoAuth() { var message = ViewHelperService.GetViewModel(); message.InfoText = "Auth think, please wait..."; + message.IsInfoClosable = false; + Console.WriteLine("AUTH SHIT"); PopupMessageService.Popup(message); - if (await AuthService.Auth(CurrentAlp)) + Task.Run(async () => { - message.Dispose(); - IsLogged = true; - ConfigurationService.SetConfigValue(CurrentConVar.AuthCurrent, CurrentAlp); - } - else - { - message.Dispose(); - Logout(); - PopupMessageService.Popup("Well, shit is happened: " + AuthService.Reason); - } + if (await AuthService.Auth(CurrentAlp)) + { + message.Dispose(); + IsLogged = true; + ConfigurationService.SetConfigValue(CurrentConVar.AuthCurrent, CurrentAlp); + } + else + { + message.Dispose(); + Logout(); + PopupMessageService.Popup("Well, shit is happened: " + AuthService.Reason); + } + }); } public void Logout() diff --git a/Nebula.Launcher/ViewModels/Pages/ServerListViewModel.cs b/Nebula.Launcher/ViewModels/Pages/ServerListViewModel.cs index 9f0ca15..1b635e8 100644 --- a/Nebula.Launcher/ViewModels/Pages/ServerListViewModel.cs +++ b/Nebula.Launcher/ViewModels/Pages/ServerListViewModel.cs @@ -40,19 +40,15 @@ public partial class ServerListViewModel : ViewModelBase foreach (var info in HubService.ServerList) UnsortedServers.Add(info); HubService.HubServerChangedEventArgs += HubServerChangedEventArgs; - HubService.HubServerLoaded += HubServerLoaded; + HubService.HubServerLoaded += SortServers; OnSearchChange += OnChangeSearch; if (!HubService.IsUpdating) SortServers(); } - - private void HubServerLoaded() - { - SortServers(); - } - + private void OnChangeSearch() { + if(string.IsNullOrEmpty(SearchText)) return; SortServers(); } diff --git a/Nebula.Launcher/ViewModels/Popup/InfoPopupViewModel.cs b/Nebula.Launcher/ViewModels/Popup/InfoPopupViewModel.cs index 0f35e69..fc1a107 100644 --- a/Nebula.Launcher/ViewModels/Popup/InfoPopupViewModel.cs +++ b/Nebula.Launcher/ViewModels/Popup/InfoPopupViewModel.cs @@ -13,7 +13,8 @@ public partial class InfoPopupViewModel : PopupViewModelBase [ObservableProperty] private string _infoText = "Test"; public override string Title => "Info"; - public override bool IsClosable => true; + public bool IsInfoClosable { get; set; } = true; + public override bool IsClosable => IsInfoClosable; protected override void Initialise() { diff --git a/Nebula.Launcher/ViewModels/ServerEntryModelView.cs b/Nebula.Launcher/ViewModels/ServerEntryModelView.cs index 7f2eb64..9f4eb93 100644 --- a/Nebula.Launcher/ViewModels/ServerEntryModelView.cs +++ b/Nebula.Launcher/ViewModels/ServerEntryModelView.cs @@ -8,9 +8,11 @@ using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; +using System.Windows.Input; using Avalonia; using Avalonia.Media; using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; using Nebula.Launcher.Services; using Nebula.Launcher.ViewModels.Popup; using Nebula.Launcher.Views; @@ -37,7 +39,8 @@ public partial class ServerEntryModelView : ViewModelBase [GenerateProperty] private ViewHelperService ViewHelperService { get; } = default!; [GenerateProperty] private RestService RestService { get; } = default!; - [ObservableProperty] private string _description = "..."; + [ObservableProperty] private string _description = "Fetching info..."; + public ObservableCollection Links { get; } = new(); [ObservableProperty] private bool _expandInfo = false; public bool RunVisible => Process == null; @@ -79,6 +82,8 @@ public partial class ServerEntryModelView : ViewModelBase public ObservableCollection Tags { get; } = []; + public ICommand OnLinkGo { get; }= new LinkGoCommand(); + private Process? Process { get => _p; @@ -92,8 +97,14 @@ public partial class ServerEntryModelView : ViewModelBase protected override void InitialiseInDesignMode() { Description = "Server of meow girls! Nya~ \nNyaMeow\nOOOINK!!"; + Links.Add(new ServerLink("Discord","discord","https://cinka.ru")); ServerHubInfo = new ServerHubInfo("ss14://localhost", - new ServerStatus("Ameba", "Locala meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow ", ["rp:hrp", "18+"], "Antag", 15, 5, 1, false, DateTime.Now, 100), ["meow:rp"]); + new ServerStatus("Ameba", + "Locala meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow ", + ["rp:hrp", "18+"], + "Antag", 15, 5, 1, false + , DateTime.Now, 100), + ["meow:rp"]); } protected override void Initialise() @@ -221,7 +232,20 @@ public partial class ServerEntryModelView : ViewModelBase } var info = await GetServerInfo(); - Description = info != null ? info.Desc : "Server offline"; + if (info == null) + { + Description = "Error think!"; + return; + } + + Description = info.Desc; + + Links.Clear(); + foreach (var link in info.Links) + { + Links.Add(link); + } + } private static string FindDotnetPath() @@ -273,4 +297,24 @@ public sealed class LogInfo Category = category, Message = message, CategoryColor = color }; } +} + +public class LinkGoCommand : ICommand +{ + public LinkGoCommand() + { + CanExecuteChanged?.Invoke(this, EventArgs.Empty); + } + public bool CanExecute(object? parameter) + { + return true; + } + + public void Execute(object? parameter) + { + if(parameter is not string str) return; + Helper.SafeOpenBrowser(str); + } + + public event EventHandler? CanExecuteChanged; } \ No newline at end of file diff --git a/Nebula.Launcher/Views/ServerEntryView.axaml b/Nebula.Launcher/Views/ServerEntryView.axaml index bfa9f0a..647ee41 100644 --- a/Nebula.Launcher/Views/ServerEntryView.axaml +++ b/Nebula.Launcher/Views/ServerEntryView.axaml @@ -1,5 +1,5 @@ @@ -169,6 +171,39 @@ + + + + + + + + + + + + + + + AsJson(this HttpContent content) where T : notnull