Files
Nitrox/Nitrox.Launcher/ViewModels/CreateServerViewModel.cs
2025-07-06 00:23:46 +02:00

56 lines
1.5 KiB
C#

using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Nitrox.Launcher.Models.Design;
using Nitrox.Launcher.Models.Validators;
using Nitrox.Launcher.ViewModels.Abstract;
using NitroxModel.Helper;
using NitroxModel.Server;
namespace Nitrox.Launcher.ViewModels;
public partial class CreateServerViewModel : ModalViewModelBase
{
private readonly IKeyValueStore keyValueStore;
[ObservableProperty]
[NotifyCanExecuteChangedFor(nameof(CreateCommand))]
[NotifyDataErrorInfo]
[Required]
[FileName]
[NotEndsWith(".")]
[NitroxUniqueSaveName(nameof(SavesFolderDir))]
private string name;
[ObservableProperty]
private NitroxGameMode selectedGameMode = NitroxGameMode.SURVIVAL;
private string SavesFolderDir => keyValueStore.GetSavesFolderDir();
public CreateServerViewModel()
{
}
public CreateServerViewModel(IKeyValueStore keyValueStore)
{
this.keyValueStore = keyValueStore;
}
public void CreateEmptySave(string saveName, NitroxGameMode saveGameMode)
{
string saveDir = Path.Combine(SavesFolderDir, saveName);
ServerEntry.CreateNew(saveDir, saveGameMode);
}
[RelayCommand(CanExecute = nameof(CanCreate))]
private async Task CreateAsync()
{
await Task.Run(() => CreateEmptySave(Name, SelectedGameMode));
Close(ButtonOptions.Ok);
}
private bool CanCreate() => !HasErrors;
}