diff --git a/DiscImageChef.Helpers b/DiscImageChef.Helpers index d6f89387..69374687 160000 --- a/DiscImageChef.Helpers +++ b/DiscImageChef.Helpers @@ -1 +1 @@ -Subproject commit d6f8938721c0381498ba32a4026021048e7c4ae7 +Subproject commit 693746872823edaab18c33137c72afcb2163c9f9 diff --git a/DiscImageChef.Server/Areas/Admin/Controllers/TestedMediasController.cs b/DiscImageChef.Server/Areas/Admin/Controllers/TestedMediasController.cs index 07b3d3c2..3b91c0b7 100644 --- a/DiscImageChef.Server/Areas/Admin/Controllers/TestedMediasController.cs +++ b/DiscImageChef.Server/Areas/Admin/Controllers/TestedMediasController.cs @@ -1,10 +1,20 @@ using System.Linq; using System.Threading.Tasks; +using System.Web; using DiscImageChef.CommonTypes.Metadata; +using DiscImageChef.Decoders.ATA; +using DiscImageChef.Decoders.Bluray; +using DiscImageChef.Decoders.CD; +using DiscImageChef.Decoders.DVD; +using DiscImageChef.Decoders.SCSI; using DiscImageChef.Server.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; +using Cartridge = DiscImageChef.Decoders.Bluray.Cartridge; +using DDS = DiscImageChef.Decoders.Bluray.DDS; +using DMI = DiscImageChef.Decoders.Xbox.DMI; +using Spare = DiscImageChef.Decoders.Bluray.Spare; namespace DiscImageChef.Server.Areas.Admin.Controllers { @@ -125,5 +135,335 @@ namespace DiscImageChef.Server.Areas.Admin.Controllers } bool TestedMediaExists(int id) => _context.TestedMedia.Any(e => e.Id == id); + + /* public static string Zero(int n, int max) + { + var s = $"{n:X}"; + + while(s.Length < max) + s = '0' + s; + + return s; + }*/ + + public IActionResult ViewData(int id, string data) + { + if(string.IsNullOrWhiteSpace(data)) + return NotFound(); + + TestedMedia testedMedia = _context.TestedMedia.FirstOrDefault(m => m.Id == id); + + if(testedMedia == null) + { + return NotFound(); + } + + var model = new TestedMediaDataModel + { + TestedMediaId = id, DataName = data + }; + + byte[] buffer; + + switch(data) + { + case nameof(testedMedia.AdipData): + buffer = testedMedia.AdipData; + + break; + case nameof(testedMedia.AtipData): + buffer = testedMedia.AtipData; + model.Decoded = ATIP.Prettify(buffer); + + break; + case nameof(testedMedia.BluBcaData): + buffer = testedMedia.BluBcaData; + + break; + case nameof(testedMedia.BluDdsData): + buffer = testedMedia.BluDdsData; + model.Decoded = DDS.Prettify(buffer); + + break; + case nameof(testedMedia.BluDiData): + buffer = testedMedia.BluDiData; + model.Decoded = DI.Prettify(buffer); + + break; + case nameof(testedMedia.BluPacData): + buffer = testedMedia.BluPacData; + model.Decoded = Cartridge.Prettify(buffer); + + break; + case nameof(testedMedia.BluSaiData): + buffer = testedMedia.BluSaiData; + model.Decoded = Spare.Prettify(buffer); + + break; + case nameof(testedMedia.C2PointersData): + buffer = testedMedia.C2PointersData; + + break; + case nameof(testedMedia.CmiData): + buffer = testedMedia.CmiData; + model.Decoded = CSS_CPRM.PrettifyLeadInCopyright(buffer); + + break; + case nameof(testedMedia.CorrectedSubchannelData): + buffer = testedMedia.CorrectedSubchannelData; + + break; + case nameof(testedMedia.CorrectedSubchannelWithC2Data): + buffer = testedMedia.CorrectedSubchannelWithC2Data; + + break; + case nameof(testedMedia.DcbData): + buffer = testedMedia.DcbData; + + break; + case nameof(testedMedia.DmiData): + buffer = testedMedia.DmiData; + + if(DMI.IsXbox(buffer)) + model.Decoded = DMI.PrettifyXbox(buffer); + else if(DMI.IsXbox360(buffer)) + model.Decoded = DMI.PrettifyXbox360(buffer); + + break; + case nameof(testedMedia.DvdAacsData): + buffer = testedMedia.DvdAacsData; + + break; + case nameof(testedMedia.DvdBcaData): + buffer = testedMedia.DvdBcaData; + + break; + case nameof(testedMedia.DvdDdsData): + buffer = testedMedia.DvdDdsData; + model.Decoded = Decoders.DVD.DDS.Prettify(buffer); + + break; + case nameof(testedMedia.DvdLayerData): + buffer = testedMedia.DvdLayerData; + + break; + case nameof(testedMedia.DvdSaiData): + buffer = testedMedia.DvdSaiData; + model.Decoded = Decoders.DVD.Spare.Prettify(buffer); + + break; + case nameof(testedMedia.EmbossedPfiData): + buffer = testedMedia.EmbossedPfiData; + model.Decoded = PFI.Prettify(buffer); + + break; + case nameof(testedMedia.FullTocData): + buffer = testedMedia.FullTocData; + model.Decoded = FullTOC.Prettify(buffer); + + break; + case nameof(testedMedia.HdCmiData): + buffer = testedMedia.HdCmiData; + + break; + case nameof(testedMedia.HLDTSTReadRawDVDData): + buffer = testedMedia.HLDTSTReadRawDVDData; + + break; + case nameof(testedMedia.IdentifyData): + buffer = testedMedia.IdentifyData; + model.Decoded = Identify.Prettify(buffer); + + break; + case nameof(testedMedia.IntersessionLeadInData): + buffer = testedMedia.IntersessionLeadInData; + + break; + case nameof(testedMedia.IntersessionLeadOutData): + buffer = testedMedia.IntersessionLeadOutData; + + break; + case nameof(testedMedia.LeadInData): + buffer = testedMedia.LeadInData; + + break; + case nameof(testedMedia.LeadOutData): + buffer = testedMedia.LeadOutData; + + break; + case nameof(testedMedia.ModeSense6Data): + buffer = testedMedia.ModeSense6Data; + model.Decoded = Modes.PrettifyModeHeader6(buffer, PeripheralDeviceTypes.DirectAccess); + + break; + case nameof(testedMedia.ModeSense10Data): + buffer = testedMedia.ModeSense10Data; + model.Decoded = Modes.PrettifyModeHeader10(buffer, PeripheralDeviceTypes.DirectAccess); + + break; + case nameof(testedMedia.NecReadCddaData): + buffer = testedMedia.NecReadCddaData; + + break; + case nameof(testedMedia.PfiData): + buffer = testedMedia.PfiData; + model.Decoded = PFI.Prettify(buffer); + + break; + case nameof(testedMedia.PioneerReadCddaData): + buffer = testedMedia.PioneerReadCddaData; + + break; + case nameof(testedMedia.PioneerReadCddaMsfData): + buffer = testedMedia.PioneerReadCddaMsfData; + + break; + case nameof(testedMedia.PlextorReadCddaData): + buffer = testedMedia.PlextorReadCddaData; + + break; + case nameof(testedMedia.PlextorReadRawDVDData): + buffer = testedMedia.PlextorReadRawDVDData; + + break; + case nameof(testedMedia.PmaData): + buffer = testedMedia.PmaData; + model.Decoded = PMA.Prettify(buffer); + + break; + case nameof(testedMedia.PQSubchannelData): + buffer = testedMedia.PQSubchannelData; + + break; + case nameof(testedMedia.PQSubchannelWithC2Data): + buffer = testedMedia.PQSubchannelWithC2Data; + + break; + case nameof(testedMedia.PriData): + buffer = testedMedia.PriData; + + break; + case nameof(testedMedia.Read6Data): + buffer = testedMedia.Read6Data; + + break; + case nameof(testedMedia.Read10Data): + buffer = testedMedia.Read10Data; + + break; + case nameof(testedMedia.Read12Data): + buffer = testedMedia.Read12Data; + + break; + case nameof(testedMedia.Read16Data): + buffer = testedMedia.Read16Data; + + break; + case nameof(testedMedia.ReadCdData): + buffer = testedMedia.ReadCdData; + + break; + case nameof(testedMedia.ReadCdFullData): + buffer = testedMedia.ReadCdFullData; + + break; + case nameof(testedMedia.ReadCdMsfData): + buffer = testedMedia.ReadCdMsfData; + + break; + case nameof(testedMedia.ReadDmaData): + buffer = testedMedia.ReadDmaData; + + break; + case nameof(testedMedia.ReadDmaLba48Data): + buffer = testedMedia.ReadDmaLba48Data; + + break; + case nameof(testedMedia.ReadDmaLbaData): + buffer = testedMedia.ReadDmaLbaData; + + break; + case nameof(testedMedia.ReadDmaRetryData): + buffer = testedMedia.ReadDmaRetryData; + + break; + case nameof(testedMedia.ReadDmaRetryLbaData): + buffer = testedMedia.ReadDmaRetryLbaData; + + break; + case nameof(testedMedia.ReadLba48Data): + buffer = testedMedia.ReadLba48Data; + + break; + case nameof(testedMedia.ReadLbaData): + buffer = testedMedia.ReadLbaData; + + break; + case nameof(testedMedia.ReadLong10Data): + buffer = testedMedia.ReadLong10Data; + + break; + case nameof(testedMedia.ReadLong16Data): + buffer = testedMedia.ReadLong16Data; + + break; + case nameof(testedMedia.ReadLongData): + buffer = testedMedia.ReadLongData; + + break; + case nameof(testedMedia.ReadLongLbaData): + buffer = testedMedia.ReadLongLbaData; + + break; + case nameof(testedMedia.ReadLongRetryData): + buffer = testedMedia.ReadLongRetryData; + + break; + case nameof(testedMedia.ReadLongRetryLbaData): + buffer = testedMedia.ReadLongRetryLbaData; + + break; + case nameof(testedMedia.ReadRetryLbaData): + buffer = testedMedia.ReadRetryLbaData; + + break; + case nameof(testedMedia.ReadSectorsData): + buffer = testedMedia.ReadSectorsData; + + break; + case nameof(testedMedia.ReadSectorsRetryData): + buffer = testedMedia.ReadSectorsRetryData; + + break; + case nameof(testedMedia.RWSubchannelData): + buffer = testedMedia.RWSubchannelData; + + break; + case nameof(testedMedia.RWSubchannelWithC2Data): + buffer = testedMedia.RWSubchannelWithC2Data; + + break; + case nameof(testedMedia.TocData): + buffer = testedMedia.TocData; + model.Decoded = TOC.Prettify(buffer); + + break; + case nameof(testedMedia.Track1PregapData): + buffer = testedMedia.Track1PregapData; + + break; + default: return NotFound(); + } + + model.RawDataAsHex = PrintHex.ByteArrayToHexArrayString(buffer); + + if(model.RawDataAsHex != null) + model.RawDataAsHex = HttpUtility.HtmlEncode(model.RawDataAsHex).Replace("\n", "
"); + + if(model.Decoded != null) + model.Decoded = HttpUtility.HtmlEncode(model.Decoded).Replace("\n", "
"); + + return View(model); + } } } \ No newline at end of file diff --git a/DiscImageChef.Server/Areas/Admin/Views/TestedMedias/ViewData.cshtml b/DiscImageChef.Server/Areas/Admin/Views/TestedMedias/ViewData.cshtml new file mode 100644 index 00000000..99aa1a47 --- /dev/null +++ b/DiscImageChef.Server/Areas/Admin/Views/TestedMedias/ViewData.cshtml @@ -0,0 +1,29 @@ +@model TestedMediaDataModel + +@{ + ViewBag.Title = $"{Model.DataName} data"; + Layout = "_Layout"; +} +

Showing data from @Model.DataName for tested media id @Model.TestedMediaId

+@if (Model.Decoded is null && + Model.RawDataAsHex is null) +{ +
No data found
+} + +@if (Model.RawDataAsHex != null) +{ +

Hex dump:

+
+ @Html.Raw(Model.RawDataAsHex) +
+} + + +@if (Model.Decoded != null) +{ +

Decoded information:

+
+ @Html.Raw(Model.Decoded) +
+} \ No newline at end of file diff --git a/DiscImageChef.Server/Models/TestedMediaDataModel.cs b/DiscImageChef.Server/Models/TestedMediaDataModel.cs new file mode 100644 index 00000000..4375ec3e --- /dev/null +++ b/DiscImageChef.Server/Models/TestedMediaDataModel.cs @@ -0,0 +1,10 @@ +namespace DiscImageChef.Server.Models +{ + public class TestedMediaDataModel + { + public int TestedMediaId { get; set; } + public string DataName { get; set; } + public string RawDataAsHex { get; set; } + public string Decoded { get; set; } + } +} \ No newline at end of file