diff --git a/Aaru.Server/Components/Admin/AdminNavMenu.razor b/Aaru.Server/Components/Admin/AdminNavMenu.razor index 0b9bb56a..da0e9d29 100644 --- a/Aaru.Server/Components/Admin/AdminNavMenu.razor +++ b/Aaru.Server/Components/Admin/AdminNavMenu.razor @@ -44,6 +44,9 @@ PCMCIA + + SCSI CD-ROM Capabilities + SCSI MODE SENSE pages diff --git a/Aaru.Server/Components/Admin/Pages/Scsi/Cdrom/List.razor b/Aaru.Server/Components/Admin/Pages/Scsi/Cdrom/List.razor new file mode 100644 index 00000000..86a91e9e --- /dev/null +++ b/Aaru.Server/Components/Admin/Pages/Scsi/Cdrom/List.razor @@ -0,0 +1,80 @@ +@page "/admin/scsi/cdrom" +@attribute [Authorize] +@layout AdminLayout +@rendermode InteractiveServer + +@inject Microsoft.EntityFrameworkCore.IDbContextFactory DbContextFactory + +SCSI CD-ROM Capabilities + +@if(!_initialized) +{ +
+

Loading...

+
+ + return; +} + +
+

SCSI CD-ROM Capabilities

+ + + + + + + + + + + @foreach(MmcModelForView item in _items) + { + + + + + + + } + +
+ @DisplayNameHelper.GetDisplayName(typeof(MmcModelForView), nameof(MmcModelForView.Id)) + + @DisplayNameHelper.GetDisplayName(typeof(MmcModelForView), nameof(MmcModelForView.FeaturesId)) + + @DisplayNameHelper.GetDisplayName(typeof(MmcModelForView), nameof(MmcModelForView.DataLength)) + + Actions +
+ @item.Id + + @if(item.FeaturesId != null) + { + @item.FeaturesId + } + else + { + @item.FeaturesId + } + + @item.DataLength + + Details + +
+
+ + + +
Are you sure you want to delete this SCSI CD-ROM Capabilities?
+
+ + + + +
\ No newline at end of file diff --git a/Aaru.Server/Components/Admin/Pages/Scsi/Cdrom/List.razor.cs b/Aaru.Server/Components/Admin/Pages/Scsi/Cdrom/List.razor.cs new file mode 100644 index 00000000..eb44d08b --- /dev/null +++ b/Aaru.Server/Components/Admin/Pages/Scsi/Cdrom/List.razor.cs @@ -0,0 +1,99 @@ +using Aaru.Server.Database.Models; +using BlazorBootstrap; +using Microsoft.EntityFrameworkCore; +using DbContext = Aaru.Server.Database.DbContext; + +namespace Aaru.Server.Components.Admin.Pages.Scsi.Cdrom; + +public partial class List +{ + private int _deleteId; + private Modal? _deleteModal; + bool _initialized; + List _items; + + /// + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + + StateHasChanged(); + + await using DbContext ctx = await DbContextFactory.CreateDbContextAsync(); + + _items = await ctx.Mmc.Where(static m => m.ModeSense2AData != null) + .Select(static m => new MmcModelForView + { + Id = m.Id, + FeaturesId = m.FeaturesId, + DataLength = m.ModeSense2AData.Length + }) + .Concat(ctx.Mmc.Where(static m => m.ModeSense2AData == null) + .Select(static m => new MmcModelForView + { + Id = m.Id, + FeaturesId = m.FeaturesId, + DataLength = 0 + })) + .OrderBy(static m => m.Id) + .ToListAsync(); + + _initialized = true; + + StateHasChanged(); + } + + private async Task ShowDeleteModal(int id) + { + _deleteId = id; + if(_deleteModal != null) await _deleteModal.ShowAsync(); + } + + private async Task HideDeleteModal() + { + if(_deleteModal != null) await _deleteModal.HideAsync(); + } + + private async Task ConfirmDelete() + { + await DeleteVersionAsync(_deleteId); + await HideDeleteModal(); + await RefreshItemsAsync(); + } + + private async Task DeleteVersionAsync(int id) + { + await using DbContext ctx = await DbContextFactory.CreateDbContextAsync(); + CommonTypes.Metadata.Mmc? mmc = await ctx.Mmc.FindAsync(id); + + if(mmc is not null) + { + ctx.Mmc.Remove(mmc); + await ctx.SaveChangesAsync(); + } + } + + private async Task RefreshItemsAsync() + { + await using DbContext ctx = await DbContextFactory.CreateDbContextAsync(); + + _items = await ctx.Mmc.Where(static m => m.ModeSense2AData != null) + .Select(static m => new MmcModelForView + { + Id = m.Id, + FeaturesId = m.FeaturesId, + DataLength = m.ModeSense2AData.Length + }) + .Concat(ctx.Mmc.Where(static m => m.ModeSense2AData == null) + .Select(static m => new MmcModelForView + { + Id = m.Id, + FeaturesId = m.FeaturesId, + DataLength = 0 + })) + .OrderBy(static m => m.Id) + .ToListAsync(); + + StateHasChanged(); + } +} \ No newline at end of file