From 9565633e2153bf457509767594f7b6230c4bbefb Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 4 Jan 2024 17:31:53 -0500 Subject: [PATCH 1/4] allows the launcher to display the reported panic bunker status of servers --- SS14.Launcher/Api/ServerApi.cs | 2 ++ .../Models/ServerStatus/IServerStatusData.cs | 2 ++ .../ServerStatus/ServerStatusCache.Data.cs | 7 +++++ .../Models/ServerStatus/ServerStatusCache.cs | 1 + SS14.Launcher/Utility/ServerFilter.cs | 1 + .../MainWindowTabs/ServerEntryViewModel.cs | 10 +++++-- .../ServerListFiltersViewModel.cs | 28 +++++++++++++++++++ .../MainWindowTabs/ServerListFiltersView.xaml | 5 ++++ 8 files changed, 54 insertions(+), 2 deletions(-) diff --git a/SS14.Launcher/Api/ServerApi.cs b/SS14.Launcher/Api/ServerApi.cs index af59e17a5..2f684eec0 100644 --- a/SS14.Launcher/Api/ServerApi.cs +++ b/SS14.Launcher/Api/ServerApi.cs @@ -13,6 +13,8 @@ public sealed record ServerStatus( int PlayerCount, [property: JsonPropertyName("soft_max_players")] int SoftMaxPlayerCount, + [property: JsonPropertyName("panic_bunker")] + bool? PanicBunker, [property: JsonPropertyName("tags")] string[]? Tags); /// diff --git a/SS14.Launcher/Models/ServerStatus/IServerStatusData.cs b/SS14.Launcher/Models/ServerStatus/IServerStatusData.cs index e94835bea..8c675b958 100644 --- a/SS14.Launcher/Models/ServerStatus/IServerStatusData.cs +++ b/SS14.Launcher/Models/ServerStatus/IServerStatusData.cs @@ -25,4 +25,6 @@ public interface IServerStatusData : INotifyPropertyChanged int PlayerCount { get; set; } int SoftMaxPlayerCount { get; set; } + + bool? PanicBunker { get; set; } } diff --git a/SS14.Launcher/Models/ServerStatus/ServerStatusCache.Data.cs b/SS14.Launcher/Models/ServerStatus/ServerStatusCache.Data.cs index 9e7b86b50..0485090c3 100644 --- a/SS14.Launcher/Models/ServerStatus/ServerStatusCache.Data.cs +++ b/SS14.Launcher/Models/ServerStatus/ServerStatusCache.Data.cs @@ -11,6 +11,7 @@ public sealed class ServerStatusData : ObservableObject, IServerStatusData private TimeSpan? _ping; private int _playerCount; private int _softMaxPlayerCount; + private bool? _panicBunker; private ServerStatusCode _status = ServerStatusCode.FetchingStatus; private ServerStatusInfoCode _statusInfo = ServerStatusInfoCode.NotFetched; private ServerInfoLink[]? _links; @@ -77,6 +78,12 @@ public int SoftMaxPlayerCount set => SetProperty(ref _softMaxPlayerCount, value); } + public bool? PanicBunker + { + get => _panicBunker; + set => SetProperty(ref _panicBunker, value); + } + public ServerInfoLink[]? Links { get => _links; diff --git a/SS14.Launcher/Models/ServerStatus/ServerStatusCache.cs b/SS14.Launcher/Models/ServerStatus/ServerStatusCache.cs index d4f56c6d7..73b9e34f7 100644 --- a/SS14.Launcher/Models/ServerStatus/ServerStatusCache.cs +++ b/SS14.Launcher/Models/ServerStatus/ServerStatusCache.cs @@ -123,6 +123,7 @@ public static void ApplyStatus(ServerStatusData data, ServerApi.ServerStatus sta data.Name = status.Name; data.PlayerCount = status.PlayerCount; data.SoftMaxPlayerCount = status.SoftMaxPlayerCount; + data.PanicBunker = status.PanicBunker; var baseTags = status.Tags ?? Array.Empty(); var inferredTags = ServerTagInfer.InferTags(status); diff --git a/SS14.Launcher/Utility/ServerFilter.cs b/SS14.Launcher/Utility/ServerFilter.cs index b82fdb367..75b1a9ce2 100644 --- a/SS14.Launcher/Utility/ServerFilter.cs +++ b/SS14.Launcher/Utility/ServerFilter.cs @@ -57,4 +57,5 @@ public enum ServerFilterCategory : byte EighteenPlus = 4, PlayerCount = 5, Hub = 6, + Bunker = 7, } diff --git a/SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs b/SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs index eb125512a..6781a277e 100644 --- a/SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs +++ b/SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs @@ -79,14 +79,19 @@ public string ServerStatusString case ServerStatusCode.Offline: return "OFFLINE"; case ServerStatusCode.Online: + var statusappend = $""; + if (_cacheData.PanicBunker == null) + statusappend += " ?"; + else if (_cacheData.PanicBunker == true) + statusappend += " 🔒"; // Give a ratio for servers with a defined player count, or just a current number for those without. if (_cacheData.SoftMaxPlayerCount > 0) { - return $"{_cacheData.PlayerCount} / {_cacheData.SoftMaxPlayerCount}"; + return $"{_cacheData.PlayerCount} / {_cacheData.SoftMaxPlayerCount}{statusappend}"; } else { - return $"{_cacheData.PlayerCount} / ∞"; + return $"{_cacheData.PlayerCount} / ∞ {statusappend}"; } case ServerStatusCode.FetchingStatus: return "Fetching..."; @@ -210,6 +215,7 @@ private void OnCacheDataOnPropertyChanged(object? _, PropertyChangedEventArgs ar { case nameof(IServerStatusData.PlayerCount): case nameof(IServerStatusData.SoftMaxPlayerCount): + case nameof(IServerStatusData.PanicBunker): OnPropertyChanged(nameof(ServerStatusString)); break; diff --git a/SS14.Launcher/ViewModels/MainWindowTabs/ServerListFiltersViewModel.cs b/SS14.Launcher/ViewModels/MainWindowTabs/ServerListFiltersViewModel.cs index cbc49160a..f4e00e701 100644 --- a/SS14.Launcher/ViewModels/MainWindowTabs/ServerListFiltersViewModel.cs +++ b/SS14.Launcher/ViewModels/MainWindowTabs/ServerListFiltersViewModel.cs @@ -25,12 +25,14 @@ public sealed partial class ServerListFiltersViewModel : ObservableObject private readonly FilterListCollection _filtersRolePlay = new(); private readonly FilterListCollection _filtersEighteenPlus = new(); private readonly FilterListCollection _filtersHub = new(); + private readonly FilterListCollection _filtersBunker = new(); public ObservableCollection FiltersLanguage => _filtersLanguage; public ObservableCollection FiltersRegion => _filtersRegion; public ObservableCollection FiltersRolePlay => _filtersRolePlay; public ObservableCollection FiltersEighteenPlus => _filtersEighteenPlus; public ObservableCollection FiltersHub => _filtersHub; + public ObservableCollection FiltersBunker => _filtersBunker; public ServerFilterViewModel FilterPlayerCountHideEmpty { get; } public ServerFilterViewModel FilterPlayerCountHideFull { get; } @@ -60,6 +62,11 @@ public ServerListFiltersViewModel(DataManager dataManager) FiltersEighteenPlus.Add(new ServerFilterViewModel("No", "No", new ServerFilter(ServerFilterCategory.EighteenPlus, ServerFilter.DataFalse), this)); + FiltersBunker.Add(new ServerFilterViewModel("Yes", "Yes", + new ServerFilter(ServerFilterCategory.Bunker, ServerFilter.DataTrue), this)); + FiltersBunker.Add(new ServerFilterViewModel("No", "No", + new ServerFilter(ServerFilterCategory.Bunker, ServerFilter.DataFalse), this)); + FilterPlayerCountHideEmpty = new ServerFilterViewModel( "Servers with no players will not be shown", "Hide empty", @@ -256,6 +263,21 @@ public void ApplyFilters(List list) eighteenPlus = false; } + bool? panicBunker = null; + if (GetFilter(ServerFilterCategory.Bunker, ServerFilter.DataTrue)) + { + panicBunker = true; + } + + if (GetFilter(ServerFilterCategory.Bunker, ServerFilter.DataFalse)) + { + // Having both + if (panicBunker == true) + panicBunker = null; + else + panicBunker = false; + } + for (var i = 0; i < list.Count; i++) { var server = list[i]; @@ -278,6 +300,12 @@ bool DoesServerMatch(ServerStatusData server) return false; } + if (panicBunker != null) + { + if (panicBunker != server.PanicBunker) + return false; + } + if (!CheckCategoryFilterSet(categorySetLanguage, server.Tags, Tags.TagLanguage, PrimaryLanguageTag)) return false; diff --git a/SS14.Launcher/Views/MainWindowTabs/ServerListFiltersView.xaml b/SS14.Launcher/Views/MainWindowTabs/ServerListFiltersView.xaml index 0ff0eefbd..58381da0c 100644 --- a/SS14.Launcher/Views/MainWindowTabs/ServerListFiltersView.xaml +++ b/SS14.Launcher/Views/MainWindowTabs/ServerListFiltersView.xaml @@ -56,6 +56,11 @@ + + + + From 69b66f9ddcb2dc5521eae602892e9c2932bdf388 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 4 Jan 2024 17:37:36 -0500 Subject: [PATCH 2/4] add a lil note --- SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs b/SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs index 6781a277e..b464b5a9c 100644 --- a/SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs +++ b/SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs @@ -83,7 +83,7 @@ public string ServerStatusString if (_cacheData.PanicBunker == null) statusappend += " ?"; else if (_cacheData.PanicBunker == true) - statusappend += " 🔒"; + statusappend += " 🔒"; //TODO: replace this with a proper lock icon. we know Visne's currently working on iconing up the launcher in #126; they might be interested in giving this a proper icon // Give a ratio for servers with a defined player count, or just a current number for those without. if (_cacheData.SoftMaxPlayerCount > 0) { From f0cb240b576eb0860e8471bb67ccddd33dbeb448 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 4 Jan 2024 20:00:43 -0500 Subject: [PATCH 3/4] Redesigns the display to address comments --- .../MainWindowTabs/ServerEntryViewModel.cs | 46 ++++++++++++++++--- .../Views/MainWindowTabs/ServerEntryView.xaml | 8 ++++ .../MainWindowTabs/ServerListTabView.xaml | 11 +++++ 3 files changed, 58 insertions(+), 7 deletions(-) diff --git a/SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs b/SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs index b464b5a9c..e56b3d9b8 100644 --- a/SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs +++ b/SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs @@ -79,19 +79,14 @@ public string ServerStatusString case ServerStatusCode.Offline: return "OFFLINE"; case ServerStatusCode.Online: - var statusappend = $""; - if (_cacheData.PanicBunker == null) - statusappend += " ?"; - else if (_cacheData.PanicBunker == true) - statusappend += " 🔒"; //TODO: replace this with a proper lock icon. we know Visne's currently working on iconing up the launcher in #126; they might be interested in giving this a proper icon // Give a ratio for servers with a defined player count, or just a current number for those without. if (_cacheData.SoftMaxPlayerCount > 0) { - return $"{_cacheData.PlayerCount} / {_cacheData.SoftMaxPlayerCount}{statusappend}"; + return $"{_cacheData.PlayerCount} / {_cacheData.SoftMaxPlayerCount}"; } else { - return $"{_cacheData.PlayerCount} / ∞ {statusappend}"; + return $"{_cacheData.PlayerCount} / ∞"; } case ServerStatusCode.FetchingStatus: return "Fetching..."; @@ -101,6 +96,38 @@ public string ServerStatusString } } + public string BunkerIcon + { + get + { + switch (_cacheData.PanicBunker) + { + case true: + return "🚪"; //TODO: replace this with a proper icon. This might be doable in 126? We'd rather not step on Visne's toes for now, so a system-dependant emoji will do. + case null: + return "?"; + default: + return ""; + } + } + } + + public string BunkerText + { + get + { + switch (_cacheData.PanicBunker) + { + case true: + return "Panic Bunker Enabled"; + case false: + return "Panic Bunker Disabled"; + default: + return "Missing Panic Bunker Information"; + } + } + } + public string Description { get @@ -215,8 +242,13 @@ private void OnCacheDataOnPropertyChanged(object? _, PropertyChangedEventArgs ar { case nameof(IServerStatusData.PlayerCount): case nameof(IServerStatusData.SoftMaxPlayerCount): + OnPropertyChanged(nameof(ServerStatusString)); + break; + case nameof(IServerStatusData.PanicBunker): OnPropertyChanged(nameof(ServerStatusString)); + OnPropertyChanged(nameof(BunkerIcon)); + OnPropertyChanged(nameof(BunkerText)); break; case nameof(IServerStatusData.Status): diff --git a/SS14.Launcher/Views/MainWindowTabs/ServerEntryView.xaml b/SS14.Launcher/Views/MainWindowTabs/ServerEntryView.xaml index 1f7e1c59e..ba6fbac5a 100644 --- a/SS14.Launcher/Views/MainWindowTabs/ServerEntryView.xaml +++ b/SS14.Launcher/Views/MainWindowTabs/ServerEntryView.xaml @@ -22,6 +22,14 @@ MinWidth="80" Margin="10, 0" /> + + + + + + diff --git a/SS14.Launcher/Views/MainWindowTabs/ServerListTabView.xaml b/SS14.Launcher/Views/MainWindowTabs/ServerListTabView.xaml index 2884e9b4e..2ec91553b 100644 --- a/SS14.Launcher/Views/MainWindowTabs/ServerListTabView.xaml +++ b/SS14.Launcher/Views/MainWindowTabs/ServerListTabView.xaml @@ -39,6 +39,17 @@ + + + + + + + + + + + From 4bd17c9bd092a7b32acd258ddc081e3f47613d6a Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 4 Jun 2024 19:27:10 -0400 Subject: [PATCH 4/4] web vscode edit to replace the door emoji with a clock (untested) --- SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs | 2 +- SS14.Launcher/Views/MainWindowTabs/ServerListTabView.xaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs b/SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs index a1b8cadfe..567d7c2e6 100644 --- a/SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs +++ b/SS14.Launcher/ViewModels/MainWindowTabs/ServerEntryViewModel.cs @@ -101,7 +101,7 @@ public string BunkerIcon switch (_cacheData.PanicBunker) { case true: - return "🚪"; //TODO: replace this with a proper icon. This might be doable in 126? We'd rather not step on Visne's toes for now, so a system-dependant emoji will do. + return "⏲️"; //TODO: replace this with a proper icon. This might be doable in 126? We'd rather not step on Visne's toes for now, so a system-dependant emoji will do. case null: return "?"; default: diff --git a/SS14.Launcher/Views/MainWindowTabs/ServerListTabView.xaml b/SS14.Launcher/Views/MainWindowTabs/ServerListTabView.xaml index 1d39e9497..5ca7cede5 100644 --- a/SS14.Launcher/Views/MainWindowTabs/ServerListTabView.xaml +++ b/SS14.Launcher/Views/MainWindowTabs/ServerListTabView.xaml @@ -34,7 +34,7 @@ - +