Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
1a6129b
Added LibraryView base
NinjaPedroX Apr 7, 2026
db833f7
Started work on LibraryView design
NinjaPedroX Apr 8, 2026
d2f3ee3
More work on LibraryView and OptionsView
NinjaPedroX Apr 12, 2026
0892902
Added game installation management and caching
NinjaPedroX Apr 14, 2026
0dc7076
Changed installation removal message wording
NinjaPedroX Apr 14, 2026
58b6c42
Added tooltip icon to "Recent Servers" cards
NinjaPedroX Apr 14, 2026
4c85f00
Added installation refresh button and finished libraryView
NinjaPedroX Apr 14, 2026
1153726
Added check for known game installations
NinjaPedroX Apr 14, 2026
01bc461
Fixed game installation list reordering itself
NinjaPedroX Apr 14, 2026
403a382
Merge branch 'SubnauticaNitrox:master' into library-view
NinjaPedroX Apr 15, 2026
42d6ccb
Handled review comments
NinjaPedroX May 7, 2026
258d445
Added retrieval of remote server statuses
NinjaPedroX May 7, 2026
ac49ed7
Fixed LaunchGameView not showing GamePlatform at startup
NinjaPedroX May 8, 2026
5bcd487
Fixed broken RadioButton spacing for default style
NinjaPedroX May 8, 2026
dd25922
Merge remote-tracking branch 'upstream/master' into library-view
NinjaPedroX May 8, 2026
dab99f4
Better fix for RadioButton spacing
NinjaPedroX May 8, 2026
d89af66
Implemented change suggested by Jannify
NinjaPedroX May 8, 2026
86d149e
Merge remote-tracking branch 'upstream/master' into library-view
NinjaPedroX May 11, 2026
e5e510d
Merge remote-tracking branch 'upstream/master' into library-view
NinjaPedroX May 15, 2026
12f2d61
Fixed duplicated "Player" permission option in manage server view
Measurity May 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Nitrox.Launcher/Assets/Icons/folder.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions Nitrox.Launcher/Assets/Icons/refresh.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Nitrox.Launcher/Assets/Images/tabs-icons/library.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions Nitrox.Launcher/Models/Design/NitroxAttached.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public class NitroxAttached : AvaloniaObject
public static readonly AttachedProperty<bool> IsNumericInputProperty = AvaloniaProperty.RegisterAttached<NitroxAttached, InputElement, bool>("IsNumericInput");
public static readonly AttachedProperty<bool> HasUserInteractedProperty = AvaloniaProperty.RegisterAttached<NitroxAttached, InputElement, bool>("HasUserInteracted");
public static readonly AttachedProperty<bool> UseCustomTitleBarProperty = AvaloniaProperty.RegisterAttached<NitroxAttached, Window, bool>("UseCustomTitleBar", true);
public static readonly AttachedProperty<double> GapWidthProperty = AvaloniaProperty.RegisterAttached<NitroxAttached, RadioButton, double>("GapWidth", 8);
internal static readonly AsyncCommandButtonTagger AsyncCommandButtonTagger;

static NitroxAttached()
Expand Down Expand Up @@ -164,4 +165,8 @@ static void OnKeyDown(object sender, KeyEventArgs e)
public static bool GetUseCustomTitleBar(Window window) => window.GetValue(UseCustomTitleBarProperty);

public static void SetUseCustomTitleBar(Window window, bool value) => window.SetValue(UseCustomTitleBarProperty, value);

public static double GetGapWidth(AvaloniaObject element) => element.GetValue(GapWidthProperty);

public static void SetGapWidth(AvaloniaObject element, double value) => element.SetValue(GapWidthProperty, value);
}
76 changes: 76 additions & 0 deletions Nitrox.Launcher/Models/Design/RecentServerEntry.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
using System;
using Avalonia.Collections;
using Avalonia.Media.Imaging;
using CommunityToolkit.Mvvm.ComponentModel;
using Nitrox.Launcher.Models.Utils;
using Nitrox.Model.Constants;
using Nitrox.Model.Core;

namespace Nitrox.Launcher.Models.Design;

public partial class RecentServerEntry : ObservableObject
{
public static Bitmap DefaultServerIcon { get; } = AssetHelper.GetAssetFromStream("/Assets/Images/subnautica-icon.png", static stream => new Bitmap(stream));

[ObservableProperty]
public partial string LocalServerName { get; set; } = string.Empty;

[ObservableProperty]
[NotifyPropertyChangedFor(nameof(ServerInfoTooltip))]
public partial string? RemoteHostServerName { get; set; }

[ObservableProperty]
[NotifyPropertyChangedFor(nameof(ServerInfoTooltip))]
[NotifyPropertyChangedFor(nameof(VersionMismatchTooltip))]
public partial string? NitroxVersion { get; set; }

[ObservableProperty]
[NotifyPropertyChangedFor(nameof(VersionMismatchTooltip))]
[NotifyPropertyChangedFor(nameof(ShowVersionMismatchWarning))]
public partial bool IsVersionCompatible { get; set; } = true;

public string ServerIP { get; set; } = string.Empty;

public int ServerPort { get; set; } = SubnauticaServerConstants.DEFAULT_PORT;

[ObservableProperty]
public partial Bitmap ServerIcon { get; set; } = DefaultServerIcon;

[ObservableProperty]
public partial bool IsOnline { get; set; }

[ObservableProperty]
public partial bool IsStatusLoading { get; set; }

[ObservableProperty]
public partial int PlayerCount { get; set; }

[ObservableProperty]
public partial int MaxPlayers { get; set; } = SubnauticaServerConstants.DEFAULT_MAX_PLAYERS;

[ObservableProperty]
[NotifyPropertyChangedFor(nameof(PlayerNamesTooltip))]
public partial AvaloniaList<string> PlayerNames { get; set; } = [];

public string? PlayerNamesTooltip => PlayerNames.Count == 0 ? null : string.Join(Environment.NewLine, PlayerNames);

public string? ServerInfoTooltip
{
get
{
if (string.IsNullOrWhiteSpace(ServerIP))
{
return null;
}

string endpoint = $"IP: {ServerIP}{Environment.NewLine}Port: {ServerPort}";

return string.IsNullOrWhiteSpace(RemoteHostServerName) ? endpoint : $"Host server name: {RemoteHostServerName}{Environment.NewLine}{endpoint}";
}
}

public string? VersionMismatchTooltip => $"Server version: {NitroxVersion}{Environment.NewLine}Your version: {NitroxEnvironment.Version}";


public bool ShowVersionMismatchWarning => !IsStatusLoading && !IsVersionCompatible;
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ public static IServiceCollection AddAppServices(this IServiceCollection services
.AddHostedSingletonService<StopAvaloniaOnHostExitService>()
.AddHostedSingletonService<PreventMultipleAppInstancesService>()
.AddHostedSingletonService<WriteGrpcPortFileService>()
.AddSingleton<GameInstallationService>()
.AddSingleton<ServerService>()
.AddSingleton<RecentServerStatusService>()
.AddSingleton<DialogService>()
.AddSingleton<StorageService>()
.AddSingleton<BackupService>()
Expand Down
Loading
Loading