diff --git a/Nebula.Launcher/ViewModels/Pages/ServerListViewModel.cs b/Nebula.Launcher/ViewModels/Pages/ServerListViewModel.cs index f4c4efa..e70c30d 100644 --- a/Nebula.Launcher/ViewModels/Pages/ServerListViewModel.cs +++ b/Nebula.Launcher/ViewModels/Pages/ServerListViewModel.cs @@ -26,6 +26,7 @@ public partial class ServerListViewModel : ViewModelBase //Design think protected override void InitialiseInDesignMode() { + Console.WriteLine("SOSAL"); ServerInfos.Add(CreateServerView(new ServerHubInfo("ss14://localhost", new ServerStatus("Nebula", "TestCraft", ["16+", "RU"], "super", 12, 55, 1, false, DateTime.Now, 20), []))); ServerInfos.Add(CreateServerView(new ServerHubInfo("ss14://localhost", @@ -37,6 +38,7 @@ public partial class ServerListViewModel : ViewModelBase //real think protected override void Initialise() { + Console.WriteLine("SOSAL!!"); foreach (var info in HubService.ServerList) UnsortedServers.Add(info); HubService.HubServerChangedEventArgs += HubServerChangedEventArgs; diff --git a/Nebula.Launcher/ViewModels/ServerEntryModelView.cs b/Nebula.Launcher/ViewModels/ServerEntryModelView.cs index 0df9c3e..86977fe 100644 --- a/Nebula.Launcher/ViewModels/ServerEntryModelView.cs +++ b/Nebula.Launcher/ViewModels/ServerEntryModelView.cs @@ -1,15 +1,22 @@ using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Diagnostics; using System.IO; +using System.Linq; using System.Text; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; +using Avalonia; using Avalonia.Media; +using CommunityToolkit.Mvvm.ComponentModel; using Nebula.Launcher.Services; using Nebula.Launcher.ViewModels.Popup; using Nebula.Launcher.Views; using Nebula.Shared.Models; using Nebula.Shared.Services; +using Nebula.Shared.Utils; namespace Nebula.Launcher.ViewModels; @@ -28,10 +35,49 @@ public partial class ServerEntryModelView : ViewModelBase [GenerateProperty] private RunnerService RunnerService { get; } = default!; [GenerateProperty] private PopupMessageService PopupMessageService { get; } = default!; [GenerateProperty] private ViewHelperService ViewHelperService { get; } = default!; + [GenerateProperty] private RestService RestService { get; } = default!; + [ObservableProperty] private string _description = "..."; + [ObservableProperty] private bool _expandInfo = false; public bool RunVisible => Process == null; - public ServerHubInfo ServerHubInfo { get; set; } = default!; + private ServerInfo? _serverInfo = null; + + public async Task GetServerInfo() + { + if (_serverInfo == null) + { + var result = + await RestService.GetAsync(ServerHubInfo.Address.ToRobustUrl().InfoUri, CancellationService.Token); + if (result.Value == null) return null; + _serverInfo = result.Value; + } + + return _serverInfo; + } + + private ServerHubInfo _serverHubInfo = default!; + public ServerHubInfo ServerHubInfo + { + get => _serverHubInfo; + set + { + Tags.Clear(); + foreach (var tag in value.StatusData.Tags) + { + Tags.Add(tag); + } + foreach (var tag in value.InferredTags) + { + Tags.Add(tag); + } + + _serverHubInfo = value; + OnPropertyChanged(nameof(ServerHubInfo)); + } + } + + public ObservableCollection Tags { get; } = []; private Process? Process { @@ -45,7 +91,9 @@ public partial class ServerEntryModelView : ViewModelBase protected override void InitialiseInDesignMode() { - + Description = "Server of meow girls! Nya~ \nNyaMeow\nOOOINK!!"; + ServerHubInfo = new ServerHubInfo("ss14://localhost", + new ServerStatus("Ameba", "Locala", ["rp:hrp", "18+"], "Antag", 15, 5, 1, false, DateTime.Now, 100), ["meow:rp"]); } protected override void Initialise() @@ -164,6 +212,18 @@ public partial class ServerEntryModelView : ViewModelBase Process?.CloseMainWindow(); } + public async void ExpandInfoRequired() + { + ExpandInfo = !ExpandInfo; + if (Avalonia.Controls.Design.IsDesignMode) + { + return; + } + + var info = await GetServerInfo(); + Description = info != null ? info.Desc : "Server offline"; + } + private static string FindDotnetPath() { var pathEnv = Environment.GetEnvironmentVariable("PATH"); diff --git a/Nebula.Launcher/Views/ServerEntryView.axaml b/Nebula.Launcher/Views/ServerEntryView.axaml index 0896003..7960abf 100644 --- a/Nebula.Launcher/Views/ServerEntryView.axaml +++ b/Nebula.Launcher/Views/ServerEntryView.axaml @@ -1,37 +1,51 @@ - + - - - - - - + + + + + + + + @@ -43,106 +57,123 @@ - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +