diff --git a/LANCommander/App.razor b/LANCommander/App.razor index c5ac499..337fd90 100644 --- a/LANCommander/App.razor +++ b/LANCommander/App.razor @@ -1,6 +1,23 @@ - +@using Microsoft.AspNetCore.Components.Authorization + + + + - + + + @if (context.User.Identity.IsAuthenticated == false) + { + + } + else + { + + } + + diff --git a/LANCommander/Components/ActionEditor.razor b/LANCommander/Components/ActionEditor.razor index a7bc982..283e45f 100644 --- a/LANCommander/Components/ActionEditor.razor +++ b/LANCommander/Components/ActionEditor.razor @@ -1,48 +1,70 @@ @using LANCommander.Data.Models @using LANCommander.Extensions -@inject IDialogService DialogService +@using LANCommander.Models; +@using System.IO.Compression; +@inject ModalService ModalService - - - Name - Path - Arguments - Working Dir - Primary - - + + + + + + + + + + + + +
+
- - Add - + + + + + + + +
@code { - [Parameter] public IEnumerable Actions { get; set; } - [Parameter] public Guid ArchiveId { get; set; } + [Parameter] public Game Game { get; set; } private List OrderedActions { get; set; } protected override async Task OnInitializedAsync() { - OrderedActions = Actions.OrderBy(a => a.SortOrder).ToList(); + OrderedActions = Game.Actions.OrderBy(a => a.SortOrder).ToList(); FixSortOrder(); } - private void AddAction() + private async Task AddAction() { if (OrderedActions == null) OrderedActions = new List(); @@ -54,12 +76,12 @@ }); } - private void RemoveAction(Data.Models.Action action) + private async Task RemoveAction(Data.Models.Action action) { OrderedActions.Remove(action); } - private void MoveUp(Data.Models.Action action) + private async Task MoveUp(Data.Models.Action action) { if (action.SortOrder > 0) OrderedActions.Move(action, action.SortOrder - 1); @@ -67,7 +89,7 @@ FixSortOrder(); } - private void MoveDown(Data.Models.Action action) + private async Task MoveDown(Data.Models.Action action) { if (action.SortOrder < OrderedActions.Count + 1) OrderedActions.Move(action, action.SortOrder + 1); @@ -77,17 +99,27 @@ private async void BrowseForActionPath(Data.Models.Action action) { - var parameters = new DialogParameters - { - ["ArchiveId"] = ArchiveId - }; + var modalOptions = new ModalOptions() + { + Title = "Choose Action Executable", + Maximizable = false, + DefaultMaximized = true, + Closable = true, + OkText = "Select File" + }; - var dialog = await DialogService.ShowAsync("File Selector", parameters); - var result = await dialog.Result; + var browserOptions = new ArchiveBrowserOptions() + { + ArchiveId = Game.Archives.FirstOrDefault().Id, + Select = true, + Multiple = false + }; - if (!result.Canceled) + var modalRef = await ModalService.CreateModalAsync>(modalOptions, browserOptions); + + modalRef.OnOk = (results) => { - action.Path = result.Data as string; + action.Path = results.FirstOrDefault().FullName; var parts = action.Path.Split('/'); @@ -98,7 +130,8 @@ } StateHasChanged(); - } + return Task.CompletedTask; + }; } private void FixSortOrder() @@ -112,6 +145,6 @@ i++; } - Actions = OrderedActions; + Game.Actions = OrderedActions; } } diff --git a/LANCommander/Components/ArchiveBrowser.razor b/LANCommander/Components/ArchiveBrowser.razor index f913fdd..e594ccb 100644 --- a/LANCommander/Components/ArchiveBrowser.razor +++ b/LANCommander/Components/ArchiveBrowser.razor @@ -1,38 +1,50 @@ -@using ByteSizeLib; +@using AntDesign.TableModels; +@using ByteSizeLib; @using LANCommander.Services; @using System.IO.Compression; @inject ArchiveService ArchiveService; - - - - - - + + + + + - - - - Name - Size - Modified - @if (OnFileSelected.HasDelegate) + + + + @if (Select) { - + } - - - - @GetFileName(context) - @ByteSize.FromBytes(context.Length) - @context.LastWriteTime - @if (OnFileSelected.HasDelegate) - { - Select - } - - - + + + + + @GetFileName(context) + + + @ByteSize.FromBytes(context.Length) + + + +
+
+
+ +@code { + [Parameter] public Game Game { get; set; } + + int AllocatedKeys; + + bool ViewModalVisible = false; + bool EditModalVisible = false; + + private StandaloneCodeEditor? Editor; + + private StandaloneEditorConstructionOptions EditorConstructionOptions(StandaloneCodeEditor editor) + { + return new StandaloneEditorConstructionOptions + { + AutomaticLayout = true, + Language = "text", + Value = String.Join('\n', Game.Keys.Select(k => k.Value)), + Theme = "vs-dark", + }; + } + + protected override async Task OnInitializedAsync() + { + AllocatedKeys = Game.Keys.Count(k => k.IsAllocated()); + } + + public void Edit() + { + EditModalVisible = true; + } + + public void View() + { + ViewModalVisible = true; + } + + private async Task Release(Key key) + { + key = await KeyService.Release(key); + + await MessageService.Success("Key was unallocated!"); + } + + private async Task Save() + { + var value = await Editor.GetValue(); + var keys = value.Split("\n").Select(k => k.Trim()).Where(k => !String.IsNullOrWhiteSpace(k)); + + var keysDeleted = Game.Keys.Where(k => !keys.Contains(k.Value)); + var keysAdded = keys.Where(k => !Game.Keys.Any(gk => gk.Value == k)); + + foreach (var key in keysDeleted) + KeyService.Delete(key); + + foreach (var key in keysAdded) + await KeyService.Add(new Key() + { + Game = Game, + Value = key + }); + + EditModalVisible = false; + + await MessageService.Success("Keys updated!"); + } +} diff --git a/LANCommander/Components/MultiplayerModeEditor.razor b/LANCommander/Components/MultiplayerModeEditor.razor index 1bffb45..ae38336 100644 --- a/LANCommander/Components/MultiplayerModeEditor.razor +++ b/LANCommander/Components/MultiplayerModeEditor.razor @@ -1,36 +1,39 @@ @using LANCommander.Data.Enums @using LANCommander.Data.Models - - - Type - Min Players - Max Players - Description - - + + + + + + + + + +
+
- - - - @foreach (MultiplayerType type in Enum.GetValues(typeof(MultiplayerType))) - { - @type - } - - - - - - - - - -
- - - Add - + + + + + + + + @code { [Parameter] public Game Game { get; set; } diff --git a/LANCommander/Components/NavMenu.razor b/LANCommander/Components/NavMenu.razor deleted file mode 100644 index 82a1ea0..0000000 --- a/LANCommander/Components/NavMenu.razor +++ /dev/null @@ -1,4 +0,0 @@ - - Dashboard - Games - \ No newline at end of file diff --git a/LANCommander/Components/RedirectToLogin.razor b/LANCommander/Components/RedirectToLogin.razor new file mode 100644 index 0000000..751b1ae --- /dev/null +++ b/LANCommander/Components/RedirectToLogin.razor @@ -0,0 +1,8 @@ +@inject NavigationManager NavigationManager + +@code { + protected override void OnInitialized() + { + NavigationManager.NavigateTo("/Identity/Account/Login"); + } +} diff --git a/LANCommander/Components/ScriptEditor.razor b/LANCommander/Components/ScriptEditor.razor new file mode 100644 index 0000000..6995474 --- /dev/null +++ b/LANCommander/Components/ScriptEditor.razor @@ -0,0 +1,190 @@ +@using LANCommander.Data.Enums; +@using LANCommander.Models +@using LANCommander.Services +@using System.IO.Compression; +@inject ScriptService ScriptService +@inject ModalService ModalService +@inject IMessageService MessageService + + +
+ + @foreach (var group in Snippets.Select(s => s.Group).Distinct()) + { + + + + @foreach (var snippet in Snippets.Where(s => s.Group == group)) + { + + @snippet.Name + + } + + + + + + + + } + + + + + + + + + +