LANCommander/LANCommander.Launcher/UI/Settings/Index.razor

155 lines
5.8 KiB
Text
Raw Permalink Normal View History

2024-07-07 20:28:03 -05:00
@page "/Settings"
@using System.Globalization
@using LANCommander.Launcher.Models
2024-07-07 20:28:03 -05:00
@inject NavigationManager NavigationManager
@inject UpdateService UpdateService
2024-08-16 18:36:17 -05:00
@inject SDK.Client Client
2024-07-07 20:28:03 -05:00
@inject IMessageService MessageService
@inject ILogger<Index> Logger
@inject LocalizationService LocalizationService
2024-07-07 20:28:03 -05:00
2024-08-01 00:30:54 -05:00
<div style="flex-grow: 1">
<PageHeader Title="Settings" OnBack="@(() => { NavigationManager.NavigateTo("/"); })" Style="padding-top: 48px">
<PageHeaderExtra>
2025-02-16 00:32:02 -06:00
<Flex Gap="FlexGap.Small" Justify="FlexJustify.End">
<Button OnClick="CheckForUpdates">@LocalizationService.GetString("CheckForUpdates")</Button>
<Button OnClick="Save" Type="ButtonType.Primary">@LocalizationService.GetString("Save")</Button>
2025-02-16 00:32:02 -06:00
</Flex>
2024-08-01 00:30:54 -05:00
</PageHeaderExtra>
</PageHeader>
2024-07-07 20:28:03 -05:00
<Form Model="_settings" Layout="@FormLayout.Vertical" Style="padding: 0 24px">
<Divider Orientation="DividerOrientation.Left" Plain>@LocalizationService.GetString("Games")</Divider>
<FormItem Label="@LocalizationService.GetString("StoragePaths")">
2025-02-16 00:32:02 -06:00
<Flex Direction="FlexDirection.Vertical" Gap="FlexGap.Middle">
@foreach (var installDirectory in _installDirectories)
{
2025-02-16 00:32:02 -06:00
<Flex Gap="FlexGap.Small">
<Input @bind-Value="installDirectory.Path"/>
<Button OnClick="() => RemoveInstallDirectory(installDirectory)" Type="@ButtonType.Text" Danger Icon="@IconType.Outline.Close" Disabled="_installDirectories.Count == 1"/>
2025-02-16 00:32:02 -06:00
</Flex>
}
2025-02-16 00:32:02 -06:00
<Flex Justify="FlexJustify.End">
<Button OnClick="AddInstallDirectory" Type="ButtonType.Primary">@LocalizationService.GetString("AddPath")</Button>
2025-02-16 00:32:02 -06:00
</Flex>
</Flex>
2024-08-01 00:30:54 -05:00
</FormItem>
2024-07-07 20:28:03 -05:00
<Divider Orientation="DividerOrientation.Left" Plain>@LocalizationService.GetString("Media")</Divider>
<FormItem Label="@LocalizationService.GetString("StoragePath")">
2024-08-01 00:30:54 -05:00
<Input @bind-Value="@context.Media.StoragePath" />
</FormItem>
<Divider Orientation="DividerOrientation.Left" Plain>@LocalizationService.GetString("UI")</Divider>
<FormItem Label="@LocalizationService.GetString("Language")">
<Select @bind-Value="@context.Culture" TItem="string" TItemValue="string" DataSource="_supportedCultures">
<LabelTemplate Context="Value">@(CultureInfo.GetCultureInfo(Value).NativeName)</LabelTemplate>
<ItemTemplate Context="Value">@(CultureInfo.GetCultureInfo(Value).NativeName)</ItemTemplate>
</Select>
</FormItem>
2024-07-07 20:28:03 -05:00
<Divider Orientation="DividerOrientation.Left" Plain>@LocalizationService.GetString("Debug")</Divider>
<FormItem Label="@LocalizationService.GetString("EnableScriptDebugging")">
2024-08-01 00:30:54 -05:00
<Switch @bind-Checked="@context.Debug.EnableScriptDebugging" />
</FormItem>
<FormItem Label="@LocalizationService.GetString("LoggingPath")">
2024-08-01 00:30:54 -05:00
<Input @bind-Value="@context.Debug.LoggingPath" />
</FormItem>
<FormItem Label="@LocalizationService.GetString("LoggingLevel")">
2024-08-01 00:30:54 -05:00
<Select @bind-Value="@context.Debug.LoggingLevel" TItem="LogLevel" TItemValue="LogLevel" DataSource="Enum.GetValues<LogLevel>()">
<LabelTemplate Context="Value">@Value.GetDisplayName()</LabelTemplate>
<ItemTemplate Context="Value">@Value.GetDisplayName()</ItemTemplate>
</Select>
</FormItem>
</Form>
</div>
2025-02-16 00:32:02 -06:00
<Flex Justify="FlexJustify.Center" Style="padding: 12px;">
LANCommander Launcher v@(UpdateService.GetCurrentVersion().ToString())
</Flex>
2024-07-07 20:28:03 -05:00
@code {
Settings _settings;
2024-07-07 20:28:03 -05:00
List<InstallDirectory> _installDirectories = new();
string[] _supportedCultures = new[]
{
"en-US",
"de",
"es",
"fr",
"it",
"pt-BR",
"nl",
"ja",
"zh",
"ko",
"uk"
};
internal class InstallDirectory
{
internal Guid Id { get; set; }
internal string Path { get; set; }
public InstallDirectory(string path)
{
Id = Guid.NewGuid();
Path = path;
}
}
2024-07-07 20:28:03 -05:00
protected override async Task OnInitializedAsync()
{
_settings = SettingService.GetSettings();
foreach (var installDirectory in _settings.Games.InstallDirectories)
{
_installDirectories.Add(new InstallDirectory(installDirectory));
}
2024-07-07 20:28:03 -05:00
}
void Save()
{
try
{
_settings.Games.InstallDirectories = _installDirectories.Where(d => !String.IsNullOrWhiteSpace(d.Path)).Select(d => d.Path).ToArray();
SettingService.SaveSettings(_settings);
2024-07-07 20:28:03 -05:00
Client.DefaultInstallDirectory = _settings.Games.InstallDirectories.First();
Client.Scripts.Debug = _settings.Debug.EnableScriptDebugging;
2024-08-16 18:36:17 -05:00
MessageService.Success(LocalizationService.GetString("SettingsSaved"));
2024-07-07 20:28:03 -05:00
}
catch (Exception ex)
{
MessageService.Error(LocalizationService.GetString("AnUnknownErrorOccurred"));
2024-07-07 20:28:03 -05:00
Logger.LogError(ex, "An unknown error occurred.");
}
}
async Task CheckForUpdates()
{
var updateVersion = await UpdateService.CheckForUpdateAsync();
Logger.LogDebug("Checked for update: {UpdateVersion}", updateVersion.Version);
if (updateVersion.Version == null)
MessageService.Success(LocalizationService.GetString("YouAreOnLatestVersion"));
}
async Task AddInstallDirectory()
{
_installDirectories.Add(new InstallDirectory(""));
StateHasChanged();
}
async Task RemoveInstallDirectory(InstallDirectory installDirectory)
{
_installDirectories.Remove(installDirectory);
}
2024-07-07 20:28:03 -05:00
}