Add view data page for tested media with data display and decoding logic

This commit is contained in:
2025-09-12 19:01:05 +01:00
parent ba75c88351
commit 62d85ef221
3 changed files with 736 additions and 76 deletions

View File

@@ -9,11 +9,11 @@
@if(!_initialized) @if(!_initialized)
{ {
<div class="stats-section"> <div class="stats-section">
<h1 style="color: red; align-content: center; padding: 2rem">Loading...</h1> <h1 style="color: red; align-content: center; padding: 2rem">Loading...</h1>
</div> </div>
return; return;
} }
<section class="stats-section"> <section class="stats-section">
@@ -33,11 +33,11 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.IdentifyData != null) @if(_model?.IdentifyData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=IdentifyData">@_model.IdentifyData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/IdentifyData">@_model.IdentifyData.Length bytes</a>
} }
else else
{ {
@("<null>") @("<null>")
} }
</dd> </dd>
<dt class="col-sm-6"> <dt class="col-sm-6">
@@ -414,7 +414,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ModeSense6Data != null) @if(_model?.ModeSense6Data != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ModeSense6Data">@_model.ModeSense6Data.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ModeSense6Data">@_model.ModeSense6Data.Length bytes</a>
} }
else else
{ {
@@ -427,7 +427,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ModeSense10Data != null) @if(_model?.ModeSense10Data != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ModeSense10Data">@_model.ModeSense10Data.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ModeSense10Data">@_model.ModeSense10Data.Length bytes</a>
} }
else else
{ {
@@ -604,7 +604,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.IntersessionLeadInData != null) @if(_model?.IntersessionLeadInData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=IntersessionLeadInData">@_model.IntersessionLeadInData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/IntersessionLeadInData">@_model.IntersessionLeadInData.Length bytes</a>
} }
else else
{ {
@@ -617,7 +617,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.IntersessionLeadOutData != null) @if(_model?.IntersessionLeadOutData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=IntersessionLeadOutData">@_model.IntersessionLeadOutData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/IntersessionLeadOutData">@_model.IntersessionLeadOutData.Length bytes</a>
} }
else else
{ {
@@ -630,7 +630,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.Read6Data != null) @if(_model?.Read6Data != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=Read6Data">@_model.Read6Data.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/Read6Data">@_model.Read6Data.Length bytes</a>
} }
else else
{ {
@@ -643,7 +643,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.Read10Data != null) @if(_model?.Read10Data != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=Read10Data">@_model.Read10Data.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/Read10Data">@_model.Read10Data.Length bytes</a>
} }
else else
{ {
@@ -656,7 +656,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.Read12Data != null) @if(_model?.Read12Data != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=Read12Data">@_model.Read12Data.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/Read12Data">@_model.Read12Data.Length bytes</a>
} }
else else
{ {
@@ -669,7 +669,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.Read16Data != null) @if(_model?.Read16Data != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=Read16Data">@_model.Read16Data.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/Read16Data">@_model.Read16Data.Length bytes</a>
} }
else else
{ {
@@ -682,7 +682,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadLong10Data != null) @if(_model?.ReadLong10Data != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadLong10Data">@_model.ReadLong10Data.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadLong10Data">@_model.ReadLong10Data.Length bytes</a>
} }
else else
{ {
@@ -695,7 +695,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadLong16Data != null) @if(_model?.ReadLong16Data != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadLong16Data">@_model.ReadLong16Data.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadLong16Data">@_model.ReadLong16Data.Length bytes</a>
} }
else else
{ {
@@ -708,7 +708,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadSectorsData != null) @if(_model?.ReadSectorsData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadSectorsData">@_model.ReadSectorsData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadSectorsData">@_model.ReadSectorsData.Length bytes</a>
} }
else else
{ {
@@ -721,7 +721,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadSectorsRetryData != null) @if(_model?.ReadSectorsRetryData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadSectorsRetryData">@_model.ReadSectorsRetryData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadSectorsRetryData">@_model.ReadSectorsRetryData.Length bytes</a>
} }
else else
{ {
@@ -734,7 +734,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadDmaData != null) @if(_model?.ReadDmaData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadDmaData">@_model.ReadDmaData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadDmaData">@_model.ReadDmaData.Length bytes</a>
} }
else else
{ {
@@ -747,7 +747,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadDmaRetryData != null) @if(_model?.ReadDmaRetryData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadDmaRetryData">@_model.ReadDmaRetryData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadDmaRetryData">@_model.ReadDmaRetryData.Length bytes</a>
} }
else else
{ {
@@ -760,7 +760,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadLbaData != null) @if(_model?.ReadLbaData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadLbaData">@_model.ReadLbaData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadLbaData">@_model.ReadLbaData.Length bytes</a>
} }
else else
{ {
@@ -773,7 +773,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadRetryLbaData != null) @if(_model?.ReadRetryLbaData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadRetryLbaData">@_model.ReadRetryLbaData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadRetryLbaData">@_model.ReadRetryLbaData.Length bytes</a>
} }
else else
{ {
@@ -786,7 +786,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadDmaLbaData != null) @if(_model?.ReadDmaLbaData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadDmaLbaData">@_model.ReadDmaLbaData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadDmaLbaData">@_model.ReadDmaLbaData.Length bytes</a>
} }
else else
{ {
@@ -799,7 +799,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadDmaRetryLbaData != null) @if(_model?.ReadDmaRetryLbaData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadDmaRetryLbaData">@_model.ReadDmaRetryLbaData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadDmaRetryLbaData">@_model.ReadDmaRetryLbaData.Length bytes</a>
} }
else else
{ {
@@ -812,7 +812,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadLba48Data != null) @if(_model?.ReadLba48Data != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadLba48Data">@_model.ReadLba48Data.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadLba48Data">@_model.ReadLba48Data.Length bytes</a>
} }
else else
{ {
@@ -825,7 +825,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadDmaLba48Data != null) @if(_model?.ReadDmaLba48Data != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadDmaLba48Data">@_model.ReadDmaLba48Data.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadDmaLba48Data">@_model.ReadDmaLba48Data.Length bytes</a>
} }
else else
{ {
@@ -838,7 +838,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadLongData != null) @if(_model?.ReadLongData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadLongData">@_model.ReadLongData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadLongData">@_model.ReadLongData.Length bytes</a>
} }
else else
{ {
@@ -851,7 +851,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadLongRetryData != null) @if(_model?.ReadLongRetryData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadLongRetryData">@_model.ReadLongRetryData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadLongRetryData">@_model.ReadLongRetryData.Length bytes</a>
} }
else else
{ {
@@ -864,7 +864,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadLongLbaData != null) @if(_model?.ReadLongLbaData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadLongLbaData">@_model.ReadLongLbaData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadLongLbaData">@_model.ReadLongLbaData.Length bytes</a>
} }
else else
{ {
@@ -877,7 +877,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadLongRetryLbaData != null) @if(_model?.ReadLongRetryLbaData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadLongRetryLbaData">@_model.ReadLongRetryLbaData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadLongRetryLbaData">@_model.ReadLongRetryLbaData.Length bytes</a>
} }
else else
{ {
@@ -890,7 +890,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.TocData != null) @if(_model?.TocData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=TocData">@_model.TocData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/TocData">@_model.TocData.Length bytes</a>
} }
else else
{ {
@@ -903,7 +903,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.FullTocData != null) @if(_model?.FullTocData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=FullTocData">@_model.FullTocData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/FullTocData">@_model.FullTocData.Length bytes</a>
} }
else else
{ {
@@ -916,7 +916,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.AtipData != null) @if(_model?.AtipData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=AtipData">@_model.AtipData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/AtipData">@_model.AtipData.Length bytes</a>
} }
else else
{ {
@@ -929,7 +929,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.PmaData != null) @if(_model?.PmaData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=PmaData">@_model.PmaData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/PmaData">@_model.PmaData.Length bytes</a>
} }
else else
{ {
@@ -942,7 +942,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadCdData != null) @if(_model?.ReadCdData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadCdData">@_model.ReadCdData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadCdData">@_model.ReadCdData.Length bytes</a>
} }
else else
{ {
@@ -955,7 +955,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadCdMsfData != null) @if(_model?.ReadCdMsfData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadCdMsfData">@_model.ReadCdMsfData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadCdMsfData">@_model.ReadCdMsfData.Length bytes</a>
} }
else else
{ {
@@ -968,7 +968,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadCdFullData != null) @if(_model?.ReadCdFullData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadCdFullData">@_model.ReadCdFullData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadCdFullData">@_model.ReadCdFullData.Length bytes</a>
} }
else else
{ {
@@ -981,7 +981,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadCdMsfFullData != null) @if(_model?.ReadCdMsfFullData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadCdMsfFullData">@_model.ReadCdMsfFullData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadCdMsfFullData">@_model.ReadCdMsfFullData.Length bytes</a>
} }
else else
{ {
@@ -994,7 +994,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.Track1PregapData != null) @if(_model?.Track1PregapData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=Track1PregapData">@_model.Track1PregapData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/Track1PregapData">@_model.Track1PregapData.Length bytes</a>
} }
else else
{ {
@@ -1007,7 +1007,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.LeadInData != null) @if(_model?.LeadInData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=LeadInData">@_model.LeadInData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/LeadInData">@_model.LeadInData.Length bytes</a>
} }
else else
{ {
@@ -1020,7 +1020,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.LeadOutData != null) @if(_model?.LeadOutData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=LeadOutData">@_model.LeadOutData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/LeadOutData">@_model.LeadOutData.Length bytes</a>
} }
else else
{ {
@@ -1033,7 +1033,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.C2PointersData != null) @if(_model?.C2PointersData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=C2PointersData">@_model.C2PointersData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/C2PointersData">@_model.C2PointersData.Length bytes</a>
} }
else else
{ {
@@ -1046,7 +1046,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.PQSubchannelData != null) @if(_model?.PQSubchannelData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=PQSubchannelData">@_model.PQSubchannelData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/PQSubchannelData">@_model.PQSubchannelData.Length bytes</a>
} }
else else
{ {
@@ -1059,7 +1059,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.RWSubchannelData != null) @if(_model?.RWSubchannelData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=RWSubchannelData">@_model.RWSubchannelData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/RWSubchannelData">@_model.RWSubchannelData.Length bytes</a>
} }
else else
{ {
@@ -1072,7 +1072,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.CorrectedSubchannelData != null) @if(_model?.CorrectedSubchannelData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=CorrectedSubchannelData">@_model.CorrectedSubchannelData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/CorrectedSubchannelData">@_model.CorrectedSubchannelData.Length bytes</a>
} }
else else
{ {
@@ -1085,7 +1085,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.PQSubchannelWithC2Data != null) @if(_model?.PQSubchannelWithC2Data != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=PQSubchannelWithC2Data">@_model.PQSubchannelWithC2Data.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/PQSubchannelWithC2Data">@_model.PQSubchannelWithC2Data.Length bytes</a>
} }
else else
{ {
@@ -1098,7 +1098,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.RWSubchannelWithC2Data != null) @if(_model?.RWSubchannelWithC2Data != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=RWSubchannelWithC2Data">@_model.RWSubchannelWithC2Data.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/RWSubchannelWithC2Data">@_model.RWSubchannelWithC2Data.Length bytes</a>
} }
else else
{ {
@@ -1111,7 +1111,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.CorrectedSubchannelWithC2Data != null) @if(_model?.CorrectedSubchannelWithC2Data != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=CorrectedSubchannelWithC2Data">@_model.CorrectedSubchannelWithC2Data.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/CorrectedSubchannelWithC2Data">@_model.CorrectedSubchannelWithC2Data.Length bytes</a>
} }
else else
{ {
@@ -1124,7 +1124,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.PfiData != null) @if(_model?.PfiData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=PfiData">@_model.PfiData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/PfiData">@_model.PfiData.Length bytes</a>
} }
else else
{ {
@@ -1137,7 +1137,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.DmiData != null) @if(_model?.DmiData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=DmiData">@_model.DmiData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/DmiData">@_model.DmiData.Length bytes</a>
} }
else else
{ {
@@ -1150,7 +1150,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.CmiData != null) @if(_model?.CmiData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=CmiData">@_model.CmiData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/CmiData">@_model.CmiData.Length bytes</a>
} }
else else
{ {
@@ -1163,7 +1163,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.DvdBcaData != null) @if(_model?.DvdBcaData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=DvdBcaData">@_model.DvdBcaData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/DvdBcaData">@_model.DvdBcaData.Length bytes</a>
} }
else else
{ {
@@ -1176,7 +1176,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.DvdAacsData != null) @if(_model?.DvdAacsData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=DvdAacsData">@_model.DvdAacsData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/DvdAacsData">@_model.DvdAacsData.Length bytes</a>
} }
else else
{ {
@@ -1189,7 +1189,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.DvdDdsData != null) @if(_model?.DvdDdsData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=DvdDdsData">@_model.DvdDdsData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/DvdDdsData">@_model.DvdDdsData.Length bytes</a>
} }
else else
{ {
@@ -1202,7 +1202,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.DvdSaiData != null) @if(_model?.DvdSaiData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=DvdSaiData">@_model.DvdSaiData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/DvdSaiData">@_model.DvdSaiData.Length bytes</a>
} }
else else
{ {
@@ -1215,7 +1215,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.PriData != null) @if(_model?.PriData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=PriData">@_model.PriData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/PriData">@_model.PriData.Length bytes</a>
} }
else else
{ {
@@ -1228,7 +1228,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.EmbossedPfiData != null) @if(_model?.EmbossedPfiData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=EmbossedPfiData">@_model.EmbossedPfiData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/EmbossedPfiData">@_model.EmbossedPfiData.Length bytes</a>
} }
else else
{ {
@@ -1241,7 +1241,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.AdipData != null) @if(_model?.AdipData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=AdipData">@_model.AdipData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/AdipData">@_model.AdipData.Length bytes</a>
} }
else else
{ {
@@ -1254,7 +1254,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.DcbData != null) @if(_model?.DcbData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=DcbData">@_model.DcbData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/DcbData">@_model.DcbData.Length bytes</a>
} }
else else
{ {
@@ -1267,7 +1267,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.HdCmiData != null) @if(_model?.HdCmiData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=HdCmiData">@_model.HdCmiData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/HdCmiData">@_model.HdCmiData.Length bytes</a>
} }
else else
{ {
@@ -1280,7 +1280,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.DvdLayerData != null) @if(_model?.DvdLayerData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=DvdLayerData">@_model.DvdLayerData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/DvdLayerData">@_model.DvdLayerData.Length bytes</a>
} }
else else
{ {
@@ -1293,7 +1293,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.BluBcaData != null) @if(_model?.BluBcaData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=BluBcaData">@_model.BluBcaData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/BluBcaData">@_model.BluBcaData.Length bytes</a>
} }
else else
{ {
@@ -1306,7 +1306,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.BluDdsData != null) @if(_model?.BluDdsData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=BluDdsData">@_model.BluDdsData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/BluDdsData">@_model.BluDdsData.Length bytes</a>
} }
else else
{ {
@@ -1319,7 +1319,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.BluSaiData != null) @if(_model?.BluSaiData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=BluSaiData">@_model.BluSaiData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/BluSaiData">@_model.BluSaiData.Length bytes</a>
} }
else else
{ {
@@ -1332,7 +1332,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.BluDiData != null) @if(_model?.BluDiData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=BluDiData">@_model.BluDiData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/BluDiData">@_model.BluDiData.Length bytes</a>
} }
else else
{ {
@@ -1345,7 +1345,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.PlextorReadCddaData != null) @if(_model?.PlextorReadCddaData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=PlextorReadCddaData">@_model.PlextorReadCddaData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/PlextorReadCddaData">@_model.PlextorReadCddaData.Length bytes</a>
} }
else else
{ {
@@ -1358,7 +1358,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.PlextorReadCddaData != null) @if(_model?.PlextorReadCddaData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=PlextorReadCddaData">@_model.PlextorReadCddaData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/PlextorReadCddaData">@_model.PlextorReadCddaData.Length bytes</a>
} }
else else
{ {
@@ -1371,7 +1371,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.PioneerReadCddaData != null) @if(_model?.PioneerReadCddaData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=PioneerReadCddaData">@_model.PioneerReadCddaData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/PioneerReadCddaData">@_model.PioneerReadCddaData.Length bytes</a>
} }
else else
{ {
@@ -1384,7 +1384,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.PioneerReadCddaMsfData != null) @if(_model?.PioneerReadCddaMsfData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=PioneerReadCddaMsfData">@_model.PioneerReadCddaMsfData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/PioneerReadCddaMsfData">@_model.PioneerReadCddaMsfData.Length bytes</a>
} }
else else
{ {
@@ -1397,7 +1397,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.NecReadCddaData != null) @if(_model?.NecReadCddaData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=NecReadCddaData">@_model.NecReadCddaData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/NecReadCddaData">@_model.NecReadCddaData.Length bytes</a>
} }
else else
{ {
@@ -1410,7 +1410,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.PlextorReadRawDVDData != null) @if(_model?.PlextorReadRawDVDData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=PlextorReadRawDVDData">@_model.PlextorReadRawDVDData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/PlextorReadRawDVDData">@_model.PlextorReadRawDVDData.Length bytes</a>
} }
else else
{ {
@@ -1423,7 +1423,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.HLDTSTReadRawDVDData != null) @if(_model?.HLDTSTReadRawDVDData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=HLDTSTReadRawDVDData">@_model.HLDTSTReadRawDVDData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/HLDTSTReadRawDVDData">@_model.HLDTSTReadRawDVDData.Length bytes</a>
} }
else else
{ {
@@ -1442,7 +1442,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadCdScrambledData != null) @if(_model?.ReadCdScrambledData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadCdScrambledData">@_model.ReadCdScrambledData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadCdScrambledData">@_model.ReadCdScrambledData.Length bytes</a>
} }
else else
{ {
@@ -1461,7 +1461,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadF1_06Data != null) @if(_model?.ReadF1_06Data != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadF1_06Data">@_model.ReadF1_06Data.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadF1_06Data">@_model.ReadF1_06Data.Length bytes</a>
} }
else else
{ {
@@ -1480,7 +1480,7 @@
<dd class="col-sm-6"> <dd class="col-sm-6">
@if(_model?.ReadF1_06LeadOutData != null) @if(_model?.ReadF1_06LeadOutData != null)
{ {
<a href="/admin/tested-media/data/@_model.Id?data=ReadF1_06LeadOutData">@_model.ReadF1_06LeadOutData.Length bytes</a> <a href="/admin/tested-media/data/@_model.Id/ReadF1_06LeadOutData">@_model.ReadF1_06LeadOutData.Length bytes</a>
} }
else else
{ {
@@ -1490,6 +1490,6 @@
</dl> </dl>
</div> </div>
<div> <div>
<a href="/admin/usb/devices" class="btn btn-secondary">Back to List</a> <a href="/admin/tested-media" class="btn btn-secondary">Back to List</a>
</div> </div>
</section> </section>

View File

@@ -0,0 +1,40 @@
@page "/admin/tested-media/data/{Id:int}/{data}"
@attribute [Authorize]
@layout AdminLayout
@rendermode InteractiveServer
@inject Microsoft.EntityFrameworkCore.IDbContextFactory<DbContext> DbContextFactory
<PageTitle>View data</PageTitle>
@if(!_initialized)
{
<div class="stats-section">
<h1 style="color: red; align-content: center; padding: 2rem">Loading...</h1>
</div>
return;
}
@if(_notFound)
{
<div class="stats-section">
<h1 style="color: red; align-content: center; padding: 2rem">Data not found</h1>
</div>
return;
}
<div class="stats-section">
<h2>Showing data from @_model.DataName for tested media id @_model.TestedMediaId</h2>
<h4>Hex dump:</h4>
<div>
<code style="white-space: pre">@(new MarkupString(_model.RawDataAsHex))</code>
</div>
<h4>Decoded information:</h4>
<div>
@(new MarkupString(_model.Decoded))
</div>
</div>

View File

@@ -0,0 +1,620 @@
using System.Web;
using Aaru.CommonTypes;
using Aaru.CommonTypes.Structs.Devices.SCSI;
using Aaru.Decoders.ATA;
using Aaru.Decoders.Bluray;
using Aaru.Decoders.CD;
using Aaru.Decoders.DVD;
using Aaru.Decoders.SCSI;
using Aaru.Helpers;
using Aaru.Server.Database;
using Aaru.Server.Database.Models;
using Microsoft.AspNetCore.Components;
using Cartridge = Aaru.Decoders.Bluray.Cartridge;
using DDS = Aaru.Decoders.Bluray.DDS;
using DMI = Aaru.Decoders.Xbox.DMI;
using Sector = Aaru.Decoders.CD.Sector;
using Spare = Aaru.Decoders.Bluray.Spare;
namespace Aaru.Server.Components.Admin.Pages.TestedMedia;
public partial class ViewData
{
bool _initialized;
TestedMediaDataModel _model;
bool _notFound;
[Parameter]
public string Data { get; set; } = string.Empty;
[Parameter]
public int Id { get; set; }
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
_initialized = true;
await using DbContext ctx = await DbContextFactory.CreateDbContextAsync();
if(string.IsNullOrWhiteSpace(Data))
{
_notFound = true;
return;
}
CommonTypes.Metadata.TestedMedia? testedMedia = ctx.TestedMedia.FirstOrDefault(m => m.Id == Id);
if(testedMedia == null)
{
_notFound = true;
return;
}
_model = new TestedMediaDataModel
{
TestedMediaId = Id,
DataName = Data
};
byte[] buffer;
byte[] sector = new byte[2352];
byte[] subq = new byte[16];
byte[]? fullsub = new byte[96];
bool c2Errors = false;
bool scrambled = false;
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;
if(buffer is null || buffer.Length < 2352 || buffer.All(static c => c == 0)) break;
Array.Copy(buffer, 0, sector, 0, 2352);
_model.Decoded = Sector.Prettify(sector);
for(int i = 2352; i < buffer.Length; i++)
{
if(buffer[i] == 0x00) continue;
c2Errors = true;
break;
}
_model.Decoded += "\n" + (c2Errors ? "C2 errors found." : "No C2 errors.");
break;
case nameof(testedMedia.CmiData):
buffer = testedMedia.CmiData;
_model.Decoded = CSS_CPRM.PrettifyLeadInCopyright(buffer);
break;
case nameof(testedMedia.CorrectedSubchannelData):
buffer = testedMedia.CorrectedSubchannelData;
if(buffer is null || buffer.Length < 2352 || buffer.All(static c => c == 0)) break;
Array.Copy(buffer, 0, sector, 0, 2352);
_model.Decoded = Sector.Prettify(sector);
if(buffer.Length < 2448) break;
Array.Copy(buffer, 2352, fullsub, 0, 96);
_model.Decoded += "\n" + GetPrettySub(fullsub);
break;
case nameof(testedMedia.CorrectedSubchannelWithC2Data):
buffer = testedMedia.CorrectedSubchannelWithC2Data;
if(buffer is null || buffer.Length < 2352 || buffer.All(static c => c == 0)) break;
Array.Copy(buffer, 0, sector, 0, 2352);
_model.Decoded = Sector.Prettify(sector);
if(buffer.Length < 2448) break;
for(int i = 2352; i < 2616; i++)
{
if(buffer[i] == 0x00) continue;
c2Errors = true;
break;
}
_model.Decoded += "\n" + (c2Errors ? "C2 errors found." : "No C2 errors.");
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, MediaType.DVDROM); // TODO: Get real media type here
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.LiteOnReadRawDVDData):
buffer = testedMedia.LiteOnReadRawDVDData;
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;
_model.Decoded = Sector.Prettify(buffer);
break;
case nameof(testedMedia.LeadOutData):
buffer = testedMedia.LeadOutData;
_model.Decoded = Sector.Prettify(buffer);
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, MediaType.DVDROM); // TODO: Get real media type here
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;
if(buffer is null || buffer.Length < 2352 || buffer.All(static c => c == 0)) break;
Array.Copy(buffer, 0, sector, 0, 2352);
_model.Decoded = Sector.Prettify(sector);
if(buffer.Length < 2368) break;
Array.Copy(buffer, 2352, subq, 0, 16);
fullsub = Subchannel.ConvertQToRaw(subq);
_model.Decoded += "\n" + GetPrettySub(fullsub);
break;
case nameof(testedMedia.PQSubchannelWithC2Data):
buffer = testedMedia.PQSubchannelWithC2Data;
if(buffer is null || buffer.Length < 2352 || buffer.All(static c => c == 0)) break;
Array.Copy(buffer, 0, sector, 0, 2352);
_model.Decoded = Sector.Prettify(sector);
if(buffer.Length < 2368) break;
Array.Copy(buffer, 2646, subq, 0, 16);
fullsub = Subchannel.ConvertQToRaw(subq);
_model.Decoded += "\n" + GetPrettySub(fullsub);
for(int i = 2352; i < 2646; i++)
{
if(buffer[i] == 0x00) continue;
c2Errors = true;
break;
}
_model.Decoded += "\n" + (c2Errors ? "C2 errors found." : "No C2 errors.");
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;
_model.Decoded = Sector.Prettify(buffer);
break;
case nameof(testedMedia.ReadCdMsfData):
buffer = testedMedia.ReadCdMsfData;
break;
case nameof(testedMedia.ReadCdMsfFullData):
buffer = testedMedia.ReadCdMsfFullData;
_model.Decoded = Sector.Prettify(buffer);
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;
if(buffer is null || buffer.Length < 2352 || buffer.All(static c => c == 0)) break;
Array.Copy(buffer, 0, sector, 0, 2352);
_model.Decoded = Sector.Prettify(sector);
if(buffer.Length < 2448) break;
Array.Copy(buffer, 2352, fullsub, 0, 96);
_model.Decoded += "\n" + GetPrettySub(fullsub);
break;
case nameof(testedMedia.RWSubchannelWithC2Data):
buffer = testedMedia.RWSubchannelWithC2Data;
if(buffer is null || buffer.Length < 2352 || buffer.All(static c => c == 0)) break;
Array.Copy(buffer, 0, sector, 0, 2352);
_model.Decoded = Sector.Prettify(sector);
if(buffer.Length < 2448) break;
Array.Copy(buffer, 2352, fullsub, 0, 96);
_model.Decoded += "\n" + GetPrettySub(fullsub);
for(int i = 2448; i < buffer.Length; i++)
{
if(buffer[i] == 0x00) continue;
c2Errors = true;
break;
}
_model.Decoded += "\n" + (c2Errors ? "C2 errors found." : "No C2 errors.");
break;
case nameof(testedMedia.TocData):
buffer = testedMedia.TocData;
_model.Decoded = TOC.Prettify(buffer);
break;
case nameof(testedMedia.Track1PregapData):
buffer = testedMedia.Track1PregapData;
_model.Decoded = Sector.Prettify(buffer);
break;
case nameof(testedMedia.ReadCdScrambledData):
buffer = testedMedia.ReadCdScrambledData;
break;
case nameof(testedMedia.ReadF1_06Data):
buffer = testedMedia.ReadF1_06Data;
if(buffer.Length != 0xB00)
{
_model.Decoded = Sense.PrettifySense(buffer);
break;
}
Array.Copy(buffer, 0, sector, 0, 2352);
if((sector[0xD] & 0x80) == 0x80)
{
scrambled = true;
Sector.Scramble(sector);
}
_model.Decoded = Sector.Prettify(sector) + "\n" + (scrambled ? "Scrambled." : "Descrambled.");
Array.Copy(buffer, 2352, fullsub, 0, 96);
_model.Decoded += "\n" + GetPrettySub(fullsub);
Array.Copy(buffer, 2448, subq, 0, 16);
fullsub = Subchannel.ConvertQToRaw(subq);
_model.Decoded += "\n" + GetPrettySub(fullsub);
for(int i = 2468; i < 2762; i++)
{
if(buffer[i] == 0x00) continue;
c2Errors = true;
break;
}
_model.Decoded += "\n" + (c2Errors ? "C2 errors found." : "No C2 errors.");
break;
case nameof(testedMedia.ReadF1_06LeadOutData):
buffer = testedMedia.ReadF1_06LeadOutData;
if(buffer.Length != 0xB00)
{
_model.Decoded = Sense.PrettifySense(buffer);
break;
}
Array.Copy(buffer, 0, sector, 0, 2352);
if((sector[0xD] & 0x80) == 0x80)
{
scrambled = true;
Sector.Scramble(sector);
}
_model.Decoded = Sector.Prettify(sector) + "\n" + (scrambled ? "Scrambled." : "Descrambled.");
Array.Copy(buffer, 2352, fullsub, 0, 96);
_model.Decoded += "\n" + GetPrettySub(fullsub);
Array.Copy(buffer, 2448, subq, 0, 16);
fullsub = Subchannel.ConvertQToRaw(subq);
_model.Decoded += "\n" + GetPrettySub(fullsub);
for(int i = 2468; i < 2762; i++)
{
if(buffer[i] == 0x00) continue;
c2Errors = true;
break;
}
_model.Decoded += "\n" + (c2Errors ? "C2 errors found." : "No C2 errors.");
break;
default:
_notFound = true;
return;
}
_model.RawDataAsHex = PrintHex.ByteArrayToHexArrayString(buffer);
if(_model.RawDataAsHex != null)
_model.RawDataAsHex = HttpUtility.HtmlEncode(_model.RawDataAsHex).Replace("\n", "<br/>");
if(_model.Decoded != null) _model.Decoded = HttpUtility.HtmlEncode(_model.Decoded).Replace("\n", "<br/>");
StateHasChanged();
}
static string GetPrettySub(byte[] sub)
{
byte[] deint = Subchannel.Deinterleave(sub);
bool validP = true;
bool validRw = true;
for(int i = 0; i < 12; i++)
{
if(deint[i] == 0x00 || deint[i] == 0xFF) continue;
validP = false;
break;
}
for(int i = 24; i < 96; i++)
{
if(deint[i] == 0x00) continue;
validRw = false;
break;
}
byte[] q = new byte[12];
Array.Copy(deint, 12, q, 0, 12);
return Subchannel.PrettifyQ(q, deint[21] > 0x10, 16, !validP, false, validRw);
}
}