diff --git a/Nebula.Launcher/ViewModels/ServerListViewModel.cs b/Nebula.Launcher/ViewModels/ServerListViewModel.cs index 2f62078..f88bfca 100644 --- a/Nebula.Launcher/ViewModels/ServerListViewModel.cs +++ b/Nebula.Launcher/ViewModels/ServerListViewModel.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Collections.ObjectModel; using CommunityToolkit.Mvvm.ComponentModel; using Nebula.Launcher.Models; @@ -11,22 +12,22 @@ namespace Nebula.Launcher.ViewModels; [ViewRegister(typeof(ServerListView))] public partial class ServerListViewModel : ViewModelBase { - public ObservableCollection ServerInfos { get; } + public ObservableCollection ServerInfos { get; } = new ObservableCollection(); [ObservableProperty] private ServerHubInfo? _selectedListItem; + + private List UnsortedServers { get; } = new List(); //Design think public ServerListViewModel() { - ServerInfos = new ObservableCollection(); ServerInfos.Add(new ServerHubInfo("ss14://localhost",new ServerStatus("Nebula","TestCraft", ["16+","RU"], "super", 12,55,1,false,DateTime.Now, 20),[])); } //real think public ServerListViewModel(IServiceProvider serviceProvider, HubService hubService) : base(serviceProvider) { - ServerInfos = new ObservableCollection(); hubService.HubServerChangedEventArgs += HubServerChangedEventArgs; } @@ -36,15 +37,38 @@ public partial class ServerListViewModel : ViewModelBase { foreach (var info in obj.Items) { - ServerInfos.Add(info); + UnsortedServers.Add(info); } } else { foreach (var info in obj.Items) { - ServerInfos.Remove(info); + UnsortedServers.Remove(info); } } + + ServerInfos.Clear(); + UnsortedServers.Sort(new ServerComparer()); + foreach (var VARIABLE in UnsortedServers) + { + ServerInfos.Add(VARIABLE); + } + } +} + +public class ServerComparer : IComparer +{ + public int Compare(ServerHubInfo? x, ServerHubInfo? y) + { + if (ReferenceEquals(x, y)) + return 0; + if (ReferenceEquals(null, y)) + return 1; + if (ReferenceEquals(null, x)) + return -1; + + return y.StatusData.Players.CompareTo(x.StatusData.Players); + } } \ No newline at end of file diff --git a/Nebula.Launcher/Views/Pages/ServerListView.axaml b/Nebula.Launcher/Views/Pages/ServerListView.axaml index 8ce0f86..bb7b558 100644 --- a/Nebula.Launcher/Views/Pages/ServerListView.axaml +++ b/Nebula.Launcher/Views/Pages/ServerListView.axaml @@ -25,15 +25,15 @@ + RowDefinitions="30,*"> -