General code refactor.

This commit is contained in:
2021-12-08 18:26:24 +00:00
parent 1aa8a3af4b
commit ab914dc47c
53 changed files with 1737 additions and 1589 deletions

View File

@@ -174,8 +174,8 @@ internal class Program
vendor = new UsbVendor(number, name); vendor = new UsbVendor(number, name);
ctx.UsbVendors.Add(vendor); ctx.UsbVendors.Add(vendor);
System.Console.WriteLine("{0}: Will add vendor {1} with ID {2:X4}", DateTime.UtcNow, System.Console.WriteLine("{0}: Will add vendor {1} with ID {2:X4}", DateTime.UtcNow, vendor.Vendor,
vendor.Vendor, vendor.VendorId); vendor.VendorId);
newVendors++; newVendors++;
counter++; counter++;
@@ -221,8 +221,7 @@ internal class Program
System.Console.WriteLine("{0}: Looking up a product", DateTime.UtcNow); System.Console.WriteLine("{0}: Looking up a product", DateTime.UtcNow);
start = DateTime.UtcNow; start = DateTime.UtcNow;
UsbProduct prd = UsbProduct prd = ctx.UsbProducts.FirstOrDefault(p => p.ProductId == 0x0001 && p.Vendor.VendorId == 0x8086);
ctx.UsbProducts.FirstOrDefault(p => p.ProductId == 0x0001 && p.Vendor.VendorId == 0x8086);
if(prd is null) if(prd is null)
System.Console.WriteLine("{0}: Error, could not find product.", DateTime.UtcNow); System.Console.WriteLine("{0}: Error, could not find product.", DateTime.UtcNow);
@@ -258,8 +257,7 @@ internal class Program
try try
{ {
System.Console.WriteLine("{0}: Retrieving CompactDisc read offsets from AccurateRip...", System.Console.WriteLine("{0}: Retrieving CompactDisc read offsets from AccurateRip...", DateTime.UtcNow);
DateTime.UtcNow);
start = DateTime.UtcNow; start = DateTime.UtcNow;
@@ -290,8 +288,7 @@ internal class Program
if(columns.Length != 4) if(columns.Length != 4)
{ {
System.Console.WriteLine("{0}: Row does not have correct number of columns...", System.Console.WriteLine("{0}: Row does not have correct number of columns...", DateTime.UtcNow);
DateTime.UtcNow);
continue; continue;
} }

View File

@@ -67,8 +67,7 @@ public sealed class AtasController : Controller
public IActionResult Consolidate() public IActionResult Consolidate()
{ {
List<IdHashModel> hashes = _context.Ata.Select(m => new IdHashModel(m.Id, Hash.Sha512(m.Identify))). List<IdHashModel> hashes = _context.Ata.Select(m => new IdHashModel(m.Id, Hash.Sha512(m.Identify))).ToList();
ToList();
List<IdHashModel> dups = hashes.GroupBy(x => x.Hash).Where(g => g.Count() > 1). List<IdHashModel> dups = hashes.GroupBy(x => x.Hash).Where(g => g.Count() > 1).
Select(x => hashes.FirstOrDefault(y => y.Hash == x.Key)).ToList(); Select(x => hashes.FirstOrDefault(y => y.Hash == x.Key)).ToList();

View File

@@ -11,9 +11,8 @@ public sealed class ChsController : Controller
public ChsController(AaruServerContext context) => _context = context; public ChsController(AaruServerContext context) => _context = context;
// GET: Admin/Chs // GET: Admin/Chs
public async Task<IActionResult> Index() => View(await _context.Chs.OrderBy(c => c.Cylinders). public async Task<IActionResult> Index() => View(await _context.Chs.OrderBy(c => c.Cylinders).ThenBy(c => c.Heads).
ThenBy(c => c.Heads).ThenBy(c => c.Sectors). ThenBy(c => c.Sectors).ToListAsync());
ToListAsync());
public IActionResult Consolidate() public IActionResult Consolidate()
{ {
@@ -56,15 +55,14 @@ public sealed class ChsController : Controller
foreach(ChsModel duplicate in duplicates) foreach(ChsModel duplicate in duplicates)
{ {
Chs master = _context.Chs.FirstOrDefault(m => m.Cylinders == duplicate.Cylinders && Chs master = _context.Chs.FirstOrDefault(m => m.Cylinders == duplicate.Cylinders &&
m.Heads == duplicate.Heads && m.Heads == duplicate.Heads && m.Sectors == duplicate.Sectors);
m.Sectors == duplicate.Sectors);
if(master is null) if(master is null)
continue; continue;
foreach(Chs chs in _context.Chs.Where(m => m.Cylinders == duplicate.Cylinders && foreach(Chs chs in _context.Chs.Where(m => m.Cylinders == duplicate.Cylinders &&
m.Heads == duplicate.Heads && m.Heads == duplicate.Heads && m.Sectors == duplicate.Sectors).
m.Sectors == duplicate.Sectors).Skip(1).ToArray()) Skip(1).ToArray())
{ {
foreach(TestedMedia media in _context.TestedMedia.Where(d => d.CHS.Id == chs.Id)) foreach(TestedMedia media in _context.TestedMedia.Where(d => d.CHS.Id == chs.Id))
{ {

View File

@@ -34,8 +34,8 @@ public sealed class CompactDiscOffsetsController : Controller
// To protect from overposting attacks, please enable the specific properties you want to bind to, for // To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598. // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost, ValidateAntiForgeryToken] [HttpPost, ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("Id,Manufacturer,Model,Offset,Submissions,Agreement")] public async Task<IActionResult> Edit(
CompactDiscOffset changedModel) int id, [Bind("Id,Manufacturer,Model,Offset,Submissions,Agreement")] CompactDiscOffset changedModel)
{ {
if(id != changedModel.Id) if(id != changedModel.Id)
return NotFound(); return NotFound();

View File

@@ -34,8 +34,7 @@ public sealed class DeviceStatsController : Controller
// To protect from overposting attacks, please enable the specific properties you want to bind to, for // To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598. // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost, ValidateAntiForgeryToken] [HttpPost, ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("Id,Manufacturer,Model,Revision,Bus")] public async Task<IActionResult> Edit(int id, [Bind("Id,Manufacturer,Model,Revision,Bus")] DeviceStat changedModel)
DeviceStat changedModel)
{ {
if(id != changedModel.Id) if(id != changedModel.Id)
return NotFound(); return NotFound();

View File

@@ -76,8 +76,8 @@ public sealed class DevicesController : Controller
model.TestedMedias = _context.TestedMedia. model.TestedMedias = _context.TestedMedia.
Where(t => t.AtaId == ataId || t.AtaId == atapiId || t.ScsiId == scsiId || Where(t => t.AtaId == ataId || t.AtaId == atapiId || t.ScsiId == scsiId ||
t.MmcId == mmcId).OrderBy(t => t.Manufacturer). t.MmcId == mmcId).OrderBy(t => t.Manufacturer).ThenBy(t => t.Model).
ThenBy(t => t.Model).ThenBy(t => t.MediumTypeName).ToList(); ThenBy(t => t.MediumTypeName).ToList();
model.TestedSequentialMedias = _context.TestedSequentialMedia.Where(t => t.SscId == sscId). model.TestedSequentialMedias = _context.TestedSequentialMedia.Where(t => t.SscId == sscId).
OrderBy(t => t.Manufacturer).ThenBy(t => t.Model). OrderBy(t => t.Manufacturer).ThenBy(t => t.Model).
@@ -109,8 +109,8 @@ public sealed class DevicesController : Controller
// more details see http://go.microsoft.com/fwlink/?LinkId=317598. // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost, ValidateAntiForgeryToken] [HttpPost, ValidateAntiForgeryToken]
public async Task<IActionResult> Edit( public async Task<IActionResult> Edit(
int id, [Bind("OptimalMultipleSectorsRead,Id,CompactFlash,Manufacturer,Model,Revision,Type")] int id,
Device changedModel) [Bind("OptimalMultipleSectorsRead,Id,CompactFlash,Manufacturer,Model,Revision,Type")] Device changedModel)
{ {
if(id != changedModel.Id) if(id != changedModel.Id)
return NotFound(); return NotFound();
@@ -328,8 +328,8 @@ public sealed class DevicesController : Controller
else if(device.SCSI?.MultiMediaDevice != null && else if(device.SCSI?.MultiMediaDevice != null &&
report.SCSI?.MultiMediaDevice != null) report.SCSI?.MultiMediaDevice != null)
{ {
foreach(TestedMedia testedMedia in foreach(TestedMedia testedMedia in _context.TestedMedia.Where(d => d.MmcId == report.SCSI.
_context.TestedMedia.Where(d => d.MmcId == report.SCSI.MultiMediaDevice.Id)) MultiMediaDevice.Id))
{ {
testedMedia.MmcId = device.SCSI.MultiMediaDevice.Id; testedMedia.MmcId = device.SCSI.MultiMediaDevice.Id;
_context.Update(testedMedia); _context.Update(testedMedia);

View File

@@ -37,8 +37,7 @@ public sealed class FireWiresController : Controller
// more details see http://go.microsoft.com/fwlink/?LinkId=317598. // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost, ValidateAntiForgeryToken] [HttpPost, ValidateAntiForgeryToken]
public async Task<IActionResult> Edit( public async Task<IActionResult> Edit(
int id, [Bind("Id,VendorID,ProductID,Manufacturer,Product,RemovableMedia")] int id, [Bind("Id,VendorID,ProductID,Manufacturer,Product,RemovableMedia")] FireWire changedModel)
FireWire changedModel)
{ {
if(id != changedModel.Id) if(id != changedModel.Id)
return NotFound(); return NotFound();

View File

@@ -21,8 +21,7 @@ public sealed class GdRomSwapDiscCapabilitiesController : Controller
return NotFound(); return NotFound();
} }
GdRomSwapDiscCapabilities caps = GdRomSwapDiscCapabilities caps = await _context.GdRomSwapDiscCapabilities.FirstOrDefaultAsync(m => m.Id == id);
await _context.GdRomSwapDiscCapabilities.FirstOrDefaultAsync(m => m.Id == id);
if(caps == null) if(caps == null)
{ {
@@ -40,8 +39,7 @@ public sealed class GdRomSwapDiscCapabilitiesController : Controller
return NotFound(); return NotFound();
} }
GdRomSwapDiscCapabilities caps = GdRomSwapDiscCapabilities caps = await _context.GdRomSwapDiscCapabilities.FirstOrDefaultAsync(m => m.Id == id);
await _context.GdRomSwapDiscCapabilities.FirstOrDefaultAsync(m => m.Id == id);
if(caps == null) if(caps == null)
{ {

View File

@@ -8,8 +8,7 @@ public sealed class MediaFormatsController : Controller
public MediaFormatsController(AaruServerContext context) => _context = context; public MediaFormatsController(AaruServerContext context) => _context = context;
// GET: Admin/MediaFormats // GET: Admin/MediaFormats
public async Task<IActionResult> Index() => public async Task<IActionResult> Index() => View(await _context.MediaFormats.OrderBy(mf => mf.Name).ToListAsync());
View(await _context.MediaFormats.OrderBy(mf => mf.Name).ToListAsync());
// GET: Admin/MediaFormats/Delete/5 // GET: Admin/MediaFormats/Delete/5
public async Task<IActionResult> Delete(int? id) public async Task<IActionResult> Delete(int? id)

View File

@@ -16,8 +16,7 @@ public sealed class MmcController : Controller
Id = m.Id, Id = m.Id,
FeaturesId = m.FeaturesId, FeaturesId = m.FeaturesId,
DataLength = m.ModeSense2AData.Length DataLength = m.ModeSense2AData.Length
}).ToList(). }).ToList().Concat(_context.Mmc.Where(m => m.ModeSense2AData == null).
Concat(_context.Mmc.Where(m => m.ModeSense2AData == null).
Select(m => new MmcModelForView Select(m => new MmcModelForView
{ {
Id = m.Id, Id = m.Id,

View File

@@ -66,8 +66,8 @@ public sealed class ReportsController : Controller
model.TestedMedias = _context.TestedMedia. model.TestedMedias = _context.TestedMedia.
Where(t => t.AtaId == ataId || t.AtaId == atapiId || t.ScsiId == scsiId || Where(t => t.AtaId == ataId || t.AtaId == atapiId || t.ScsiId == scsiId ||
t.MmcId == mmcId).OrderBy(t => t.Manufacturer). t.MmcId == mmcId).OrderBy(t => t.Manufacturer).ThenBy(t => t.Model).
ThenBy(t => t.Model).ThenBy(t => t.MediumTypeName).ToList(); ThenBy(t => t.MediumTypeName).ToList();
model.TestedSequentialMedias = _context.TestedSequentialMedia.Where(t => t.SscId == sscId). model.TestedSequentialMedias = _context.TestedSequentialMedia.Where(t => t.SscId == sscId).
OrderBy(t => t.Manufacturer).ThenBy(t => t.Model). OrderBy(t => t.Manufacturer).ThenBy(t => t.Model).
@@ -98,8 +98,8 @@ public sealed class ReportsController : Controller
// To protect from overposting attacks, please enable the specific properties you want to bind to, for // To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598. // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost, ValidateAntiForgeryToken] [HttpPost, ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("Id,CompactFlash,Manufacturer,Model,Revision,Type")] public async Task<IActionResult> Edit(
UploadedReport changedModel) int id, [Bind("Id,CompactFlash,Manufacturer,Model,Revision,Type")] UploadedReport changedModel)
{ {
if(id != changedModel.Id) if(id != changedModel.Id)
return NotFound(); return NotFound();

View File

@@ -17,10 +17,12 @@ public sealed class ScsisController : Controller
// GET: Admin/Scsis // GET: Admin/Scsis
public IActionResult Index() => View(_context.Scsi.AsEnumerable(). public IActionResult Index() => View(_context.Scsi.AsEnumerable().
OrderBy(m => StringHandlers.CToString(m.Inquiry?. OrderBy(m =>
VendorIdentification)). StringHandlers.
ThenBy(m => StringHandlers.CToString(m.Inquiry?. CToString(m.Inquiry?.VendorIdentification)).
ProductIdentification)). ThenBy(m =>
StringHandlers.
CToString(m.Inquiry?.ProductIdentification)).
ThenBy(m => StringHandlers.CToString(m.Inquiry?. ThenBy(m => StringHandlers.CToString(m.Inquiry?.
ProductRevisionLevel))); ProductRevisionLevel)));

View File

@@ -13,8 +13,7 @@ public sealed class SscsController : Controller
// GET: Admin/Sscs // GET: Admin/Sscs
public async Task<IActionResult> Index() => View(await _context.Ssc.OrderBy(s => s.MinBlockLength). public async Task<IActionResult> Index() => View(await _context.Ssc.OrderBy(s => s.MinBlockLength).
ThenBy(s => s.MaxBlockLength). ThenBy(s => s.MaxBlockLength).
ThenBy(s => s.BlockSizeGranularity). ThenBy(s => s.BlockSizeGranularity).ToListAsync());
ToListAsync());
// GET: Admin/Sscs/Delete/5 // GET: Admin/Sscs/Delete/5
public async Task<IActionResult> Delete(int? id) public async Task<IActionResult> Delete(int? id)
@@ -85,8 +84,7 @@ public sealed class SscsController : Controller
foreach(SscModel duplicate in duplicates) foreach(SscModel duplicate in duplicates)
{ {
Ssc master = Ssc master = _context.Ssc.FirstOrDefault(m => m.BlockSizeGranularity == duplicate.BlockSizeGranularity &&
_context.Ssc.FirstOrDefault(m => m.BlockSizeGranularity == duplicate.BlockSizeGranularity &&
m.MaxBlockLength == duplicate.MaxBlockLength && m.MaxBlockLength == duplicate.MaxBlockLength &&
m.MinBlockLength == duplicate.MinBlockLength); m.MinBlockLength == duplicate.MinBlockLength);
@@ -95,8 +93,7 @@ public sealed class SscsController : Controller
foreach(Ssc ssc in _context.Ssc.Where(m => m.BlockSizeGranularity == duplicate.BlockSizeGranularity && foreach(Ssc ssc in _context.Ssc.Where(m => m.BlockSizeGranularity == duplicate.BlockSizeGranularity &&
m.MaxBlockLength == duplicate.MaxBlockLength && m.MaxBlockLength == duplicate.MaxBlockLength &&
m.MinBlockLength == duplicate.MinBlockLength).Skip(1). m.MinBlockLength == duplicate.MinBlockLength).Skip(1).ToArray())
ToArray())
{ {
foreach(TestedSequentialMedia media in _context.TestedSequentialMedia.Where(d => d.SscId == ssc.Id)) foreach(TestedSequentialMedia media in _context.TestedSequentialMedia.Where(d => d.SscId == ssc.Id))
{ {

View File

@@ -12,14 +12,12 @@ public sealed class SupportedDensitiesController : Controller
// GET: Admin/SupportedDensities // GET: Admin/SupportedDensities
public async Task<IActionResult> Index() => View(await _context.SupportedDensity.OrderBy(d => d.Organization). public async Task<IActionResult> Index() => View(await _context.SupportedDensity.OrderBy(d => d.Organization).
ThenBy(d => d.Name).ThenBy(d => d.Description). ThenBy(d => d.Name).ThenBy(d => d.Description).
ThenBy(d => d.Capacity). ThenBy(d => d.Capacity).ThenBy(d => d.PrimaryCode).
ThenBy(d => d.PrimaryCode).
ThenBy(d => d.SecondaryCode). ThenBy(d => d.SecondaryCode).
ThenBy(d => d.BitsPerMm).ThenBy(d => d.Width). ThenBy(d => d.BitsPerMm).ThenBy(d => d.Width).
ThenBy(d => d.Tracks). ThenBy(d => d.Tracks).ThenBy(d => d.DefaultDensity).
ThenBy(d => d.DefaultDensity). ThenBy(d => d.Writable).ThenBy(d => d.Duplicate).
ThenBy(d => d.Writable). ToListAsync());
ThenBy(d => d.Duplicate).ToListAsync());
// GET: Admin/SupportedDensities/Delete/5 // GET: Admin/SupportedDensities/Delete/5
public async Task<IActionResult> Delete(int? id) public async Task<IActionResult> Delete(int? id)

View File

@@ -24,8 +24,7 @@ public sealed class TestedMediasController : Controller
// GET: Admin/TestedMedias // GET: Admin/TestedMedias
public async Task<IActionResult> Index() => View(await _context.TestedMedia.OrderBy(m => m.Manufacturer). public async Task<IActionResult> Index() => View(await _context.TestedMedia.OrderBy(m => m.Manufacturer).
ThenBy(m => m.Model). ThenBy(m => m.Model).ThenBy(m => m.MediumTypeName).
ThenBy(m => m.MediumTypeName).
ThenBy(m => m.MediaIsRecognized). ThenBy(m => m.MediaIsRecognized).
ThenBy(m => m.LongBlockSize). ThenBy(m => m.LongBlockSize).
ThenBy(m => m.BlockSize).ThenBy(m => m.Blocks). ThenBy(m => m.BlockSize).ThenBy(m => m.Blocks).
@@ -72,8 +71,7 @@ public sealed class TestedMediasController : Controller
// more details see http://go.microsoft.com/fwlink/?LinkId=317598. // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost, ValidateAntiForgeryToken] [HttpPost, ValidateAntiForgeryToken]
public async Task<IActionResult> Edit( public async Task<IActionResult> Edit(
int id, [Bind("Id,Blocks,BlockSize,LongBlockSize,Manufacturer,MediumTypeName,Model")] int id, [Bind("Id,Blocks,BlockSize,LongBlockSize,Manufacturer,MediumTypeName,Model")] TestedMedia changedModel)
TestedMedia changedModel)
{ {
if(id != changedModel.Id) if(id != changedModel.Id)
return NotFound(); return NotFound();

View File

@@ -10,10 +10,9 @@ public sealed class TestedSequentialMediasController : Controller
public TestedSequentialMediasController(AaruServerContext context) => _context = context; public TestedSequentialMediasController(AaruServerContext context) => _context = context;
// GET: Admin/TestedSequentialMedias // GET: Admin/TestedSequentialMedias
public async Task<IActionResult> Index() => View(await _context.TestedSequentialMedia. public async Task<IActionResult> Index() => View(await _context.TestedSequentialMedia.OrderBy(m => m.Manufacturer).
OrderBy(m => m.Manufacturer). ThenBy(m => m.Model).ThenBy(m => m.MediumTypeName).
ThenBy(m => m.Model). ToListAsync());
ThenBy(m => m.MediumTypeName).ToListAsync());
// GET: Admin/TestedSequentialMedias/Edit/5 // GET: Admin/TestedSequentialMedias/Edit/5
public async Task<IActionResult> Edit(int? id) public async Task<IActionResult> Edit(int? id)
@@ -37,8 +36,8 @@ public sealed class TestedSequentialMediasController : Controller
// To protect from overposting attacks, please enable the specific properties you want to bind to, for // To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598. // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost, ValidateAntiForgeryToken] [HttpPost, ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("Id,Manufacturer,MediumTypeName,Model")] public async Task<IActionResult> Edit(
TestedSequentialMedia changedModel) int id, [Bind("Id,Manufacturer,MediumTypeName,Model")] TestedSequentialMedia changedModel)
{ {
if(id != changedModel.Id) if(id != changedModel.Id)
return NotFound(); return NotFound();

View File

@@ -75,10 +75,12 @@
@if(item.Report is null) @if(item.Report is null)
{ {
@("No") @("No")
<a asp-action="Find" asp-controller="Devices" asp-route-bus="@item.Bus" asp-route-id="@item.Id" asp-route-manufacturer="@item.Manufacturer" asp-route-model="@item.Model" asp-route-revision="@item.Revision" target="_blank">(Find)</a> } <a asp-action="Find" asp-controller="Devices" asp-route-bus="@item.Bus" asp-route-id="@item.Id" asp-route-manufacturer="@item.Manufacturer" asp-route-model="@item.Model" asp-route-revision="@item.Revision" target="_blank">(Find)</a>
}
else else
{ {
<a asp-action="Details" asp-controller="Devices" asp-route-id="@item.Report.Id" target="_blank">Yes</a> } <a asp-action="Details" asp-controller="Devices" asp-route-id="@item.Report.Id" target="_blank">Yes</a>
}
</td> </td>
<td> <td>
<a asp-action="Edit" asp-route-id="@item.Id" class="btn btn-secondary">Edit</a> <a asp-action="Edit" asp-route-id="@item.Id" class="btn btn-secondary">Edit</a>

View File

@@ -392,7 +392,8 @@
} }
else else
{ {
<a asp-action="Details" asp-route-id="@item.Report.Id" target="_blank">Yes</a> } <a asp-action="Details" asp-route-id="@item.Report.Id" target="_blank">Yes</a>
}
</td> </td>
<td> <td>
<a asp-action="LinkReports" asp-route-deviceId="@Model.Report.Id" asp-route-statsId="@item.Id" class="btn btn-secondary">Link</a> <a asp-action="LinkReports" asp-route-deviceId="@Model.Report.Id" asp-route-statsId="@item.Id" class="btn btn-secondary">Link</a>

View File

@@ -92,7 +92,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba0Data != null) @if(Model.Lba0Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba0Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba0Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba0Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba0Data.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba0DecodedSense != null) @if(Model.Lba0DecodedSense != null)
@@ -119,7 +120,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba0ScrambledData != null) @if(Model.Lba0ScrambledData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba0ScrambledData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba0ScrambledData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba0ScrambledData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba0ScrambledData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba0ScrambledDecodedSense != null) @if(Model.Lba0ScrambledDecodedSense != null)
@@ -146,7 +148,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba44990Data != null) @if(Model.Lba44990Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990Data.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba44990DecodedSense != null) @if(Model.Lba44990DecodedSense != null)
@@ -173,7 +176,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba44990PqData != null) @if(Model.Lba44990PqData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990PqData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990PqData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba44990PqDecodedSense != null) @if(Model.Lba44990PqDecodedSense != null)
@@ -200,7 +204,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba44990RwData != null) @if(Model.Lba44990RwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990RwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990RwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba44990RwDecodedSense != null) @if(Model.Lba44990RwDecodedSense != null)
@@ -227,7 +232,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba44990AudioData != null) @if(Model.Lba44990AudioData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990AudioData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990AudioData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba44990AudioDecodedSense != null) @if(Model.Lba44990AudioDecodedSense != null)
@@ -254,7 +260,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba44990AudioRwData != null) @if(Model.Lba44990AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba44990AudioPqDecodedSense != null) @if(Model.Lba44990AudioPqDecodedSense != null)
@@ -281,7 +288,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba44990AudioRwData != null) @if(Model.Lba44990AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba44990AudioRwDecodedSense != null) @if(Model.Lba44990AudioRwDecodedSense != null)
@@ -308,7 +316,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba45000Data != null) @if(Model.Lba45000Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000Data.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba45000DecodedSense != null) @if(Model.Lba45000DecodedSense != null)
@@ -335,7 +344,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba45000PqData != null) @if(Model.Lba45000PqData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000PqData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000PqData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba45000PqDecodedSense != null) @if(Model.Lba45000PqDecodedSense != null)
@@ -362,7 +372,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba45000RwData != null) @if(Model.Lba45000RwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000RwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000RwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba45000RwDecodedSense != null) @if(Model.Lba45000RwDecodedSense != null)
@@ -389,7 +400,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba45000AudioData != null) @if(Model.Lba45000AudioData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000AudioData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000AudioData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba45000AudioDecodedSense != null) @if(Model.Lba45000AudioDecodedSense != null)
@@ -416,7 +428,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba45000AudioRwData != null) @if(Model.Lba45000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba45000AudioPqDecodedSense != null) @if(Model.Lba45000AudioPqDecodedSense != null)
@@ -443,7 +456,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba45000AudioRwData != null) @if(Model.Lba45000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba45000AudioRwDecodedSense != null) @if(Model.Lba45000AudioRwDecodedSense != null)
@@ -470,7 +484,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba50000Data != null) @if(Model.Lba50000Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000Data.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba50000DecodedSense != null) @if(Model.Lba50000DecodedSense != null)
@@ -497,7 +512,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba50000PqData != null) @if(Model.Lba50000PqData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000PqData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000PqData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba50000PqDecodedSense != null) @if(Model.Lba50000PqDecodedSense != null)
@@ -524,7 +540,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba50000RwData != null) @if(Model.Lba50000RwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000RwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000RwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba50000RwDecodedSense != null) @if(Model.Lba50000RwDecodedSense != null)
@@ -551,7 +568,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba50000AudioData != null) @if(Model.Lba50000AudioData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000AudioData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000AudioData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba50000AudioDecodedSense != null) @if(Model.Lba50000AudioDecodedSense != null)
@@ -578,7 +596,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba50000AudioRwData != null) @if(Model.Lba50000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba50000AudioPqDecodedSense != null) @if(Model.Lba50000AudioPqDecodedSense != null)
@@ -605,7 +624,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba50000AudioRwData != null) @if(Model.Lba50000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba50000AudioRwDecodedSense != null) @if(Model.Lba50000AudioRwDecodedSense != null)
@@ -632,7 +652,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba100000Data != null) @if(Model.Lba100000Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000Data.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba100000DecodedSense != null) @if(Model.Lba100000DecodedSense != null)
@@ -659,7 +680,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba100000PqData != null) @if(Model.Lba100000PqData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000PqData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000PqData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba100000PqDecodedSense != null) @if(Model.Lba100000PqDecodedSense != null)
@@ -686,7 +708,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba100000RwData != null) @if(Model.Lba100000RwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000RwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000RwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba100000RwDecodedSense != null) @if(Model.Lba100000RwDecodedSense != null)
@@ -713,7 +736,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba100000AudioData != null) @if(Model.Lba100000AudioData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000AudioData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000AudioData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba100000AudioDecodedSense != null) @if(Model.Lba100000AudioDecodedSense != null)
@@ -740,7 +764,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba100000AudioRwData != null) @if(Model.Lba100000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba100000AudioPqDecodedSense != null) @if(Model.Lba100000AudioPqDecodedSense != null)
@@ -767,7 +792,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba100000AudioRwData != null) @if(Model.Lba100000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba100000AudioRwDecodedSense != null) @if(Model.Lba100000AudioRwDecodedSense != null)
@@ -794,7 +820,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba400000Data != null) @if(Model.Lba400000Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000Data.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba400000DecodedSense != null) @if(Model.Lba400000DecodedSense != null)
@@ -821,7 +848,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba400000PqData != null) @if(Model.Lba400000PqData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000PqData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000PqData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba400000PqDecodedSense != null) @if(Model.Lba400000PqDecodedSense != null)
@@ -848,7 +876,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba400000RwData != null) @if(Model.Lba400000RwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000RwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000RwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba400000RwDecodedSense != null) @if(Model.Lba400000RwDecodedSense != null)
@@ -875,7 +904,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba400000AudioData != null) @if(Model.Lba400000AudioData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000AudioData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000AudioData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba400000AudioDecodedSense != null) @if(Model.Lba400000AudioDecodedSense != null)
@@ -902,7 +932,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba400000AudioRwData != null) @if(Model.Lba400000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba400000AudioPqDecodedSense != null) @if(Model.Lba400000AudioPqDecodedSense != null)
@@ -929,7 +960,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba400000AudioRwData != null) @if(Model.Lba400000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba400000AudioRwDecodedSense != null) @if(Model.Lba400000AudioRwDecodedSense != null)
@@ -956,7 +988,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba450000Data != null) @if(Model.Lba450000Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000Data.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba450000DecodedSense != null) @if(Model.Lba450000DecodedSense != null)
@@ -983,7 +1016,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba450000PqData != null) @if(Model.Lba450000PqData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000PqData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000PqData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba450000PqDecodedSense != null) @if(Model.Lba450000PqDecodedSense != null)
@@ -1010,7 +1044,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba450000RwData != null) @if(Model.Lba450000RwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000RwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000RwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba450000RwDecodedSense != null) @if(Model.Lba450000RwDecodedSense != null)
@@ -1037,7 +1072,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba450000AudioData != null) @if(Model.Lba450000AudioData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000AudioData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000AudioData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba450000AudioDecodedSense != null) @if(Model.Lba450000AudioDecodedSense != null)
@@ -1064,7 +1100,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba450000AudioRwData != null) @if(Model.Lba450000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba450000AudioPqDecodedSense != null) @if(Model.Lba450000AudioPqDecodedSense != null)
@@ -1091,7 +1128,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba450000AudioRwData != null) @if(Model.Lba450000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba450000AudioRwDecodedSense != null) @if(Model.Lba450000AudioRwDecodedSense != null)

View File

@@ -91,7 +91,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba0Data != null) @if(Model.Lba0Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba0Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba0Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba0Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba0Data.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba0DecodedSense != null) @if(Model.Lba0DecodedSense != null)
@@ -118,7 +119,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba0ScrambledData != null) @if(Model.Lba0ScrambledData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba0ScrambledData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba0ScrambledData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba0ScrambledData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba0ScrambledData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba0ScrambledDecodedSense != null) @if(Model.Lba0ScrambledDecodedSense != null)
@@ -145,7 +147,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba44990Data != null) @if(Model.Lba44990Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990Data.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba44990DecodedSense != null) @if(Model.Lba44990DecodedSense != null)
@@ -172,7 +175,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba44990PqData != null) @if(Model.Lba44990PqData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990PqData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990PqData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba44990PqDecodedSense != null) @if(Model.Lba44990PqDecodedSense != null)
@@ -199,7 +203,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba44990RwData != null) @if(Model.Lba44990RwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990RwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990RwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba44990RwDecodedSense != null) @if(Model.Lba44990RwDecodedSense != null)
@@ -226,7 +231,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba44990AudioData != null) @if(Model.Lba44990AudioData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990AudioData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990AudioData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba44990AudioDecodedSense != null) @if(Model.Lba44990AudioDecodedSense != null)
@@ -253,7 +259,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba44990AudioRwData != null) @if(Model.Lba44990AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba44990AudioPqDecodedSense != null) @if(Model.Lba44990AudioPqDecodedSense != null)
@@ -280,7 +287,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba44990AudioRwData != null) @if(Model.Lba44990AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba44990AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba44990AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba44990AudioRwDecodedSense != null) @if(Model.Lba44990AudioRwDecodedSense != null)
@@ -307,7 +315,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba45000Data != null) @if(Model.Lba45000Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000Data.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba45000DecodedSense != null) @if(Model.Lba45000DecodedSense != null)
@@ -334,7 +343,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba45000PqData != null) @if(Model.Lba45000PqData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000PqData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000PqData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba45000PqDecodedSense != null) @if(Model.Lba45000PqDecodedSense != null)
@@ -361,7 +371,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba45000RwData != null) @if(Model.Lba45000RwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000RwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000RwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba45000RwDecodedSense != null) @if(Model.Lba45000RwDecodedSense != null)
@@ -388,7 +399,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba45000AudioData != null) @if(Model.Lba45000AudioData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000AudioData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000AudioData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba45000AudioDecodedSense != null) @if(Model.Lba45000AudioDecodedSense != null)
@@ -415,7 +427,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba45000AudioRwData != null) @if(Model.Lba45000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba45000AudioPqDecodedSense != null) @if(Model.Lba45000AudioPqDecodedSense != null)
@@ -442,7 +455,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba45000AudioRwData != null) @if(Model.Lba45000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba45000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba45000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba45000AudioRwDecodedSense != null) @if(Model.Lba45000AudioRwDecodedSense != null)
@@ -469,7 +483,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba50000Data != null) @if(Model.Lba50000Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000Data.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba50000DecodedSense != null) @if(Model.Lba50000DecodedSense != null)
@@ -496,7 +511,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba50000PqData != null) @if(Model.Lba50000PqData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000PqData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000PqData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba50000PqDecodedSense != null) @if(Model.Lba50000PqDecodedSense != null)
@@ -523,7 +539,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba50000RwData != null) @if(Model.Lba50000RwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000RwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000RwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba50000RwDecodedSense != null) @if(Model.Lba50000RwDecodedSense != null)
@@ -550,7 +567,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba50000AudioData != null) @if(Model.Lba50000AudioData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000AudioData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000AudioData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba50000AudioDecodedSense != null) @if(Model.Lba50000AudioDecodedSense != null)
@@ -577,7 +595,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba50000AudioRwData != null) @if(Model.Lba50000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba50000AudioPqDecodedSense != null) @if(Model.Lba50000AudioPqDecodedSense != null)
@@ -604,7 +623,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba50000AudioRwData != null) @if(Model.Lba50000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba50000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba50000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba50000AudioRwDecodedSense != null) @if(Model.Lba50000AudioRwDecodedSense != null)
@@ -631,7 +651,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba100000Data != null) @if(Model.Lba100000Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000Data.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba100000DecodedSense != null) @if(Model.Lba100000DecodedSense != null)
@@ -658,7 +679,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba100000PqData != null) @if(Model.Lba100000PqData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000PqData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000PqData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba100000PqDecodedSense != null) @if(Model.Lba100000PqDecodedSense != null)
@@ -685,7 +707,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba100000RwData != null) @if(Model.Lba100000RwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000RwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000RwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba100000RwDecodedSense != null) @if(Model.Lba100000RwDecodedSense != null)
@@ -712,7 +735,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba100000AudioData != null) @if(Model.Lba100000AudioData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000AudioData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000AudioData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba100000AudioDecodedSense != null) @if(Model.Lba100000AudioDecodedSense != null)
@@ -739,7 +763,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba100000AudioRwData != null) @if(Model.Lba100000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba100000AudioPqDecodedSense != null) @if(Model.Lba100000AudioPqDecodedSense != null)
@@ -766,7 +791,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba100000AudioRwData != null) @if(Model.Lba100000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba100000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba100000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba100000AudioRwDecodedSense != null) @if(Model.Lba100000AudioRwDecodedSense != null)
@@ -793,7 +819,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba400000Data != null) @if(Model.Lba400000Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000Data.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba400000DecodedSense != null) @if(Model.Lba400000DecodedSense != null)
@@ -820,7 +847,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba400000PqData != null) @if(Model.Lba400000PqData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000PqData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000PqData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba400000PqDecodedSense != null) @if(Model.Lba400000PqDecodedSense != null)
@@ -847,7 +875,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba400000RwData != null) @if(Model.Lba400000RwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000RwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000RwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba400000RwDecodedSense != null) @if(Model.Lba400000RwDecodedSense != null)
@@ -874,7 +903,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba400000AudioData != null) @if(Model.Lba400000AudioData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000AudioData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000AudioData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba400000AudioDecodedSense != null) @if(Model.Lba400000AudioDecodedSense != null)
@@ -901,7 +931,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba400000AudioRwData != null) @if(Model.Lba400000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba400000AudioPqDecodedSense != null) @if(Model.Lba400000AudioPqDecodedSense != null)
@@ -928,7 +959,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba400000AudioRwData != null) @if(Model.Lba400000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba400000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba400000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba400000AudioRwDecodedSense != null) @if(Model.Lba400000AudioRwDecodedSense != null)
@@ -955,7 +987,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba450000Data != null) @if(Model.Lba450000Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000Data)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000Data.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba450000DecodedSense != null) @if(Model.Lba450000DecodedSense != null)
@@ -982,7 +1015,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba450000PqData != null) @if(Model.Lba450000PqData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000PqData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000PqData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000PqData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba450000PqDecodedSense != null) @if(Model.Lba450000PqDecodedSense != null)
@@ -1009,7 +1043,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba450000RwData != null) @if(Model.Lba450000RwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000RwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000RwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000RwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba450000RwDecodedSense != null) @if(Model.Lba450000RwDecodedSense != null)
@@ -1036,7 +1071,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba450000AudioData != null) @if(Model.Lba450000AudioData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000AudioData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000AudioData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000AudioData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba450000AudioDecodedSense != null) @if(Model.Lba450000AudioDecodedSense != null)
@@ -1063,7 +1099,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba450000AudioRwData != null) @if(Model.Lba450000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba450000AudioPqDecodedSense != null) @if(Model.Lba450000AudioPqDecodedSense != null)
@@ -1090,7 +1127,8 @@ else if(Model.RecognizedSwapDisc)
<td> <td>
@if(Model.Lba450000AudioRwData != null) @if(Model.Lba450000AudioRwData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000AudioRwData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Lba450000AudioRwData)" asp-route-id="@Model.Id" target="_blank">@Model.Lba450000AudioRwData.Length bytes</a>
}
</td> </td>
<td> <td>
@if(Model.Lba450000AudioRwDecodedSense != null) @if(Model.Lba450000AudioRwDecodedSense != null)

View File

@@ -60,7 +60,8 @@
<td> <td>
@if(item.FeaturesId != null) @if(item.FeaturesId != null)
{ {
<a asp-action="details" asp-controller="MmcFeatures" asp-route-id="@item.FeaturesId" target="_blank">@Html.DisplayFor(modelItem => item.FeaturesId)</a> } <a asp-action="details" asp-controller="MmcFeatures" asp-route-id="@item.FeaturesId" target="_blank">@Html.DisplayFor(modelItem => item.FeaturesId)</a>
}
else else
{ {
@Html.DisplayFor(modelItem => item.FeaturesId) @Html.DisplayFor(modelItem => item.FeaturesId)

View File

@@ -44,7 +44,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.IdentifyData != null) @if(Model.IdentifyData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.IdentifyData)" asp-route-id="@Model.Id" target="_blank">@Model.IdentifyData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.IdentifyData)" asp-route-id="@Model.Id" target="_blank">@Model.IdentifyData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -418,7 +419,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ModeSense6Data != null) @if(Model.ModeSense6Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ModeSense6Data)" asp-route-id="@Model.Id" target="_blank">@Model.ModeSense6Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ModeSense6Data)" asp-route-id="@Model.Id" target="_blank">@Model.ModeSense6Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -430,7 +432,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ModeSense10Data != null) @if(Model.ModeSense10Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ModeSense10Data)" asp-route-id="@Model.Id" target="_blank">@Model.ModeSense10Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ModeSense10Data)" asp-route-id="@Model.Id" target="_blank">@Model.ModeSense10Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -606,7 +609,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.IntersessionLeadInData != null) @if(Model.IntersessionLeadInData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.IntersessionLeadInData)" asp-route-id="@Model.Id" target="_blank">@Model.IntersessionLeadInData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.IntersessionLeadInData)" asp-route-id="@Model.Id" target="_blank">@Model.IntersessionLeadInData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -618,7 +622,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.IntersessionLeadOutData != null) @if(Model.IntersessionLeadOutData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.IntersessionLeadOutData)" asp-route-id="@Model.Id" target="_blank">@Model.IntersessionLeadOutData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.IntersessionLeadOutData)" asp-route-id="@Model.Id" target="_blank">@Model.IntersessionLeadOutData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -630,7 +635,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.Read6Data != null) @if(Model.Read6Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Read6Data)" asp-route-id="@Model.Id" target="_blank">@Model.Read6Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Read6Data)" asp-route-id="@Model.Id" target="_blank">@Model.Read6Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -642,7 +648,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.Read10Data != null) @if(Model.Read10Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Read10Data)" asp-route-id="@Model.Id" target="_blank">@Model.Read10Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Read10Data)" asp-route-id="@Model.Id" target="_blank">@Model.Read10Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -654,7 +661,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.Read12Data != null) @if(Model.Read12Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Read12Data)" asp-route-id="@Model.Id" target="_blank">@Model.Read12Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Read12Data)" asp-route-id="@Model.Id" target="_blank">@Model.Read12Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -666,7 +674,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.Read16Data != null) @if(Model.Read16Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Read16Data)" asp-route-id="@Model.Id" target="_blank">@Model.Read16Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Read16Data)" asp-route-id="@Model.Id" target="_blank">@Model.Read16Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -678,7 +687,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadLong10Data != null) @if(Model.ReadLong10Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLong10Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLong10Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLong10Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLong10Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -690,7 +700,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadLong16Data != null) @if(Model.ReadLong16Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLong16Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLong16Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLong16Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLong16Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -702,7 +713,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadSectorsData != null) @if(Model.ReadSectorsData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadSectorsData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadSectorsData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadSectorsData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadSectorsData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -714,7 +726,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadSectorsRetryData != null) @if(Model.ReadSectorsRetryData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadSectorsRetryData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadSectorsRetryData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadSectorsRetryData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadSectorsRetryData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -726,7 +739,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadDmaData != null) @if(Model.ReadDmaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -738,7 +752,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadDmaRetryData != null) @if(Model.ReadDmaRetryData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaRetryData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaRetryData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaRetryData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaRetryData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -750,7 +765,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadLbaData != null) @if(Model.ReadLbaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLbaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLbaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -762,7 +778,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadRetryLbaData != null) @if(Model.ReadRetryLbaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadRetryLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadRetryLbaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadRetryLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadRetryLbaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -774,7 +791,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadDmaLbaData != null) @if(Model.ReadDmaLbaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaLbaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaLbaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -786,7 +804,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadDmaRetryLbaData != null) @if(Model.ReadDmaRetryLbaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaRetryLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaRetryLbaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaRetryLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaRetryLbaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -798,7 +817,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadLba48Data != null) @if(Model.ReadLba48Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLba48Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLba48Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLba48Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLba48Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -810,7 +830,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadDmaLba48Data != null) @if(Model.ReadDmaLba48Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaLba48Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaLba48Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaLba48Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaLba48Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -822,7 +843,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadLongData != null) @if(Model.ReadLongData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLongData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLongData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLongData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLongData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -834,7 +856,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadLongRetryData != null) @if(Model.ReadLongRetryData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLongRetryData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLongRetryData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLongRetryData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLongRetryData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -846,7 +869,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadLongLbaData != null) @if(Model.ReadLongLbaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLongLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLongLbaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLongLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLongLbaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -858,7 +882,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadLongRetryLbaData != null) @if(Model.ReadLongRetryLbaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLongRetryLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLongRetryLbaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLongRetryLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLongRetryLbaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -870,7 +895,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.TocData != null) @if(Model.TocData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.TocData)" asp-route-id="@Model.Id" target="_blank">@Model.TocData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.TocData)" asp-route-id="@Model.Id" target="_blank">@Model.TocData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -882,7 +908,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.FullTocData != null) @if(Model.FullTocData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.FullTocData)" asp-route-id="@Model.Id" target="_blank">@Model.FullTocData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.FullTocData)" asp-route-id="@Model.Id" target="_blank">@Model.FullTocData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -894,7 +921,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.AtipData != null) @if(Model.AtipData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.AtipData)" asp-route-id="@Model.Id" target="_blank">@Model.AtipData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.AtipData)" asp-route-id="@Model.Id" target="_blank">@Model.AtipData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -906,7 +934,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PmaData != null) @if(Model.PmaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PmaData)" asp-route-id="@Model.Id" target="_blank">@Model.PmaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PmaData)" asp-route-id="@Model.Id" target="_blank">@Model.PmaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -918,7 +947,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadCdData != null) @if(Model.ReadCdData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -930,7 +960,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadCdMsfData != null) @if(Model.ReadCdMsfData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdMsfData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdMsfData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdMsfData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdMsfData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -942,7 +973,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadCdFullData != null) @if(Model.ReadCdFullData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdFullData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdFullData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdFullData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdFullData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -954,7 +986,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadCdMsfFullData != null) @if(Model.ReadCdMsfFullData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdMsfFullData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdMsfFullData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdMsfFullData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdMsfFullData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -966,7 +999,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.Track1PregapData != null) @if(Model.Track1PregapData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Track1PregapData)" asp-route-id="@Model.Id" target="_blank">@Model.Track1PregapData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Track1PregapData)" asp-route-id="@Model.Id" target="_blank">@Model.Track1PregapData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -978,7 +1012,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.LeadInData != null) @if(Model.LeadInData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.LeadInData)" asp-route-id="@Model.Id" target="_blank">@Model.LeadInData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.LeadInData)" asp-route-id="@Model.Id" target="_blank">@Model.LeadInData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -990,7 +1025,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.LeadOutData != null) @if(Model.LeadOutData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.LeadOutData)" asp-route-id="@Model.Id" target="_blank">@Model.LeadOutData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.LeadOutData)" asp-route-id="@Model.Id" target="_blank">@Model.LeadOutData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1002,7 +1038,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.C2PointersData != null) @if(Model.C2PointersData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.C2PointersData)" asp-route-id="@Model.Id" target="_blank">@Model.C2PointersData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.C2PointersData)" asp-route-id="@Model.Id" target="_blank">@Model.C2PointersData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1014,7 +1051,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PQSubchannelData != null) @if(Model.PQSubchannelData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PQSubchannelData)" asp-route-id="@Model.Id" target="_blank">@Model.PQSubchannelData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PQSubchannelData)" asp-route-id="@Model.Id" target="_blank">@Model.PQSubchannelData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1026,7 +1064,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.RWSubchannelData != null) @if(Model.RWSubchannelData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.RWSubchannelData)" asp-route-id="@Model.Id" target="_blank">@Model.RWSubchannelData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.RWSubchannelData)" asp-route-id="@Model.Id" target="_blank">@Model.RWSubchannelData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1038,7 +1077,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.CorrectedSubchannelData != null) @if(Model.CorrectedSubchannelData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.CorrectedSubchannelData)" asp-route-id="@Model.Id" target="_blank">@Model.CorrectedSubchannelData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.CorrectedSubchannelData)" asp-route-id="@Model.Id" target="_blank">@Model.CorrectedSubchannelData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1050,7 +1090,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PQSubchannelWithC2Data != null) @if(Model.PQSubchannelWithC2Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PQSubchannelWithC2Data)" asp-route-id="@Model.Id" target="_blank">@Model.PQSubchannelWithC2Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PQSubchannelWithC2Data)" asp-route-id="@Model.Id" target="_blank">@Model.PQSubchannelWithC2Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1062,7 +1103,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.RWSubchannelWithC2Data != null) @if(Model.RWSubchannelWithC2Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.RWSubchannelWithC2Data)" asp-route-id="@Model.Id" target="_blank">@Model.RWSubchannelWithC2Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.RWSubchannelWithC2Data)" asp-route-id="@Model.Id" target="_blank">@Model.RWSubchannelWithC2Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1074,7 +1116,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.CorrectedSubchannelWithC2Data != null) @if(Model.CorrectedSubchannelWithC2Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.CorrectedSubchannelWithC2Data)" asp-route-id="@Model.Id" target="_blank">@Model.CorrectedSubchannelWithC2Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.CorrectedSubchannelWithC2Data)" asp-route-id="@Model.Id" target="_blank">@Model.CorrectedSubchannelWithC2Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1086,7 +1129,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PfiData != null) @if(Model.PfiData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PfiData)" asp-route-id="@Model.Id" target="_blank">@Model.PfiData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PfiData)" asp-route-id="@Model.Id" target="_blank">@Model.PfiData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1098,7 +1142,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.DmiData != null) @if(Model.DmiData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.DmiData)" asp-route-id="@Model.Id" target="_blank">@Model.DmiData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.DmiData)" asp-route-id="@Model.Id" target="_blank">@Model.DmiData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1110,7 +1155,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.CmiData != null) @if(Model.CmiData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.CmiData)" asp-route-id="@Model.Id" target="_blank">@Model.CmiData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.CmiData)" asp-route-id="@Model.Id" target="_blank">@Model.CmiData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1122,7 +1168,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.DvdBcaData != null) @if(Model.DvdBcaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.DvdBcaData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdBcaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.DvdBcaData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdBcaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1134,7 +1181,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.DvdAacsData != null) @if(Model.DvdAacsData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.DvdAacsData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdAacsData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.DvdAacsData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdAacsData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1146,7 +1194,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.DvdDdsData != null) @if(Model.DvdDdsData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.DvdDdsData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdDdsData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.DvdDdsData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdDdsData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1158,7 +1207,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.DvdSaiData != null) @if(Model.DvdSaiData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.DvdSaiData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdSaiData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.DvdSaiData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdSaiData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1170,7 +1220,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PriData != null) @if(Model.PriData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PriData)" asp-route-id="@Model.Id" target="_blank">@Model.PriData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PriData)" asp-route-id="@Model.Id" target="_blank">@Model.PriData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1182,7 +1233,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.EmbossedPfiData != null) @if(Model.EmbossedPfiData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.EmbossedPfiData)" asp-route-id="@Model.Id" target="_blank">@Model.EmbossedPfiData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.EmbossedPfiData)" asp-route-id="@Model.Id" target="_blank">@Model.EmbossedPfiData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1194,7 +1246,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.AdipData != null) @if(Model.AdipData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.AdipData)" asp-route-id="@Model.Id" target="_blank">@Model.AdipData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.AdipData)" asp-route-id="@Model.Id" target="_blank">@Model.AdipData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1206,7 +1259,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.DcbData != null) @if(Model.DcbData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.DcbData)" asp-route-id="@Model.Id" target="_blank">@Model.DcbData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.DcbData)" asp-route-id="@Model.Id" target="_blank">@Model.DcbData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1218,7 +1272,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.HdCmiData != null) @if(Model.HdCmiData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.HdCmiData)" asp-route-id="@Model.Id" target="_blank">@Model.HdCmiData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.HdCmiData)" asp-route-id="@Model.Id" target="_blank">@Model.HdCmiData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1230,7 +1285,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.DvdLayerData != null) @if(Model.DvdLayerData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.DvdLayerData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdLayerData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.DvdLayerData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdLayerData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1242,7 +1298,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.BluBcaData != null) @if(Model.BluBcaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.BluBcaData)" asp-route-id="@Model.Id" target="_blank">@Model.BluBcaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.BluBcaData)" asp-route-id="@Model.Id" target="_blank">@Model.BluBcaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1254,7 +1311,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.BluDdsData != null) @if(Model.BluDdsData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.BluDdsData)" asp-route-id="@Model.Id" target="_blank">@Model.BluDdsData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.BluDdsData)" asp-route-id="@Model.Id" target="_blank">@Model.BluDdsData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1266,7 +1324,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.BluSaiData != null) @if(Model.BluSaiData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.BluSaiData)" asp-route-id="@Model.Id" target="_blank">@Model.BluSaiData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.BluSaiData)" asp-route-id="@Model.Id" target="_blank">@Model.BluSaiData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1278,7 +1337,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.BluDiData != null) @if(Model.BluDiData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.BluDiData)" asp-route-id="@Model.Id" target="_blank">@Model.BluDiData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.BluDiData)" asp-route-id="@Model.Id" target="_blank">@Model.BluDiData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1290,7 +1350,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PlextorReadCddaData != null) @if(Model.PlextorReadCddaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PlextorReadCddaData)" asp-route-id="@Model.Id" target="_blank">@Model.PlextorReadCddaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PlextorReadCddaData)" asp-route-id="@Model.Id" target="_blank">@Model.PlextorReadCddaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1302,7 +1363,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PlextorReadCddaData != null) @if(Model.PlextorReadCddaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PlextorReadCddaData)" asp-route-id="@Model.Id" target="_blank">@Model.PlextorReadCddaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PlextorReadCddaData)" asp-route-id="@Model.Id" target="_blank">@Model.PlextorReadCddaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1314,7 +1376,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PioneerReadCddaData != null) @if(Model.PioneerReadCddaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PioneerReadCddaData)" asp-route-id="@Model.Id" target="_blank">@Model.PioneerReadCddaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PioneerReadCddaData)" asp-route-id="@Model.Id" target="_blank">@Model.PioneerReadCddaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1326,7 +1389,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PioneerReadCddaMsfData != null) @if(Model.PioneerReadCddaMsfData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PioneerReadCddaMsfData)" asp-route-id="@Model.Id" target="_blank">@Model.PioneerReadCddaMsfData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PioneerReadCddaMsfData)" asp-route-id="@Model.Id" target="_blank">@Model.PioneerReadCddaMsfData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1338,7 +1402,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.NecReadCddaData != null) @if(Model.NecReadCddaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.NecReadCddaData)" asp-route-id="@Model.Id" target="_blank">@Model.NecReadCddaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.NecReadCddaData)" asp-route-id="@Model.Id" target="_blank">@Model.NecReadCddaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1350,7 +1415,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PlextorReadRawDVDData != null) @if(Model.PlextorReadRawDVDData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PlextorReadRawDVDData)" asp-route-id="@Model.Id" target="_blank">@Model.PlextorReadRawDVDData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PlextorReadRawDVDData)" asp-route-id="@Model.Id" target="_blank">@Model.PlextorReadRawDVDData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1362,7 +1428,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.HLDTSTReadRawDVDData != null) @if(Model.HLDTSTReadRawDVDData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.HLDTSTReadRawDVDData)" asp-route-id="@Model.Id" target="_blank">@Model.HLDTSTReadRawDVDData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.HLDTSTReadRawDVDData)" asp-route-id="@Model.Id" target="_blank">@Model.HLDTSTReadRawDVDData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1380,7 +1447,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadCdScrambledData != null) @if(Model.ReadCdScrambledData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdScrambledData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdScrambledData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdScrambledData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdScrambledData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1398,7 +1466,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadF1_06Data != null) @if(Model.ReadF1_06Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadF1_06Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadF1_06Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadF1_06Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadF1_06Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1416,7 +1485,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadF1_06LeadOutData != null) @if(Model.ReadF1_06LeadOutData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadF1_06LeadOutData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadF1_06Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadF1_06LeadOutData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadF1_06Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")

View File

@@ -43,7 +43,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.IdentifyData != null) @if(Model.IdentifyData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.IdentifyData)" asp-route-id="@Model.Id" target="_blank">@Model.IdentifyData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.IdentifyData)" asp-route-id="@Model.Id" target="_blank">@Model.IdentifyData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -417,7 +418,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ModeSense6Data != null) @if(Model.ModeSense6Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ModeSense6Data)" asp-route-id="@Model.Id" target="_blank">@Model.ModeSense6Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ModeSense6Data)" asp-route-id="@Model.Id" target="_blank">@Model.ModeSense6Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -429,7 +431,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ModeSense10Data != null) @if(Model.ModeSense10Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ModeSense10Data)" asp-route-id="@Model.Id" target="_blank">@Model.ModeSense10Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ModeSense10Data)" asp-route-id="@Model.Id" target="_blank">@Model.ModeSense10Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -605,7 +608,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.IntersessionLeadInData != null) @if(Model.IntersessionLeadInData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.IntersessionLeadInData)" asp-route-id="@Model.Id" target="_blank">@Model.IntersessionLeadInData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.IntersessionLeadInData)" asp-route-id="@Model.Id" target="_blank">@Model.IntersessionLeadInData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -617,7 +621,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.IntersessionLeadOutData != null) @if(Model.IntersessionLeadOutData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.IntersessionLeadOutData)" asp-route-id="@Model.Id" target="_blank">@Model.IntersessionLeadOutData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.IntersessionLeadOutData)" asp-route-id="@Model.Id" target="_blank">@Model.IntersessionLeadOutData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -629,7 +634,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.Read6Data != null) @if(Model.Read6Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Read6Data)" asp-route-id="@Model.Id" target="_blank">@Model.Read6Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Read6Data)" asp-route-id="@Model.Id" target="_blank">@Model.Read6Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -641,7 +647,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.Read10Data != null) @if(Model.Read10Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Read10Data)" asp-route-id="@Model.Id" target="_blank">@Model.Read10Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Read10Data)" asp-route-id="@Model.Id" target="_blank">@Model.Read10Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -653,7 +660,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.Read12Data != null) @if(Model.Read12Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Read12Data)" asp-route-id="@Model.Id" target="_blank">@Model.Read12Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Read12Data)" asp-route-id="@Model.Id" target="_blank">@Model.Read12Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -665,7 +673,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.Read16Data != null) @if(Model.Read16Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Read16Data)" asp-route-id="@Model.Id" target="_blank">@Model.Read16Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Read16Data)" asp-route-id="@Model.Id" target="_blank">@Model.Read16Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -677,7 +686,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadLong10Data != null) @if(Model.ReadLong10Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLong10Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLong10Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLong10Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLong10Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -689,7 +699,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadLong16Data != null) @if(Model.ReadLong16Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLong16Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLong16Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLong16Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLong16Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -701,7 +712,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadSectorsData != null) @if(Model.ReadSectorsData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadSectorsData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadSectorsData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadSectorsData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadSectorsData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -713,7 +725,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadSectorsRetryData != null) @if(Model.ReadSectorsRetryData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadSectorsRetryData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadSectorsRetryData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadSectorsRetryData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadSectorsRetryData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -725,7 +738,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadDmaData != null) @if(Model.ReadDmaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -737,7 +751,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadDmaRetryData != null) @if(Model.ReadDmaRetryData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaRetryData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaRetryData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaRetryData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaRetryData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -749,7 +764,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadLbaData != null) @if(Model.ReadLbaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLbaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLbaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -761,7 +777,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadRetryLbaData != null) @if(Model.ReadRetryLbaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadRetryLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadRetryLbaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadRetryLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadRetryLbaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -773,7 +790,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadDmaLbaData != null) @if(Model.ReadDmaLbaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaLbaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaLbaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -785,7 +803,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadDmaRetryLbaData != null) @if(Model.ReadDmaRetryLbaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaRetryLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaRetryLbaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaRetryLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaRetryLbaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -797,7 +816,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadLba48Data != null) @if(Model.ReadLba48Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLba48Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLba48Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLba48Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLba48Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -809,7 +829,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadDmaLba48Data != null) @if(Model.ReadDmaLba48Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaLba48Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaLba48Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadDmaLba48Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadDmaLba48Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -821,7 +842,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadLongData != null) @if(Model.ReadLongData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLongData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLongData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLongData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLongData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -833,7 +855,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadLongRetryData != null) @if(Model.ReadLongRetryData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLongRetryData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLongRetryData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLongRetryData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLongRetryData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -845,7 +868,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadLongLbaData != null) @if(Model.ReadLongLbaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLongLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLongLbaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLongLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLongLbaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -857,7 +881,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadLongRetryLbaData != null) @if(Model.ReadLongRetryLbaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLongRetryLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLongRetryLbaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadLongRetryLbaData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadLongRetryLbaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -869,7 +894,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.TocData != null) @if(Model.TocData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.TocData)" asp-route-id="@Model.Id" target="_blank">@Model.TocData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.TocData)" asp-route-id="@Model.Id" target="_blank">@Model.TocData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -881,7 +907,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.FullTocData != null) @if(Model.FullTocData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.FullTocData)" asp-route-id="@Model.Id" target="_blank">@Model.FullTocData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.FullTocData)" asp-route-id="@Model.Id" target="_blank">@Model.FullTocData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -893,7 +920,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.AtipData != null) @if(Model.AtipData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.AtipData)" asp-route-id="@Model.Id" target="_blank">@Model.AtipData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.AtipData)" asp-route-id="@Model.Id" target="_blank">@Model.AtipData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -905,7 +933,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PmaData != null) @if(Model.PmaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PmaData)" asp-route-id="@Model.Id" target="_blank">@Model.PmaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PmaData)" asp-route-id="@Model.Id" target="_blank">@Model.PmaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -917,7 +946,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadCdData != null) @if(Model.ReadCdData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -929,7 +959,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadCdMsfData != null) @if(Model.ReadCdMsfData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdMsfData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdMsfData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdMsfData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdMsfData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -941,7 +972,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadCdFullData != null) @if(Model.ReadCdFullData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdFullData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdFullData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdFullData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdFullData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -953,7 +985,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadCdMsfFullData != null) @if(Model.ReadCdMsfFullData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdMsfFullData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdMsfFullData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdMsfFullData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdMsfFullData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -965,7 +998,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.Track1PregapData != null) @if(Model.Track1PregapData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.Track1PregapData)" asp-route-id="@Model.Id" target="_blank">@Model.Track1PregapData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.Track1PregapData)" asp-route-id="@Model.Id" target="_blank">@Model.Track1PregapData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -977,7 +1011,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.LeadInData != null) @if(Model.LeadInData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.LeadInData)" asp-route-id="@Model.Id" target="_blank">@Model.LeadInData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.LeadInData)" asp-route-id="@Model.Id" target="_blank">@Model.LeadInData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -989,7 +1024,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.LeadOutData != null) @if(Model.LeadOutData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.LeadOutData)" asp-route-id="@Model.Id" target="_blank">@Model.LeadOutData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.LeadOutData)" asp-route-id="@Model.Id" target="_blank">@Model.LeadOutData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1001,7 +1037,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.C2PointersData != null) @if(Model.C2PointersData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.C2PointersData)" asp-route-id="@Model.Id" target="_blank">@Model.C2PointersData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.C2PointersData)" asp-route-id="@Model.Id" target="_blank">@Model.C2PointersData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1013,7 +1050,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PQSubchannelData != null) @if(Model.PQSubchannelData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PQSubchannelData)" asp-route-id="@Model.Id" target="_blank">@Model.PQSubchannelData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PQSubchannelData)" asp-route-id="@Model.Id" target="_blank">@Model.PQSubchannelData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1025,7 +1063,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.RWSubchannelData != null) @if(Model.RWSubchannelData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.RWSubchannelData)" asp-route-id="@Model.Id" target="_blank">@Model.RWSubchannelData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.RWSubchannelData)" asp-route-id="@Model.Id" target="_blank">@Model.RWSubchannelData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1037,7 +1076,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.CorrectedSubchannelData != null) @if(Model.CorrectedSubchannelData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.CorrectedSubchannelData)" asp-route-id="@Model.Id" target="_blank">@Model.CorrectedSubchannelData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.CorrectedSubchannelData)" asp-route-id="@Model.Id" target="_blank">@Model.CorrectedSubchannelData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1049,7 +1089,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PQSubchannelWithC2Data != null) @if(Model.PQSubchannelWithC2Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PQSubchannelWithC2Data)" asp-route-id="@Model.Id" target="_blank">@Model.PQSubchannelWithC2Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PQSubchannelWithC2Data)" asp-route-id="@Model.Id" target="_blank">@Model.PQSubchannelWithC2Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1061,7 +1102,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.RWSubchannelWithC2Data != null) @if(Model.RWSubchannelWithC2Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.RWSubchannelWithC2Data)" asp-route-id="@Model.Id" target="_blank">@Model.RWSubchannelWithC2Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.RWSubchannelWithC2Data)" asp-route-id="@Model.Id" target="_blank">@Model.RWSubchannelWithC2Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1073,7 +1115,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.CorrectedSubchannelWithC2Data != null) @if(Model.CorrectedSubchannelWithC2Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.CorrectedSubchannelWithC2Data)" asp-route-id="@Model.Id" target="_blank">@Model.CorrectedSubchannelWithC2Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.CorrectedSubchannelWithC2Data)" asp-route-id="@Model.Id" target="_blank">@Model.CorrectedSubchannelWithC2Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1085,7 +1128,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PfiData != null) @if(Model.PfiData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PfiData)" asp-route-id="@Model.Id" target="_blank">@Model.PfiData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PfiData)" asp-route-id="@Model.Id" target="_blank">@Model.PfiData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1097,7 +1141,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.DmiData != null) @if(Model.DmiData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.DmiData)" asp-route-id="@Model.Id" target="_blank">@Model.DmiData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.DmiData)" asp-route-id="@Model.Id" target="_blank">@Model.DmiData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1109,7 +1154,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.CmiData != null) @if(Model.CmiData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.CmiData)" asp-route-id="@Model.Id" target="_blank">@Model.CmiData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.CmiData)" asp-route-id="@Model.Id" target="_blank">@Model.CmiData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1121,7 +1167,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.DvdBcaData != null) @if(Model.DvdBcaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.DvdBcaData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdBcaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.DvdBcaData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdBcaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1133,7 +1180,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.DvdAacsData != null) @if(Model.DvdAacsData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.DvdAacsData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdAacsData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.DvdAacsData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdAacsData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1145,7 +1193,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.DvdDdsData != null) @if(Model.DvdDdsData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.DvdDdsData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdDdsData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.DvdDdsData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdDdsData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1157,7 +1206,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.DvdSaiData != null) @if(Model.DvdSaiData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.DvdSaiData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdSaiData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.DvdSaiData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdSaiData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1169,7 +1219,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PriData != null) @if(Model.PriData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PriData)" asp-route-id="@Model.Id" target="_blank">@Model.PriData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PriData)" asp-route-id="@Model.Id" target="_blank">@Model.PriData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1181,7 +1232,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.EmbossedPfiData != null) @if(Model.EmbossedPfiData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.EmbossedPfiData)" asp-route-id="@Model.Id" target="_blank">@Model.EmbossedPfiData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.EmbossedPfiData)" asp-route-id="@Model.Id" target="_blank">@Model.EmbossedPfiData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1193,7 +1245,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.AdipData != null) @if(Model.AdipData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.AdipData)" asp-route-id="@Model.Id" target="_blank">@Model.AdipData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.AdipData)" asp-route-id="@Model.Id" target="_blank">@Model.AdipData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1205,7 +1258,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.DcbData != null) @if(Model.DcbData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.DcbData)" asp-route-id="@Model.Id" target="_blank">@Model.DcbData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.DcbData)" asp-route-id="@Model.Id" target="_blank">@Model.DcbData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1217,7 +1271,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.HdCmiData != null) @if(Model.HdCmiData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.HdCmiData)" asp-route-id="@Model.Id" target="_blank">@Model.HdCmiData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.HdCmiData)" asp-route-id="@Model.Id" target="_blank">@Model.HdCmiData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1229,7 +1284,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.DvdLayerData != null) @if(Model.DvdLayerData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.DvdLayerData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdLayerData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.DvdLayerData)" asp-route-id="@Model.Id" target="_blank">@Model.DvdLayerData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1241,7 +1297,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.BluBcaData != null) @if(Model.BluBcaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.BluBcaData)" asp-route-id="@Model.Id" target="_blank">@Model.BluBcaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.BluBcaData)" asp-route-id="@Model.Id" target="_blank">@Model.BluBcaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1253,7 +1310,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.BluDdsData != null) @if(Model.BluDdsData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.BluDdsData)" asp-route-id="@Model.Id" target="_blank">@Model.BluDdsData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.BluDdsData)" asp-route-id="@Model.Id" target="_blank">@Model.BluDdsData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1265,7 +1323,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.BluSaiData != null) @if(Model.BluSaiData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.BluSaiData)" asp-route-id="@Model.Id" target="_blank">@Model.BluSaiData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.BluSaiData)" asp-route-id="@Model.Id" target="_blank">@Model.BluSaiData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1277,7 +1336,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.BluDiData != null) @if(Model.BluDiData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.BluDiData)" asp-route-id="@Model.Id" target="_blank">@Model.BluDiData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.BluDiData)" asp-route-id="@Model.Id" target="_blank">@Model.BluDiData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1289,7 +1349,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PlextorReadCddaData != null) @if(Model.PlextorReadCddaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PlextorReadCddaData)" asp-route-id="@Model.Id" target="_blank">@Model.PlextorReadCddaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PlextorReadCddaData)" asp-route-id="@Model.Id" target="_blank">@Model.PlextorReadCddaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1301,7 +1362,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PlextorReadCddaData != null) @if(Model.PlextorReadCddaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PlextorReadCddaData)" asp-route-id="@Model.Id" target="_blank">@Model.PlextorReadCddaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PlextorReadCddaData)" asp-route-id="@Model.Id" target="_blank">@Model.PlextorReadCddaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1313,7 +1375,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PioneerReadCddaData != null) @if(Model.PioneerReadCddaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PioneerReadCddaData)" asp-route-id="@Model.Id" target="_blank">@Model.PioneerReadCddaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PioneerReadCddaData)" asp-route-id="@Model.Id" target="_blank">@Model.PioneerReadCddaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1325,7 +1388,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PioneerReadCddaMsfData != null) @if(Model.PioneerReadCddaMsfData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PioneerReadCddaMsfData)" asp-route-id="@Model.Id" target="_blank">@Model.PioneerReadCddaMsfData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PioneerReadCddaMsfData)" asp-route-id="@Model.Id" target="_blank">@Model.PioneerReadCddaMsfData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1337,7 +1401,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.NecReadCddaData != null) @if(Model.NecReadCddaData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.NecReadCddaData)" asp-route-id="@Model.Id" target="_blank">@Model.NecReadCddaData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.NecReadCddaData)" asp-route-id="@Model.Id" target="_blank">@Model.NecReadCddaData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1349,7 +1414,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.PlextorReadRawDVDData != null) @if(Model.PlextorReadRawDVDData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.PlextorReadRawDVDData)" asp-route-id="@Model.Id" target="_blank">@Model.PlextorReadRawDVDData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.PlextorReadRawDVDData)" asp-route-id="@Model.Id" target="_blank">@Model.PlextorReadRawDVDData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1361,7 +1427,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.HLDTSTReadRawDVDData != null) @if(Model.HLDTSTReadRawDVDData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.HLDTSTReadRawDVDData)" asp-route-id="@Model.Id" target="_blank">@Model.HLDTSTReadRawDVDData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.HLDTSTReadRawDVDData)" asp-route-id="@Model.Id" target="_blank">@Model.HLDTSTReadRawDVDData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1379,7 +1446,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadCdScrambledData != null) @if(Model.ReadCdScrambledData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdScrambledData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdScrambledData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadCdScrambledData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadCdScrambledData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1397,7 +1465,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadF1_06Data != null) @if(Model.ReadF1_06Data != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadF1_06Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadF1_06Data.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadF1_06Data)" asp-route-id="@Model.Id" target="_blank">@Model.ReadF1_06Data.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")
@@ -1415,7 +1484,8 @@
<dd class="col-sm-10"> <dd class="col-sm-10">
@if(Model.ReadF1_06LeadOutData != null) @if(Model.ReadF1_06LeadOutData != null)
{ {
<a asp-action="ViewData" asp-route-data="@nameof(Model.ReadF1_06LeadOutData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadF1_06LeadOutData.Length bytes</a> } <a asp-action="ViewData" asp-route-data="@nameof(Model.ReadF1_06LeadOutData)" asp-route-id="@Model.Id" target="_blank">@Model.ReadF1_06LeadOutData.Length bytes</a>
}
else else
{ {
@("<null>") @("<null>")

View File

@@ -28,12 +28,10 @@ public sealed class BasicAuthMiddleware
if(authHeader?.StartsWith("Basic ") == true) if(authHeader?.StartsWith("Basic ") == true)
{ {
// Get the encoded username and password // Get the encoded username and password
string encodedUsernamePassword = string encodedUsernamePassword = authHeader.Split(' ', 2, StringSplitOptions.RemoveEmptyEntries)[1]?.Trim();
authHeader.Split(' ', 2, StringSplitOptions.RemoveEmptyEntries)[1]?.Trim();
// Decode from Base64 to string // Decode from Base64 to string
string decodedUsernamePassword = string decodedUsernamePassword = Encoding.UTF8.GetString(Convert.FromBase64String(encodedUsernamePassword));
Encoding.UTF8.GetString(Convert.FromBase64String(encodedUsernamePassword));
// Split username and password // Split username and password
string username = decodedUsernamePassword.Split(':', 2)[0]; string username = decodedUsernamePassword.Split(':', 2)[0];

View File

@@ -366,12 +366,12 @@ public sealed class ReportController : Controller
scsiOneValue. scsiOneValue.
Add($"Device has {report.SCSI.ReadCapabilities.Blocks} blocks of {report.SCSI.ReadCapabilities.BlockSize} bytes each"); Add($"Device has {report.SCSI.ReadCapabilities.Blocks} blocks of {report.SCSI.ReadCapabilities.BlockSize} bytes each");
if(report.SCSI.ReadCapabilities.Blocks * report.SCSI.ReadCapabilities.BlockSize / 1024 / if(report.SCSI.ReadCapabilities.Blocks * report.SCSI.ReadCapabilities.BlockSize / 1024 / 1024 >
1024 > 1000000) 1000000)
scsiOneValue. scsiOneValue.
Add($"Device size: {report.SCSI.ReadCapabilities.Blocks * report.SCSI.ReadCapabilities.BlockSize} bytes, {report.SCSI.ReadCapabilities.Blocks * report.SCSI.ReadCapabilities.BlockSize / 1000 / 1000 / 1000 / 1000} Tb, {(double)(report.SCSI.ReadCapabilities.Blocks * report.SCSI.ReadCapabilities.BlockSize) / 1024 / 1024 / 1024 / 1024:F2} TiB"); Add($"Device size: {report.SCSI.ReadCapabilities.Blocks * report.SCSI.ReadCapabilities.BlockSize} bytes, {report.SCSI.ReadCapabilities.Blocks * report.SCSI.ReadCapabilities.BlockSize / 1000 / 1000 / 1000 / 1000} Tb, {(double)(report.SCSI.ReadCapabilities.Blocks * report.SCSI.ReadCapabilities.BlockSize) / 1024 / 1024 / 1024 / 1024:F2} TiB");
else if(report.SCSI.ReadCapabilities.Blocks * report.SCSI.ReadCapabilities.BlockSize / else if(report.SCSI.ReadCapabilities.Blocks * report.SCSI.ReadCapabilities.BlockSize / 1024 /
1024 / 1024 > 1000) 1024 > 1000)
scsiOneValue. scsiOneValue.
Add($"Device size: {report.SCSI.ReadCapabilities.Blocks * report.SCSI.ReadCapabilities.BlockSize} bytes, {report.SCSI.ReadCapabilities.Blocks * report.SCSI.ReadCapabilities.BlockSize / 1000 / 1000 / 1000} Gb, {(double)(report.SCSI.ReadCapabilities.Blocks * report.SCSI.ReadCapabilities.BlockSize) / 1024 / 1024 / 1024:F2} GiB"); Add($"Device size: {report.SCSI.ReadCapabilities.Blocks * report.SCSI.ReadCapabilities.BlockSize} bytes, {report.SCSI.ReadCapabilities.Blocks * report.SCSI.ReadCapabilities.BlockSize / 1000 / 1000 / 1000} Gb, {(double)(report.SCSI.ReadCapabilities.Blocks * report.SCSI.ReadCapabilities.BlockSize) / 1024 / 1024 / 1024:F2} GiB");
else else

View File

@@ -80,8 +80,7 @@ public sealed class StatsController : Controller
StatsConverter.Convert(statistics); StatsConverter.Convert(statistics);
System.IO.File. System.IO.File.Delete(Path.Combine(_env.ContentRootPath ?? throw new InvalidOperationException(),
Delete(Path.Combine(_env.ContentRootPath ?? throw new InvalidOperationException(),
"Statistics", "Statistics.xml")); "Statistics", "Statistics.xml"));
} }
catch(XmlException) catch(XmlException)
@@ -142,8 +141,8 @@ public sealed class StatsController : Controller
try try
{ {
(string type, string subType) mediaType = (string type, string subType) mediaType =
MediaType.MediaTypeToString((CommonTypes.MediaType) MediaType.MediaTypeToString((CommonTypes.MediaType)Enum.Parse(typeof(CommonTypes.MediaType),
Enum.Parse(typeof(CommonTypes.MediaType), nvs.Type)); nvs.Type));
if(nvs.Real) if(nvs.Real)
realMedia.Add(new MediaItem realMedia.Add(new MediaItem
@@ -183,8 +182,8 @@ public sealed class StatsController : Controller
ToList(); ToList();
if(virtualMedia.Count > 0) if(virtualMedia.Count > 0)
ViewBag.repVirtualMedia = virtualMedia.OrderBy(media => media.Type). ViewBag.repVirtualMedia = virtualMedia.OrderBy(media => media.Type).ThenBy(media => media.SubType).
ThenBy(media => media.SubType).ToList(); ToList();
} }
if(_ctx.DeviceStats.Any()) if(_ctx.DeviceStats.Any())
@@ -244,8 +243,7 @@ public sealed class StatsController : Controller
} }
ViewBag.repDevices = devices.OrderBy(device => device.Manufacturer).ThenBy(device => device.Model). ViewBag.repDevices = devices.OrderBy(device => device.Manufacturer).ThenBy(device => device.Model).
ThenBy(device => device.Revision).ThenBy(device => device.Bus). ThenBy(device => device.Revision).ThenBy(device => device.Bus).ToList();
ToList();
} }
} }
catch(Exception) catch(Exception)
@@ -330,13 +328,13 @@ public sealed class StatsController : Controller
{ {
string[][] result = string[][] result =
{ {
_ctx.OperatingSystems.Where(o => o.Name == PlatformID.MacOSX.ToString()). _ctx.OperatingSystems.Where(o => o.Name == PlatformID.MacOSX.ToString()).OrderByDescending(o => o.Count).
OrderByDescending(o => o.Count).Take(10). Take(10).
Select(x => Select(x =>
$"{DetectOS.GetPlatformName(PlatformID.MacOSX, x.Version)}{(string.IsNullOrEmpty(x.Version) ? "" : " ")}{x.Version}"). $"{DetectOS.GetPlatformName(PlatformID.MacOSX, x.Version)}{(string.IsNullOrEmpty(x.Version) ? "" : " ")}{x.Version}").
ToArray(), ToArray(),
_ctx.OperatingSystems.Where(o => o.Name == PlatformID.MacOSX.ToString()). _ctx.OperatingSystems.Where(o => o.Name == PlatformID.MacOSX.ToString()).OrderByDescending(o => o.Count).
OrderByDescending(o => o.Count).Take(10).Select(x => x.Count.ToString()).ToArray() Take(10).Select(x => x.Count.ToString()).ToArray()
}; };
if(result[0].Length < 10) if(result[0].Length < 10)
@@ -354,13 +352,13 @@ public sealed class StatsController : Controller
{ {
string[][] result = string[][] result =
{ {
_ctx.OperatingSystems.Where(o => o.Name == PlatformID.Win32NT.ToString()). _ctx.OperatingSystems.Where(o => o.Name == PlatformID.Win32NT.ToString()).OrderByDescending(o => o.Count).
OrderByDescending(o => o.Count).Take(10). Take(10).
Select(x => Select(x =>
$"{DetectOS.GetPlatformName(PlatformID.Win32NT, x.Version)}{(string.IsNullOrEmpty(x.Version) ? "" : " ")}{x.Version}"). $"{DetectOS.GetPlatformName(PlatformID.Win32NT, x.Version)}{(string.IsNullOrEmpty(x.Version) ? "" : " ")}{x.Version}").
ToArray(), ToArray(),
_ctx.OperatingSystems.Where(o => o.Name == PlatformID.Win32NT.ToString()). _ctx.OperatingSystems.Where(o => o.Name == PlatformID.Win32NT.ToString()).OrderByDescending(o => o.Count).
OrderByDescending(o => o.Count).Take(10).Select(x => x.Count.ToString()).ToArray() Take(10).Select(x => x.Count.ToString()).ToArray()
}; };
if(result[0].Length < 10) if(result[0].Length < 10)
@@ -368,8 +366,7 @@ public sealed class StatsController : Controller
result[0][9] = "Other"; result[0][9] = "Other";
result[1][9] = result[1][9] = (_ctx.OperatingSystems.Where(o => o.Name == PlatformID.Win32NT.ToString()).Sum(o => o.Count) -
(_ctx.OperatingSystems.Where(o => o.Name == PlatformID.Win32NT.ToString()).Sum(o => o.Count) -
result[1].Take(9).Sum(long.Parse)).ToString(); result[1].Take(9).Sum(long.Parse)).ToString();
return Json(result); return Json(result);
@@ -514,8 +511,8 @@ public sealed class StatsController : Controller
result[0][9] = "Other"; result[0][9] = "Other";
result[1][9] = (_ctx.Medias.Where(o => !o.Real).Sum(o => o.Count) - result[1].Take(9).Sum(long.Parse)). result[1][9] =
ToString(); (_ctx.Medias.Where(o => !o.Real).Sum(o => o.Count) - result[1].Take(9).Sum(long.Parse)).ToString();
return Json(result); return Json(result);
} }

View File

@@ -75,8 +75,7 @@ public sealed class UploadReportController : Controller
var xs = new XmlSerializer(newReport.GetType()); var xs = new XmlSerializer(newReport.GetType());
newReport = newReport =
(DeviceReport) (DeviceReport)xs.Deserialize(new StringReader(await new StreamReader(request.Body).ReadToEndAsync()));
xs.Deserialize(new StringReader(await new StreamReader(request.Body).ReadToEndAsync()));
if(newReport == null) if(newReport == null)
{ {
@@ -118,9 +117,7 @@ public sealed class UploadReportController : Controller
if(newUploadedReport.ATA?.ReadCapabilities?.CHS != null) if(newUploadedReport.ATA?.ReadCapabilities?.CHS != null)
{ {
Chs existingChs = Chs existingChs =
_ctx.Chs.FirstOrDefault(c => _ctx.Chs.FirstOrDefault(c => c.Cylinders == newUploadedReport.ATA.ReadCapabilities.CHS.Cylinders &&
c.Cylinders == newUploadedReport.ATA.ReadCapabilities.CHS.
Cylinders &&
c.Heads == newUploadedReport.ATA.ReadCapabilities.CHS.Heads && c.Heads == newUploadedReport.ATA.ReadCapabilities.CHS.Heads &&
c.Sectors == newUploadedReport.ATA.ReadCapabilities.CHS.Sectors); c.Sectors == newUploadedReport.ATA.ReadCapabilities.CHS.Sectors);
@@ -134,9 +131,8 @@ public sealed class UploadReportController : Controller
_ctx.Chs.FirstOrDefault(c => _ctx.Chs.FirstOrDefault(c =>
c.Cylinders == newUploadedReport.ATA.ReadCapabilities.CurrentCHS. c.Cylinders == newUploadedReport.ATA.ReadCapabilities.CurrentCHS.
Cylinders && Cylinders &&
c.Heads == newUploadedReport.ATA.ReadCapabilities.CurrentCHS. c.Heads == newUploadedReport.ATA.ReadCapabilities.CurrentCHS.Heads &&
Heads && c.Sectors == newUploadedReport.ATA.ReadCapabilities. c.Sectors == newUploadedReport.ATA.ReadCapabilities.CurrentCHS.Sectors);
CurrentCHS.Sectors);
if(existingChs != null) if(existingChs != null)
newUploadedReport.ATA.ReadCapabilities.CurrentCHS = existingChs; newUploadedReport.ATA.ReadCapabilities.CurrentCHS = existingChs;
@@ -161,8 +157,7 @@ public sealed class UploadReportController : Controller
{ {
Chs existingChs = Chs existingChs =
_ctx.Chs.FirstOrDefault(c => c.Cylinders == media.CHS.Cylinders && _ctx.Chs.FirstOrDefault(c => c.Cylinders == media.CHS.Cylinders &&
c.Heads == media.CHS.Heads && c.Heads == media.CHS.Heads && c.Sectors == media.CHS.Sectors);
c.Sectors == media.CHS.Sectors);
if(existingChs != null) if(existingChs != null)
media.CHS = existingChs; media.CHS = existingChs;
@@ -279,9 +274,7 @@ public sealed class UploadReportController : Controller
if(newUploadedReport.ATA?.ReadCapabilities?.CHS != null) if(newUploadedReport.ATA?.ReadCapabilities?.CHS != null)
{ {
Chs existingChs = Chs existingChs =
_ctx.Chs.FirstOrDefault(c => _ctx.Chs.FirstOrDefault(c => c.Cylinders == newUploadedReport.ATA.ReadCapabilities.CHS.Cylinders &&
c.Cylinders == newUploadedReport.ATA.ReadCapabilities.CHS.
Cylinders &&
c.Heads == newUploadedReport.ATA.ReadCapabilities.CHS.Heads && c.Heads == newUploadedReport.ATA.ReadCapabilities.CHS.Heads &&
c.Sectors == newUploadedReport.ATA.ReadCapabilities.CHS.Sectors); c.Sectors == newUploadedReport.ATA.ReadCapabilities.CHS.Sectors);
@@ -295,9 +288,8 @@ public sealed class UploadReportController : Controller
_ctx.Chs.FirstOrDefault(c => _ctx.Chs.FirstOrDefault(c =>
c.Cylinders == newUploadedReport.ATA.ReadCapabilities.CurrentCHS. c.Cylinders == newUploadedReport.ATA.ReadCapabilities.CurrentCHS.
Cylinders && Cylinders &&
c.Heads == newUploadedReport.ATA.ReadCapabilities.CurrentCHS. c.Heads == newUploadedReport.ATA.ReadCapabilities.CurrentCHS.Heads &&
Heads && c.Sectors == newUploadedReport.ATA.ReadCapabilities. c.Sectors == newUploadedReport.ATA.ReadCapabilities.CurrentCHS.Sectors);
CurrentCHS.Sectors);
if(existingChs != null) if(existingChs != null)
newUploadedReport.ATA.ReadCapabilities.CurrentCHS = existingChs; newUploadedReport.ATA.ReadCapabilities.CurrentCHS = existingChs;
@@ -322,8 +314,7 @@ public sealed class UploadReportController : Controller
{ {
Chs existingChs = Chs existingChs =
_ctx.Chs.FirstOrDefault(c => c.Cylinders == media.CHS.Cylinders && _ctx.Chs.FirstOrDefault(c => c.Cylinders == media.CHS.Cylinders &&
c.Heads == media.CHS.Heads && c.Heads == media.CHS.Heads && c.Sectors == media.CHS.Sectors);
c.Sectors == media.CHS.Sectors);
if(existingChs != null) if(existingChs != null)
media.CHS = existingChs; media.CHS = existingChs;

View File

@@ -41,8 +41,8 @@ using Newtonsoft.Json;
using OperatingSystem = Aaru.Server.Models.OperatingSystem; using OperatingSystem = Aaru.Server.Models.OperatingSystem;
using Version = Aaru.Server.Models.Version; using Version = Aaru.Server.Models.Version;
namespace Aaru.Server.Controllers namespace Aaru.Server.Controllers;
{
public sealed class UploadStatsController : Controller public sealed class UploadStatsController : Controller
{ {
readonly AaruServerContext _ctx; readonly AaruServerContext _ctx;
@@ -67,8 +67,7 @@ namespace Aaru.Server.Controllers
var xs = new XmlSerializer(newStats.GetType()); var xs = new XmlSerializer(newStats.GetType());
newStats = newStats = (Stats)xs.Deserialize(new StringReader(await new StreamReader(request.Body).ReadToEndAsync()));
(Stats)xs.Deserialize(new StringReader(await new StreamReader(request.Body).ReadToEndAsync()));
if(newStats == null) if(newStats == null)
{ {
@@ -130,7 +129,7 @@ namespace Aaru.Server.Controllers
Command existing = _ctx.Commands.FirstOrDefault(c => c.Name == nvs.name); Command existing = _ctx.Commands.FirstOrDefault(c => c.Name == nvs.name);
if(existing == null) if(existing == null)
await _ctx.Commands.AddAsync(new() await _ctx.Commands.AddAsync(new Command
{ {
Name = nvs.name, Name = nvs.name,
Count = nvs.Value Count = nvs.Value
@@ -145,7 +144,7 @@ namespace Aaru.Server.Controllers
Version existing = _ctx.Versions.FirstOrDefault(c => c.Name == nvs.name); Version existing = _ctx.Versions.FirstOrDefault(c => c.Name == nvs.name);
if(existing == null) if(existing == null)
await _ctx.Versions.AddAsync(new() await _ctx.Versions.AddAsync(new Version
{ {
Name = nvs.name, Name = nvs.name,
Count = nvs.Value Count = nvs.Value
@@ -160,7 +159,7 @@ namespace Aaru.Server.Controllers
Filesystem existing = _ctx.Filesystems.FirstOrDefault(c => c.Name == nvs.name); Filesystem existing = _ctx.Filesystems.FirstOrDefault(c => c.Name == nvs.name);
if(existing == null) if(existing == null)
await _ctx.Filesystems.AddAsync(new() await _ctx.Filesystems.AddAsync(new Filesystem
{ {
Name = nvs.name, Name = nvs.name,
Count = nvs.Value Count = nvs.Value
@@ -175,7 +174,7 @@ namespace Aaru.Server.Controllers
Partition existing = _ctx.Partitions.FirstOrDefault(c => c.Name == nvs.name); Partition existing = _ctx.Partitions.FirstOrDefault(c => c.Name == nvs.name);
if(existing == null) if(existing == null)
await _ctx.Partitions.AddAsync(new() await _ctx.Partitions.AddAsync(new Partition
{ {
Name = nvs.name, Name = nvs.name,
Count = nvs.Value Count = nvs.Value
@@ -190,7 +189,7 @@ namespace Aaru.Server.Controllers
MediaFormat existing = _ctx.MediaFormats.FirstOrDefault(c => c.Name == nvs.name); MediaFormat existing = _ctx.MediaFormats.FirstOrDefault(c => c.Name == nvs.name);
if(existing == null) if(existing == null)
await _ctx.MediaFormats.AddAsync(new() await _ctx.MediaFormats.AddAsync(new MediaFormat
{ {
Name = nvs.name, Name = nvs.name,
Count = nvs.Value Count = nvs.Value
@@ -205,7 +204,7 @@ namespace Aaru.Server.Controllers
Filter existing = _ctx.Filters.FirstOrDefault(c => c.Name == nvs.name); Filter existing = _ctx.Filters.FirstOrDefault(c => c.Name == nvs.name);
if(existing == null) if(existing == null)
await _ctx.Filters.AddAsync(new() await _ctx.Filters.AddAsync(new Filter
{ {
Name = nvs.name, Name = nvs.name,
Count = nvs.Value Count = nvs.Value
@@ -222,7 +221,7 @@ namespace Aaru.Server.Controllers
c.Version == operatingSystem.version); c.Version == operatingSystem.version);
if(existing == null) if(existing == null)
await _ctx.OperatingSystems.AddAsync(new() await _ctx.OperatingSystems.AddAsync(new OperatingSystem
{ {
Name = operatingSystem.name, Name = operatingSystem.name,
Version = operatingSystem.version, Version = operatingSystem.version,
@@ -238,7 +237,7 @@ namespace Aaru.Server.Controllers
Media existing = _ctx.Medias.FirstOrDefault(c => c.Type == media.type && c.Real == media.real); Media existing = _ctx.Medias.FirstOrDefault(c => c.Type == media.type && c.Real == media.real);
if(existing == null) if(existing == null)
await _ctx.Medias.AddAsync(new() await _ctx.Medias.AddAsync(new Media
{ {
Type = media.type, Type = media.type,
Real = media.real, Real = media.real,
@@ -252,11 +251,10 @@ namespace Aaru.Server.Controllers
foreach(DeviceStats device in from device in newstats.Devices let existing = foreach(DeviceStats device in from device in newstats.Devices let existing =
_ctx.DeviceStats.FirstOrDefault(c => c.Bus == device.Bus && _ctx.DeviceStats.FirstOrDefault(c => c.Bus == device.Bus &&
c.Manufacturer == device.Manufacturer && c.Manufacturer == device.Manufacturer &&
c.Model == device.Model && c.Model == device.Model && c.Revision == device.Revision)
c.Revision == device.Revision) where existing == null where existing == null select device)
select device)
{ {
await _ctx.DeviceStats.AddAsync(new() await _ctx.DeviceStats.AddAsync(new DeviceStat
{ {
Bus = device.Bus, Bus = device.Bus,
Manufacturer = device.Manufacturer, Manufacturer = device.Manufacturer,
@@ -273,7 +271,7 @@ namespace Aaru.Server.Controllers
c.Version == application.version); c.Version == application.version);
if(existing == null) if(existing == null)
await _ctx.RemoteApplications.AddAsync(new() await _ctx.RemoteApplications.AddAsync(new RemoteApplication
{ {
Name = application.name, Name = application.name,
Version = application.version, Version = application.version,
@@ -289,7 +287,7 @@ namespace Aaru.Server.Controllers
RemoteArchitecture existing = _ctx.RemoteArchitectures.FirstOrDefault(c => c.Name == nvs.name); RemoteArchitecture existing = _ctx.RemoteArchitectures.FirstOrDefault(c => c.Name == nvs.name);
if(existing == null) if(existing == null)
await _ctx.RemoteArchitectures.AddAsync(new() await _ctx.RemoteArchitectures.AddAsync(new RemoteArchitecture
{ {
Name = nvs.name, Name = nvs.name,
Count = nvs.Value Count = nvs.Value
@@ -306,7 +304,7 @@ namespace Aaru.Server.Controllers
c.Version == remoteOperatingSystem.version); c.Version == remoteOperatingSystem.version);
if(existing == null) if(existing == null)
await _ctx.RemoteOperatingSystems.AddAsync(new() await _ctx.RemoteOperatingSystems.AddAsync(new RemoteOperatingSystem
{ {
Name = remoteOperatingSystem.name, Name = remoteOperatingSystem.name,
Version = remoteOperatingSystem.version, Version = remoteOperatingSystem.version,
@@ -336,4 +334,3 @@ namespace Aaru.Server.Controllers
} }
} }
} }
}

View File

@@ -465,8 +465,7 @@ public static class Ata
break; break;
default: default:
ataTwoValue.Add("Unknown transport type", ataTwoValue.Add("Unknown transport type", $"0x{(ataIdentify.TransportMajorVersion & 0xF000) >> 12:X1}");
$"0x{(ataIdentify.TransportMajorVersion & 0xF000) >> 12:X1}");
break; break;
} }
@@ -652,8 +651,7 @@ public static class Ata
if(ataIdentify.GeneralConfiguration.HasFlag(Identify.GeneralConfigurationBit.DataStrobeOffset)) if(ataIdentify.GeneralConfiguration.HasFlag(Identify.GeneralConfigurationBit.DataStrobeOffset))
ataOneValue.Add("Data strobe offset option is available"); ataOneValue.Add("Data strobe offset option is available");
if(ataIdentify.GeneralConfiguration.HasFlag(Identify.GeneralConfigurationBit. if(ataIdentify.GeneralConfiguration.HasFlag(Identify.GeneralConfigurationBit.RotationalSpeedTolerance))
RotationalSpeedTolerance))
ataOneValue.Add("Rotational speed tolerance is higher than 0,5%"); ataOneValue.Add("Rotational speed tolerance is higher than 0,5%");
if(ataIdentify.GeneralConfiguration.HasFlag(Identify.GeneralConfigurationBit.SpindleControl)) if(ataIdentify.GeneralConfiguration.HasFlag(Identify.GeneralConfigurationBit.SpindleControl))
@@ -1023,8 +1021,7 @@ public static class Ata
if(ataIdentify.MinMDMACycleTime != 0 && if(ataIdentify.MinMDMACycleTime != 0 &&
ataIdentify.RecMDMACycleTime != 0) ataIdentify.RecMDMACycleTime != 0)
ataOneValue. ataOneValue.Add($"At minimum {ataIdentify.MinMDMACycleTime} ns. transfer cycle time per word in MDMA, " +
Add($"At minimum {ataIdentify.MinMDMACycleTime} ns. transfer cycle time per word in MDMA, " +
$"{ataIdentify.RecMDMACycleTime} ns. recommended"); $"{ataIdentify.RecMDMACycleTime} ns. recommended");
if(ataIdentify.MinPIOCycleTimeNoFlow != 0) if(ataIdentify.MinPIOCycleTimeNoFlow != 0)
@@ -1033,8 +1030,7 @@ public static class Ata
"without flow control"); "without flow control");
if(ataIdentify.MinPIOCycleTimeFlow != 0) if(ataIdentify.MinPIOCycleTimeFlow != 0)
ataOneValue. ataOneValue.Add($"At minimum {ataIdentify.MinPIOCycleTimeFlow} ns. transfer cycle time per word in PIO, " +
Add($"At minimum {ataIdentify.MinPIOCycleTimeFlow} ns. transfer cycle time per word in PIO, " +
"with IORDY flow control"); "with IORDY flow control");
if(ataIdentify.MaxQueueDepth != 0) if(ataIdentify.MaxQueueDepth != 0)
@@ -1043,12 +1039,10 @@ public static class Ata
if(atapi) if(atapi)
{ {
if(ataIdentify.PacketBusRelease != 0) if(ataIdentify.PacketBusRelease != 0)
ataOneValue. ataOneValue.Add($"{ataIdentify.PacketBusRelease} ns. typical to release bus from receipt of PACKET");
Add($"{ataIdentify.PacketBusRelease} ns. typical to release bus from receipt of PACKET");
if(ataIdentify.ServiceBusyClear != 0) if(ataIdentify.ServiceBusyClear != 0)
ataOneValue. ataOneValue.Add($"{ataIdentify.ServiceBusyClear} ns. typical to clear BSY bit from receipt of SERVICE");
Add($"{ataIdentify.ServiceBusyClear} ns. typical to clear BSY bit from receipt of SERVICE");
} }
if((ataIdentify.TransportMajorVersion & 0xF000) >> 12 == 0x1 || if((ataIdentify.TransportMajorVersion & 0xF000) >> 12 == 0x1 ||
@@ -1181,8 +1175,7 @@ public static class Ata
if(ataIdentify.CommandSet.HasFlag(Identify.CommandSetBit.HPA)) if(ataIdentify.CommandSet.HasFlag(Identify.CommandSetBit.HPA))
ataOneValue.Add(ataIdentify.EnabledCommandSet.HasFlag(Identify.CommandSetBit.HPA) ataOneValue.Add(ataIdentify.EnabledCommandSet.HasFlag(Identify.CommandSetBit.HPA)
? "Host Protected Area is supported and enabled" ? "Host Protected Area is supported and enabled" : "Host Protected Area is supported");
: "Host Protected Area is supported");
if(ataIdentify.CommandSet.HasFlag(Identify.CommandSetBit.DeviceReset)) if(ataIdentify.CommandSet.HasFlag(Identify.CommandSetBit.DeviceReset))
ataOneValue.Add(ataIdentify.EnabledCommandSet.HasFlag(Identify.CommandSetBit.DeviceReset) ataOneValue.Add(ataIdentify.EnabledCommandSet.HasFlag(Identify.CommandSetBit.DeviceReset)
@@ -1269,8 +1262,7 @@ public static class Ata
: "Power-up in standby is supported"); : "Power-up in standby is supported");
if(ataIdentify.CommandSet2.HasFlag(Identify.CommandSetBit2.RemovableNotification)) if(ataIdentify.CommandSet2.HasFlag(Identify.CommandSetBit2.RemovableNotification))
ataOneValue.Add(ataIdentify.EnabledCommandSet2.HasFlag(Identify.CommandSetBit2. ataOneValue.Add(ataIdentify.EnabledCommandSet2.HasFlag(Identify.CommandSetBit2.RemovableNotification)
RemovableNotification)
? "Removable Media Status Notification is supported and enabled" ? "Removable Media Status Notification is supported and enabled"
: "Removable Media Status Notification is supported"); : "Removable Media Status Notification is supported");
@@ -1405,8 +1397,7 @@ public static class Ata
if(ataIdentify.CommandSet4.HasFlag(Identify.CommandSetBit4.WRV)) if(ataIdentify.CommandSet4.HasFlag(Identify.CommandSetBit4.WRV))
{ {
ataOneValue.Add(ataIdentify.EnabledCommandSet4.HasFlag(Identify.CommandSetBit4.WRV) ataOneValue.Add(ataIdentify.EnabledCommandSet4.HasFlag(Identify.CommandSetBit4.WRV)
? "Write/Read/Verify is supported and enabled" ? "Write/Read/Verify is supported and enabled" : "Write/Read/Verify is supported");
: "Write/Read/Verify is supported");
ataOneValue.Add($"{ataIdentify.WRVSectorCountMode2} sectors for Write/Read/Verify mode 2"); ataOneValue.Add($"{ataIdentify.WRVSectorCountMode2} sectors for Write/Read/Verify mode 2");
ataOneValue.Add($"{ataIdentify.WRVSectorCountMode3} sectors for Write/Read/Verify mode 3"); ataOneValue.Add($"{ataIdentify.WRVSectorCountMode3} sectors for Write/Read/Verify mode 3");
@@ -1528,14 +1519,12 @@ public static class Ata
: "DMA Setup auto-activation is supported"); : "DMA Setup auto-activation is supported");
if(ataIdentify.SATAFeatures.HasFlag(Identify.SATAFeaturesBit.InitPowerMgmt)) if(ataIdentify.SATAFeatures.HasFlag(Identify.SATAFeaturesBit.InitPowerMgmt))
ataOneValue.Add(ataIdentify.EnabledSATAFeatures.HasFlag(Identify.SATAFeaturesBit. ataOneValue.Add(ataIdentify.EnabledSATAFeatures.HasFlag(Identify.SATAFeaturesBit.InitPowerMgmt)
InitPowerMgmt)
? "Device-initiated power management is supported and enabled" ? "Device-initiated power management is supported and enabled"
: "Device-initiated power management is supported"); : "Device-initiated power management is supported");
if(ataIdentify.SATAFeatures.HasFlag(Identify.SATAFeaturesBit.InOrderData)) if(ataIdentify.SATAFeatures.HasFlag(Identify.SATAFeaturesBit.InOrderData))
ataOneValue.Add(ataIdentify.EnabledSATAFeatures.HasFlag(Identify.SATAFeaturesBit. ataOneValue.Add(ataIdentify.EnabledSATAFeatures.HasFlag(Identify.SATAFeaturesBit.InOrderData)
InOrderData)
? "In-order data delivery is supported and enabled" ? "In-order data delivery is supported and enabled"
: "In-order data delivery is supported"); : "In-order data delivery is supported");
@@ -1687,16 +1676,14 @@ public static class Ata
} }
if(ataReport.ReadCapabilities.PhysicalBlockSize != null) if(ataReport.ReadCapabilities.PhysicalBlockSize != null)
ataTwoValue.Add("Physical sector size", ataTwoValue.Add("Physical sector size", $"{ataReport.ReadCapabilities.PhysicalBlockSize} bytes");
$"{ataReport.ReadCapabilities.PhysicalBlockSize} bytes");
if(ataReport.ReadCapabilities.LongBlockSize != null) if(ataReport.ReadCapabilities.LongBlockSize != null)
ataTwoValue.Add("READ LONG sector size", $"{ataReport.ReadCapabilities.LongBlockSize} bytes"); ataTwoValue.Add("READ LONG sector size", $"{ataReport.ReadCapabilities.LongBlockSize} bytes");
if(ataReport.ReadCapabilities.BlockSize != null && if(ataReport.ReadCapabilities.BlockSize != null &&
ataReport.ReadCapabilities.PhysicalBlockSize != null && ataReport.ReadCapabilities.PhysicalBlockSize != null &&
ataReport.ReadCapabilities.BlockSize.Value != ataReport.ReadCapabilities.BlockSize.Value != ataReport.ReadCapabilities.PhysicalBlockSize.Value &&
ataReport.ReadCapabilities.PhysicalBlockSize.Value &&
(ataReport.ReadCapabilities.LogicalAlignment & 0x8000) == 0x0000 && (ataReport.ReadCapabilities.LogicalAlignment & 0x8000) == 0x0000 &&
(ataReport.ReadCapabilities.LogicalAlignment & 0x4000) == 0x4000) (ataReport.ReadCapabilities.LogicalAlignment & 0x4000) == 0x4000)
ataOneValue. ataOneValue.
@@ -1727,8 +1714,7 @@ public static class Ata
else if(ataReport.ReadCapabilities.CHS != null) else if(ataReport.ReadCapabilities.CHS != null)
{ {
int currentSectors = ataReport.ReadCapabilities.CHS.Cylinders * int currentSectors = ataReport.ReadCapabilities.CHS.Cylinders *
ataReport.ReadCapabilities.CHS.Heads * ataReport.ReadCapabilities.CHS.Heads * ataReport.ReadCapabilities.CHS.Sectors;
ataReport.ReadCapabilities.CHS.Sectors;
ataTwoValue.Add("Cylinders", $"{ataReport.ReadCapabilities.CHS.Cylinders}"); ataTwoValue.Add("Cylinders", $"{ataReport.ReadCapabilities.CHS.Cylinders}");
ataTwoValue.Add("Heads", $"{ataReport.ReadCapabilities.CHS.Heads}"); ataTwoValue.Add("Heads", $"{ataReport.ReadCapabilities.CHS.Heads}");
@@ -1774,12 +1760,10 @@ public static class Ata
if(ata1 || cfa) if(ata1 || cfa)
{ {
if(ataReport.ReadCapabilities.UnformattedBPT > 0) if(ataReport.ReadCapabilities.UnformattedBPT > 0)
ataTwoValue.Add("Bytes per unformatted track", ataTwoValue.Add("Bytes per unformatted track", $"{ataReport.ReadCapabilities.UnformattedBPT}");
$"{ataReport.ReadCapabilities.UnformattedBPT}");
if(ataReport.ReadCapabilities.UnformattedBPS > 0) if(ataReport.ReadCapabilities.UnformattedBPS > 0)
ataTwoValue.Add("Bytes per unformatted sector", ataTwoValue.Add("Bytes per unformatted sector", $"{ataReport.ReadCapabilities.UnformattedBPS}");
$"{ataReport.ReadCapabilities.UnformattedBPS}");
} }
} }

View File

@@ -2024,8 +2024,7 @@ internal static class ScsiInquiry
break; break;
case 0x1622: case 0x1622:
scsiOneValue. scsiOneValue.Add("Device complies with ATA/ATAPI-8 ATA8-AST Serial Transport (no version claimed)");
Add("Device complies with ATA/ATAPI-8 ATA8-AST Serial Transport (no version claimed)");
break; break;
case 0x1623: case 0x1623:
@@ -2038,8 +2037,7 @@ internal static class ScsiInquiry
break; break;
case 0x162A: case 0x162A:
scsiOneValue. scsiOneValue.Add("Device complies with ATA/ATAPI-8 ATA8-ACS ANSI INCITS 452-2009 w/ Amendment 1");
Add("Device complies with ATA/ATAPI-8 ATA8-ACS ANSI INCITS 452-2009 w/ Amendment 1");
break; break;
case 0x1728: case 0x1728:
@@ -2051,8 +2049,7 @@ internal static class ScsiInquiry
break; break;
case 0x1730: case 0x1730:
scsiOneValue. scsiOneValue.Add("Device complies with USB Mass Storage Class Bulk-Only Transport, Revision 1.0");
Add("Device complies with USB Mass Storage Class Bulk-Only Transport, Revision 1.0");
break; break;
case 0x1740: case 0x1740:

View File

@@ -299,8 +299,7 @@ public static class ScsiMmcFeatures
break; break;
default: default:
mmcOneValue. mmcOneValue.Add($"Drive uses an unknown interface with code {(uint)ftr.PhysicalInterfaceStandard}");
Add($"Drive uses an unknown interface with code {(uint)ftr.PhysicalInterfaceStandard}");
break; break;
} }

View File

@@ -117,8 +117,7 @@ public static class ScsiMmcMode
} }
else else
{ {
mmcOneValue.Add(mode.LockState mmcOneValue.Add(mode.LockState ? "Drive is locked, media cannot be ejected, but if empty, can be inserted"
? "Drive is locked, media cannot be ejected, but if empty, can be inserted"
: "Drive is not locked, media can be ejected and inserted"); : "Drive is not locked, media can be ejected and inserted");
} }
@@ -194,8 +193,8 @@ public static class ScsiMmcMode
} }
if(mode.WriteSpeedPerformanceDescriptors != null) if(mode.WriteSpeedPerformanceDescriptors != null)
foreach(ModePage_2A_WriteDescriptor descriptor in foreach(ModePage_2A_WriteDescriptor descriptor in mode.WriteSpeedPerformanceDescriptors.Where(descriptor =>
mode.WriteSpeedPerformanceDescriptors.Where(descriptor => descriptor.WriteSpeed > 0)) descriptor.WriteSpeed > 0))
if(descriptor.RotationControl == 0) if(descriptor.RotationControl == 0)
mmcOneValue.Add($"Drive supports writing at {descriptor.WriteSpeed} Kbyte/sec. in CLV mode"); mmcOneValue.Add($"Drive supports writing at {descriptor.WriteSpeed} Kbyte/sec. in CLV mode");
else if(descriptor.RotationControl == 1) else if(descriptor.RotationControl == 1)

View File

@@ -409,8 +409,7 @@ public static class ScsiModeSense
} }
default: default:
{ {
modePages. modePages.Add(page.subpage != 0 ? $"MODE page {page.page:X2}h subpage {page.subpage:X2}h" : $"MODE page {page.page:X2}h",
Add(page.subpage != 0 ? $"MODE page {page.page:X2}h subpage {page.subpage:X2}h" : $"MODE page {page.page:X2}h",
"Unknown mode page"); "Unknown mode page");
} }

View File

@@ -47,7 +47,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "fs-info"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "fs-info");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.Analyze, Count = newStats.Commands.Analyze,
Name = "fs-info" Name = "fs-info"
@@ -61,7 +61,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "benchmark"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "benchmark");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.Benchmark, Count = newStats.Commands.Benchmark,
Name = "benchmark" Name = "benchmark"
@@ -75,7 +75,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "checksum"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "checksum");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.Checksum, Count = newStats.Commands.Checksum,
Name = "checksum" Name = "checksum"
@@ -89,7 +89,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "compare"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "compare");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.Compare, Count = newStats.Commands.Compare,
Name = "compare" Name = "compare"
@@ -103,7 +103,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "create-sidecar"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "create-sidecar");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.CreateSidecar, Count = newStats.Commands.CreateSidecar,
Name = "create-sidecar" Name = "create-sidecar"
@@ -117,7 +117,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "decode"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "decode");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.Decode, Count = newStats.Commands.Decode,
Name = "decode" Name = "decode"
@@ -131,7 +131,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "device-info"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "device-info");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.DeviceInfo, Count = newStats.Commands.DeviceInfo,
Name = "device-info" Name = "device-info"
@@ -145,7 +145,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "device-report"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "device-report");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.DeviceReport, Count = newStats.Commands.DeviceReport,
Name = "device-report" Name = "device-report"
@@ -159,7 +159,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "dump-media"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "dump-media");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.DumpMedia, Count = newStats.Commands.DumpMedia,
Name = "dump-media" Name = "dump-media"
@@ -173,7 +173,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "entropy"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "entropy");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.Entropy, Count = newStats.Commands.Entropy,
Name = "entropy" Name = "entropy"
@@ -187,7 +187,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "formats"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "formats");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.Formats, Count = newStats.Commands.Formats,
Name = "formats" Name = "formats"
@@ -201,7 +201,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "media-info"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "media-info");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.MediaInfo, Count = newStats.Commands.MediaInfo,
Name = "media-info" Name = "media-info"
@@ -215,7 +215,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "media-scan"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "media-scan");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.MediaScan, Count = newStats.Commands.MediaScan,
Name = "media-scan" Name = "media-scan"
@@ -229,7 +229,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "printhex"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "printhex");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.PrintHex, Count = newStats.Commands.PrintHex,
Name = "printhex" Name = "printhex"
@@ -243,7 +243,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "verify"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "verify");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.Verify, Count = newStats.Commands.Verify,
Name = "verify" Name = "verify"
@@ -257,7 +257,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "ls"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "ls");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.Ls, Count = newStats.Commands.Ls,
Name = "ls" Name = "ls"
@@ -271,7 +271,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "extract-files"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "extract-files");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.ExtractFiles, Count = newStats.Commands.ExtractFiles,
Name = "extract-files" Name = "extract-files"
@@ -285,7 +285,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "list-devices"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "list-devices");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.ListDevices, Count = newStats.Commands.ListDevices,
Name = "list-devices" Name = "list-devices"
@@ -299,7 +299,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "list-encodings"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "list-encodings");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.ListEncodings, Count = newStats.Commands.ListEncodings,
Name = "list-encodings" Name = "list-encodings"
@@ -313,7 +313,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "convert-image"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "convert-image");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.ConvertImage, Count = newStats.Commands.ConvertImage,
Name = "convert-image" Name = "convert-image"
@@ -327,7 +327,7 @@ public static class StatsConverter
Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "image-info"); Command existing = ctx.Commands.FirstOrDefault(c => c.Name == "image-info");
if(existing == null) if(existing == null)
ctx.Commands.Add(new() ctx.Commands.Add(new Command
{ {
Count = newStats.Commands.ImageInfo, Count = newStats.Commands.ImageInfo,
Name = "image-info" Name = "image-info"
@@ -349,7 +349,7 @@ public static class StatsConverter
c.Version == operatingSystem.version); c.Version == operatingSystem.version);
if(existing == null) if(existing == null)
ctx.OperatingSystems.Add(new() ctx.OperatingSystems.Add(new OperatingSystem
{ {
Count = operatingSystem.Value, Count = operatingSystem.Value,
Name = operatingSystem.name, Name = operatingSystem.name,
@@ -361,11 +361,10 @@ public static class StatsConverter
} }
else else
{ {
OperatingSystem existing = OperatingSystem existing = ctx.OperatingSystems.FirstOrDefault(c => c.Name == "Linux" && c.Version == null);
ctx.OperatingSystems.FirstOrDefault(c => c.Name == "Linux" && c.Version == null);
if(existing == null) if(existing == null)
ctx.OperatingSystems.Add(new() ctx.OperatingSystems.Add(new OperatingSystem
{ {
Count = 1, Count = 1,
Name = "Linux" Name = "Linux"
@@ -384,7 +383,7 @@ public static class StatsConverter
Version existing = ctx.Versions.FirstOrDefault(c => c.Name == nvs.name); Version existing = ctx.Versions.FirstOrDefault(c => c.Name == nvs.name);
if(existing == null) if(existing == null)
ctx.Versions.Add(new() ctx.Versions.Add(new Version
{ {
Count = nvs.Value, Count = nvs.Value,
Name = nvs.name Name = nvs.name
@@ -398,7 +397,7 @@ public static class StatsConverter
Version existing = ctx.Versions.FirstOrDefault(c => c.Name == "previous"); Version existing = ctx.Versions.FirstOrDefault(c => c.Name == "previous");
if(existing == null) if(existing == null)
ctx.Versions.Add(new() ctx.Versions.Add(new Version
{ {
Count = 1, Count = 1,
Name = "previous" Name = "previous"
@@ -416,7 +415,7 @@ public static class StatsConverter
Filesystem existing = ctx.Filesystems.FirstOrDefault(c => c.Name == nvs.name); Filesystem existing = ctx.Filesystems.FirstOrDefault(c => c.Name == nvs.name);
if(existing == null) if(existing == null)
ctx.Filesystems.Add(new() ctx.Filesystems.Add(new Filesystem
{ {
Count = nvs.Value, Count = nvs.Value,
Name = nvs.name Name = nvs.name
@@ -434,7 +433,7 @@ public static class StatsConverter
Partition existing = ctx.Partitions.FirstOrDefault(c => c.Name == nvs.name); Partition existing = ctx.Partitions.FirstOrDefault(c => c.Name == nvs.name);
if(existing == null) if(existing == null)
ctx.Partitions.Add(new() ctx.Partitions.Add(new Partition
{ {
Count = nvs.Value, Count = nvs.Value,
Name = nvs.name Name = nvs.name
@@ -452,7 +451,7 @@ public static class StatsConverter
MediaFormat existing = ctx.MediaFormats.FirstOrDefault(c => c.Name == nvs.name); MediaFormat existing = ctx.MediaFormats.FirstOrDefault(c => c.Name == nvs.name);
if(existing == null) if(existing == null)
ctx.MediaFormats.Add(new() ctx.MediaFormats.Add(new MediaFormat
{ {
Count = nvs.Value, Count = nvs.Value,
Name = nvs.name Name = nvs.name
@@ -470,7 +469,7 @@ public static class StatsConverter
Filter existing = ctx.Filters.FirstOrDefault(c => c.Name == nvs.name); Filter existing = ctx.Filters.FirstOrDefault(c => c.Name == nvs.name);
if(existing == null) if(existing == null)
ctx.Filters.Add(new() ctx.Filters.Add(new Filter
{ {
Count = nvs.Value, Count = nvs.Value,
Name = nvs.name Name = nvs.name
@@ -480,15 +479,13 @@ public static class StatsConverter
} }
if(newStats.Devices != null) if(newStats.Devices != null)
foreach(DeviceStats device in newStats.Devices. foreach(DeviceStats device in newStats.Devices.Where(device => !string.IsNullOrWhiteSpace(device.Model)).
Where(device => !string.IsNullOrWhiteSpace(device.Model)).
Where(device => !ctx.DeviceStats.Any(c => c.Bus == device.Bus && Where(device => !ctx.DeviceStats.Any(c => c.Bus == device.Bus &&
c.Manufacturer == c.Manufacturer == device.Manufacturer &&
device.Manufacturer &&
c.Model == device.Model && c.Model == device.Model &&
c.Revision == device.Revision))) c.Revision == device.Revision)))
{ {
ctx.DeviceStats.Add(new() ctx.DeviceStats.Add(new DeviceStat
{ {
Bus = device.Bus, Bus = device.Bus,
Manufacturer = device.Manufacturer, Manufacturer = device.Manufacturer,
@@ -506,7 +503,7 @@ public static class StatsConverter
Media existing = ctx.Medias.FirstOrDefault(c => c.Type == media.type && c.Real == media.real); Media existing = ctx.Medias.FirstOrDefault(c => c.Type == media.type && c.Real == media.real);
if(existing == null) if(existing == null)
ctx.Medias.Add(new() ctx.Medias.Add(new Media
{ {
Count = media.Value, Count = media.Value,
Real = media.real, Real = media.real,

View File

@@ -349,8 +349,7 @@ public static class TestedMedia
mediaOneValue.Add("Device can read the P to Q subchannels from this medium"); mediaOneValue.Add("Device can read the P to Q subchannels from this medium");
if(testedMedia.CanReadPQSubchannelWithC2 == true) if(testedMedia.CanReadPQSubchannelWithC2 == true)
mediaOneValue. mediaOneValue.Add("Device can read the P to Q subchannels from this medium reporting the C2 pointers");
Add("Device can read the P to Q subchannels from this medium reporting the C2 pointers");
if(testedMedia.CanReadPRI == true) if(testedMedia.CanReadPRI == true)
mediaOneValue.Add("Device can read the Pre-Recorded Information from this medium"); mediaOneValue.Add("Device can read the Pre-Recorded Information from this medium");
@@ -359,8 +358,7 @@ public static class TestedMedia
mediaOneValue.Add("Device can read the R to W subchannels from this medium"); mediaOneValue.Add("Device can read the R to W subchannels from this medium");
if(testedMedia.CanReadRWSubchannelWithC2 == true) if(testedMedia.CanReadRWSubchannelWithC2 == true)
mediaOneValue. mediaOneValue.Add("Device can read the R to W subchannels from this medium reporting the C2 pointers");
Add("Device can read the R to W subchannels from this medium reporting the C2 pointers");
if(testedMedia.CanReadRecordablePFI == true) if(testedMedia.CanReadRecordablePFI == true)
mediaOneValue.Add("Device can read the Physical Format Information from Lead-In from this medium"); mediaOneValue.Add("Device can read the Physical Format Information from Lead-In from this medium");

View File

@@ -6,5 +6,3 @@ global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Mvc; global using Microsoft.AspNetCore.Mvc;
global using Microsoft.EntityFrameworkCore; global using Microsoft.EntityFrameworkCore;
global using System.Threading.Tasks; global using System.Threading.Tasks;

View File

@@ -105,9 +105,8 @@ public sealed class AaruServerContext : IdentityDbContext<IdentityUser>
HasForeignKey("ScsiModeId").OnDelete(DeleteBehavior.Cascade)); HasForeignKey("ScsiModeId").OnDelete(DeleteBehavior.Cascade));
modelBuilder.Entity("Aaru.CommonTypes.Metadata.DensityCode", modelBuilder.Entity("Aaru.CommonTypes.Metadata.DensityCode",
b => b.HasOne("Aaru.CommonTypes.Metadata.SscSupportedMedia", null). b => b.HasOne("Aaru.CommonTypes.Metadata.SscSupportedMedia", null).WithMany("DensityCodes").
WithMany("DensityCodes").HasForeignKey("SscSupportedMediaId"). HasForeignKey("SscSupportedMediaId").OnDelete(DeleteBehavior.Cascade));
OnDelete(DeleteBehavior.Cascade));
modelBuilder.Entity("Aaru.CommonTypes.Metadata.Mmc", modelBuilder.Entity("Aaru.CommonTypes.Metadata.Mmc",
b => b.HasOne("Aaru.CommonTypes.Metadata.MmcFeatures", "Features").WithMany(). b => b.HasOne("Aaru.CommonTypes.Metadata.MmcFeatures", "Features").WithMany().
@@ -191,8 +190,8 @@ public sealed class AaruServerContext : IdentityDbContext<IdentityUser>
b.HasOne("Aaru.CommonTypes.Metadata.FireWire", "FireWire").WithMany().HasForeignKey("FireWireId"). b.HasOne("Aaru.CommonTypes.Metadata.FireWire", "FireWire").WithMany().HasForeignKey("FireWireId").
OnDelete(DeleteBehavior.SetNull); OnDelete(DeleteBehavior.SetNull);
b.HasOne("Aaru.CommonTypes.Metadata.MmcSd", "MultiMediaCard").WithMany(). b.HasOne("Aaru.CommonTypes.Metadata.MmcSd", "MultiMediaCard").WithMany().HasForeignKey("MultiMediaCardId").
HasForeignKey("MultiMediaCardId").OnDelete(DeleteBehavior.SetNull); OnDelete(DeleteBehavior.SetNull);
b.HasOne("Aaru.CommonTypes.Metadata.Pcmcia", "PCMCIA").WithMany().HasForeignKey("PCMCIAId"). b.HasOne("Aaru.CommonTypes.Metadata.Pcmcia", "PCMCIA").WithMany().HasForeignKey("PCMCIAId").
OnDelete(DeleteBehavior.SetNull); OnDelete(DeleteBehavior.SetNull);
@@ -200,16 +199,16 @@ public sealed class AaruServerContext : IdentityDbContext<IdentityUser>
b.HasOne("Aaru.CommonTypes.Metadata.Scsi", "SCSI").WithMany().HasForeignKey("SCSIId"). b.HasOne("Aaru.CommonTypes.Metadata.Scsi", "SCSI").WithMany().HasForeignKey("SCSIId").
OnDelete(DeleteBehavior.SetNull); OnDelete(DeleteBehavior.SetNull);
b.HasOne("Aaru.CommonTypes.Metadata.MmcSd", "SecureDigital").WithMany(). b.HasOne("Aaru.CommonTypes.Metadata.MmcSd", "SecureDigital").WithMany().HasForeignKey("SecureDigitalId").
HasForeignKey("SecureDigitalId").OnDelete(DeleteBehavior.SetNull); OnDelete(DeleteBehavior.SetNull);
b.HasOne("Aaru.CommonTypes.Metadata.Usb", "USB").WithMany().HasForeignKey("USBId"). b.HasOne("Aaru.CommonTypes.Metadata.Usb", "USB").WithMany().HasForeignKey("USBId").
OnDelete(DeleteBehavior.SetNull); OnDelete(DeleteBehavior.SetNull);
}); });
modelBuilder.Entity("Aaru.Server.Models.DeviceStat", modelBuilder.Entity("Aaru.Server.Models.DeviceStat",
b => b.HasOne("Aaru.Server.Models.Device", "Report").WithMany(). b => b.HasOne("Aaru.Server.Models.Device", "Report").WithMany().HasForeignKey("ReportId").
HasForeignKey("ReportId").OnDelete(DeleteBehavior.SetNull)); OnDelete(DeleteBehavior.SetNull));
modelBuilder.Entity("Aaru.Server.Models.UploadedReport", b => modelBuilder.Entity("Aaru.Server.Models.UploadedReport", b =>
{ {
@@ -222,8 +221,8 @@ public sealed class AaruServerContext : IdentityDbContext<IdentityUser>
b.HasOne("Aaru.CommonTypes.Metadata.FireWire", "FireWire").WithMany().HasForeignKey("FireWireId"). b.HasOne("Aaru.CommonTypes.Metadata.FireWire", "FireWire").WithMany().HasForeignKey("FireWireId").
OnDelete(DeleteBehavior.SetNull); OnDelete(DeleteBehavior.SetNull);
b.HasOne("Aaru.CommonTypes.Metadata.MmcSd", "MultiMediaCard").WithMany(). b.HasOne("Aaru.CommonTypes.Metadata.MmcSd", "MultiMediaCard").WithMany().HasForeignKey("MultiMediaCardId").
HasForeignKey("MultiMediaCardId").OnDelete(DeleteBehavior.SetNull); OnDelete(DeleteBehavior.SetNull);
b.HasOne("Aaru.CommonTypes.Metadata.Pcmcia", "PCMCIA").WithMany().HasForeignKey("PCMCIAId"). b.HasOne("Aaru.CommonTypes.Metadata.Pcmcia", "PCMCIA").WithMany().HasForeignKey("PCMCIAId").
OnDelete(DeleteBehavior.SetNull); OnDelete(DeleteBehavior.SetNull);
@@ -231,8 +230,8 @@ public sealed class AaruServerContext : IdentityDbContext<IdentityUser>
b.HasOne("Aaru.CommonTypes.Metadata.Scsi", "SCSI").WithMany().HasForeignKey("SCSIId"). b.HasOne("Aaru.CommonTypes.Metadata.Scsi", "SCSI").WithMany().HasForeignKey("SCSIId").
OnDelete(DeleteBehavior.SetNull); OnDelete(DeleteBehavior.SetNull);
b.HasOne("Aaru.CommonTypes.Metadata.MmcSd", "SecureDigital").WithMany(). b.HasOne("Aaru.CommonTypes.Metadata.MmcSd", "SecureDigital").WithMany().HasForeignKey("SecureDigitalId").
HasForeignKey("SecureDigitalId").OnDelete(DeleteBehavior.SetNull); OnDelete(DeleteBehavior.SetNull);
b.HasOne("Aaru.CommonTypes.Metadata.Usb", "USB").WithMany().HasForeignKey("USBId"). b.HasOne("Aaru.CommonTypes.Metadata.Usb", "USB").WithMany().HasForeignKey("USBId").
OnDelete(DeleteBehavior.SetNull); OnDelete(DeleteBehavior.SetNull);

View File

@@ -60,10 +60,9 @@ public class Device : DeviceReportV2
GdRomSwapDiscCapabilities = report.GdRomSwapDiscCapabilities; GdRomSwapDiscCapabilities = report.GdRomSwapDiscCapabilities;
} }
public Device(int? ataId, int? atapiId, int? firewireId, int? multimediacardId, int? pcmciaId, public Device(int? ataId, int? atapiId, int? firewireId, int? multimediacardId, int? pcmciaId, int? securedigitalId,
int? securedigitalId, int? scsiId, int? usbId, DateTime uploadedWhen, string manufacturer, int? scsiId, int? usbId, DateTime uploadedWhen, string manufacturer, string model, string revision,
string model, string revision, bool compactFlash, DeviceType type, bool compactFlash, DeviceType type, int? gdRomSwapDiscCapabilitiesId)
int? gdRomSwapDiscCapabilitiesId)
{ {
ATAId = ataId; ATAId = ataId;
ATAPIId = atapiId; ATAPIId = atapiId;

View File

@@ -77,7 +77,8 @@ public sealed class Program
builder.Services.AddDbContext<AaruServerContext>(options => options. builder.Services.AddDbContext<AaruServerContext>(options => options.
UseMySql(builder.Configuration.GetConnectionString("DefaultConnection"), UseMySql(builder.Configuration.GetConnectionString("DefaultConnection"),
new MariaDbServerVersion(new System. new
MariaDbServerVersion(new System.
Version(10, 4, 0))). Version(10, 4, 0))).
UseLazyLoadingProxies()); UseLazyLoadingProxies());

View File

@@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Primitives;
namespace Aaru.Server; namespace Aaru.Server;
@@ -12,19 +13,19 @@ public sealed class SecurityHeadersMiddleware
{ {
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy
// TODO Change the value depending of your needs // TODO Change the value depending of your needs
context.Response.Headers.Add("referrer-policy", new("strict-origin-when-cross-origin")); context.Response.Headers.Add("referrer-policy", new StringValues("strict-origin-when-cross-origin"));
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
context.Response.Headers.Add("x-content-type-options", new("nosniff")); context.Response.Headers.Add("x-content-type-options", new StringValues("nosniff"));
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
context.Response.Headers.Add("x-frame-options", new("DENY")); context.Response.Headers.Add("x-frame-options", new StringValues("DENY"));
// https://security.stackexchange.com/questions/166024/does-the-x-permitted-cross-domain-policies-header-have-any-benefit-for-my-websit // https://security.stackexchange.com/questions/166024/does-the-x-permitted-cross-domain-policies-header-have-any-benefit-for-my-websit
context.Response.Headers.Add("X-Permitted-Cross-Domain-Policies", new("none")); context.Response.Headers.Add("X-Permitted-Cross-Domain-Policies", new StringValues("none"));
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
context.Response.Headers.Add("x-xss-protection", new("1; mode=block")); context.Response.Headers.Add("x-xss-protection", new StringValues("1; mode=block"));
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy
// https://github.com/w3c/webappsec-feature-policy/blob/master/features.md // https://github.com/w3c/webappsec-feature-policy/blob/master/features.md

View File

@@ -1,6 +1,6 @@
{ {
"ConnectionStrings" : { "ConnectionStrings" : {
"DefaultConnection": "server=zeus.claunia.com;port=3306;database=discimagechef;uid=dic;password=dicpass" "DefaultConnection": "server=localhost;port=3306;database=discimagechef;uid=dic;password=dicpass"
}, },
"Logging" : { "Logging" : {
"LogLevel": { "LogLevel": {

View File

@@ -2,17 +2,14 @@
## Our Pledge ## Our Pledge
In the interest of fostering an open and welcoming environment, we as In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making
contributors and maintainers pledge to making participation in our project and participation in our project and our community a harassment-free experience for everyone, regardless of age, body size,
our community a harassment-free experience for everyone, regardless of age, body disability, ethnicity, gender identity and expression, level of experience, education, socio-economic status,
size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
education, socio-economic status, nationality, personal appearance, race,
religion, or sexual identity and orientation.
## Our Standards ## Our Standards
Examples of behavior that contributes to creating a positive environment Examples of behavior that contributes to creating a positive environment include:
include:
* Using welcoming and inclusive language * Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences * Being respectful of differing viewpoints and experiences
@@ -22,52 +19,42 @@ include:
Examples of unacceptable behavior by participants include: Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or * The use of sexualized language or imagery and unwelcome sexual attention or advances
advances
* Trolling, insulting/derogatory comments, and personal or political attacks * Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment * Public or private harassment
* Publishing others' private information, such as a physical or electronic * Publishing others' private information, such as a physical or electronic address, without explicit permission
address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities ## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take
behavior and are expected to take appropriate and fair corrective action in appropriate and fair corrective action in response to any instances of unacceptable behavior.
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits,
reject comments, commits, code, wiki edits, issues, and other contributions issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any
that are not aligned to this Code of Conduct, or to ban temporarily or contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope ## Scope
This Code of Conduct applies both within project spaces and in public spaces This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the
when an individual is representing the project or its community. Examples of project or its community. Examples of representing a project or community include using an official project e-mail
representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline
address, posting via an official social media account, or acting as an appointed event. Representation of a project may be further defined and clarified by project maintainers.
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement ## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team
reported by contacting the project team at [claunia@claunia.com](mailto:claunia@claunia.com). All at [claunia@claunia.com](mailto:claunia@claunia.com). All complaints will be reviewed and investigated and will result
complaints will be reviewed and investigated and will result in a response that in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain
is deemed necessary and appropriate to the circumstances. The project team is confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be
obligated to maintain confidentiality with regard to the reporter of an incident. posted separately.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent
faith may face temporary or permanent repercussions as determined by other repercussions as determined by other members of the project's leadership.
members of the project's leadership.
## Attribution ## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org [homepage]: https://www.contributor-covenant.org

View File

@@ -2,9 +2,8 @@
:+1::tada: First off, thanks for taking the time to contribute! :tada::+1: :+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
The following is a set of guidelines for contributing to Aaru and its modules. The following is a set of guidelines for contributing to Aaru and its modules. These are mostly guidelines, not rules.
These are mostly guidelines, not rules. Use your best judgment, and feel free to propose Use your best judgment, and feel free to propose changes to this document in a pull request.
changes to this document in a pull request.
#### Table Of Contents #### Table Of Contents
@@ -13,9 +12,11 @@ changes to this document in a pull request.
[I don't want to read this whole thing, I just have a question!!!](#i-dont-want-to-read-this-whole-thing-i-just-have-a-question) [I don't want to read this whole thing, I just have a question!!!](#i-dont-want-to-read-this-whole-thing-i-just-have-a-question)
[What should I know before I get started?](#what-should-i-know-before-i-get-started) [What should I know before I get started?](#what-should-i-know-before-i-get-started)
* [Aaru and modules](#aaru-and-modules) * [Aaru and modules](#aaru-and-modules)
[How Can I Contribute?](#how-can-i-contribute) [How Can I Contribute?](#how-can-i-contribute)
* [Reporting Devices](#reporting-devices) * [Reporting Devices](#reporting-devices)
* [Reporting Bugs](#reporting-bugs) * [Reporting Bugs](#reporting-bugs)
* [Suggesting Enhancements](#suggesting-enhancements) * [Suggesting Enhancements](#suggesting-enhancements)
@@ -26,19 +27,19 @@ changes to this document in a pull request.
* [Providing information](#needed-information) * [Providing information](#needed-information)
[Styleguides](#styleguides) [Styleguides](#styleguides)
* [Git Commit Messages](#git-commit-messages) * [Git Commit Messages](#git-commit-messages)
* [Code Styleguide](#code-styleguide) * [Code Styleguide](#code-styleguide)
## Code of Conduct ## Code of Conduct
This project and everyone participating in it is governed by the This project and everyone participating in it is governed by the
[Aaru Code of Conduct](.github/CODE_OF_CONDUCT.md). By participating, you are expected [Aaru Code of Conduct](.github/CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please
to uphold this code. Please report unacceptable behavior to [claunia@claunia.com](mailto:claunia@claunia.com). report unacceptable behavior to [claunia@claunia.com](mailto:claunia@claunia.com).
## I don't want to read this whole thing I just have a question!!! ## I don't want to read this whole thing I just have a question!!!
> **Note:** Please don't file an issue to ask a question. You'll get faster results by > **Note:** Please don't file an issue to ask a question. You'll get faster results by using the resources below.
using the resources below.
You can join our IRC channel on chat.freenode.net at channel #Aaru You can join our IRC channel on chat.freenode.net at channel #Aaru
@@ -46,179 +47,165 @@ You can join our IRC channel on chat.freenode.net at channel #Aaru
### Aaru and modules ### Aaru and modules
Aaru is a large open source project &mdash; it's made up of 18 modules. When you initially consider contributing to Aaru, you might be unsure about which of those modules implements the functionality you want to change or report a bug for. This section should help you with that. Aaru is a large open source project &mdash; it's made up of 18 modules. When you initially consider contributing to
Aaru, you might be unsure about which of those modules implements the functionality you want to change or report a bug
for. This section should help you with that.
Aaru is intentionally very modular. Here's a list of them: Aaru is intentionally very modular. Here's a list of them:
* [Claunia.RsrcFork](https://github.com/claunia/Claunia.RsrcFork) - * [Claunia.RsrcFork](https://github.com/claunia/Claunia.RsrcFork) - This library includes code for handling Mac OS
This library includes code for handling Mac OS resource forks, and decoding them, so any resource forks, and decoding them, so any code related to Mac OS resource forks should be added here.
code related to Mac OS resource forks should be added here. * [Claunia.Encoding](https://github.com/claunia/Claunia.Encoding) - This library includes code for converting codepages
* [Claunia.Encoding](https://github.com/claunia/Claunia.Encoding) - not supported by .NET, like those used by ancient operating systems, to/from UTF-8.
This library includes code for converting codepages not supported by .NET, like those used * [plist-cil](https://github.com/claunia/plist-cil) - This library includes code for handling Apple property lists.
by ancient operating systems, to/from UTF-8. * [SharpCompress](https://github.com/adamhathcock/sharpcompress) - This library includes code for handling compression
* [plist-cil](https://github.com/claunia/plist-cil) - algorithms and compressed archives. Any need you have of compression or decompression should be handled with this
This library includes code for handling Apple property lists. library, and any new algorithm should be added here.
* [SharpCompress](https://github.com/adamhathcock/sharpcompress) - * [Aaru](https://github.com/aaru-dps/Aaru/tree/master/Aaru) - This module contains the command line interface. In the
This library includes code for handling compression algorithms and compressed archives. Any future a GUI will be added.
need you have of compression or decompression should be handled with this library, and any new algorithm should be added here. * [AaruRemote](https://github.com/aaru-dps/aaruremote) - Standalone small application designed to run on older machines
* [Aaru](https://github.com/aaru-dps/Aaru/tree/master/Aaru) - where Aaru does not run to allow device commands to be executed remotely.
This module contains the command line interface. In the future a GUI will be added. * [Aaru.Checksums](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Checksums) - This module contains the checksum,
* [AaruRemote](https://github.com/aaru-dps/aaruremote) - hashing and error correction algorithms.
Standalone small application designed to run on older machines where Aaru does not run to allow device commands to be executed remotely. * [Aaru.CommonTypes](https://github.com/aaru-dps/Aaru.CommonTypes) - This module contains interfaces, structures and
* [Aaru.Checksums](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Checksums) - enumerations needed by more than one of the other modules.
This module contains the checksum, hashing and error correction algorithms. * [Aaru.Console](https://github.com/aaru-dps/Aaru.Console) - This module abstracts consoles used by other modules to
* [Aaru.CommonTypes](https://github.com/aaru-dps/Aaru.CommonTypes) - output information, so they can be redirected to a CLI or to a GUI output.
This module contains interfaces, structures and enumerations needed by more than one of the other modules. * [Aaru.Core](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Core) - This module contains the implementation of the
* [Aaru.Console](https://github.com/aaru-dps/Aaru.Console) - functions and commands that are called by the user interface itself.
This module abstracts consoles used by other modules to output information, so they can be * [Aaru.Decoders](https://github.com/aaru-dps/Aaru.Decoders) - This module contains internal disk, drive and protocol
redirected to a CLI or to a GUI output. structures as well as code to marshal, decode and print them.
* [Aaru.Core](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Core) - * [Aaru.Devices](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Devices) - This module contains code to talk with
This module contains the implementation of the functions and commands that are called by the hardware devices in different platforms. Each platform has lowlevel calls in its own folder, and each device protocol
user interface itself. has highlevel calls in its own folder. Device commands are separated by protocol standard, or vendor name.
* [Aaru.Decoders](https://github.com/aaru-dps/Aaru.Decoders) - * [Aaru.Device.Report](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Device.Report) - This is a separate application
This module contains internal disk, drive and protocol structures as well as code to marshal, in C89 designed to create device reports on enviroments where you can't run .NET or Mono but can run Linux.
decode and print them. * [Aaru.DiscImages](https://github.com/aaru-dps/Aaru/tree/master/Aaru.DiscImages) - This module provides reading
* [Aaru.Devices](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Devices) - capabilities for the disk/disc images, one per file.
This module contains code to talk with hardware devices in different platforms. Each platform * [Aaru.DiscImages](https://github.com/aaru-dps/Aaru.Dto) - This module provides common structures between Aaru and
has lowlevel calls in its own folder, and each device protocol has highlevel calls in its own Aaru.Server.
folder. Device commands are separated by protocol standard, or vendor name. * [Aaru.Filesystems](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Filesystems) - This module provides the
* [Aaru.Device.Report](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Device.Report) - filesystem support. If only identification is implemented a single file should be used. For full read-only support, a
This is a separate application in C89 designed to create device reports on enviroments where folder should be used.
you can't run .NET or Mono but can run Linux. * [Aaru.Filters](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Filters) - A filter is a modification of the data
* [Aaru.DiscImages](https://github.com/aaru-dps/Aaru/tree/master/Aaru.DiscImages) - before it can be passed to the disk image module
This module provides reading capabilities for the disk/disc images, one per file. (compression, fork union, etc), and this module provides support for them. If a image is compressed, say in gzip, or
* [Aaru.DiscImages](https://github.com/aaru-dps/Aaru.Dto) - encoded, say in AppleDouble, a filter is the responsible of decompressing or decoding it on-the-fly.
This module provides common structures between Aaru and Aaru.Server. * [Aaru.Helpers](https://github.com/aaru-dps/Aaru.Helpers) - This module contains a collection of helpers for array
* [Aaru.Filesystems](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Filesystems) - manipulation, big-endian marshalling, datetime conversion, hexadecimal printing, string manipulation and byte
This module provides the filesystem support. If only identification is implemented a single swapping.
file should be used. For full read-only support, a folder should be used. * [Aaru.Partitions](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Partitions) - This module contains code for
* [Aaru.Filters](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Filters) - reading partition schemes.
A filter is a modification of the data before it can be passed to the disk image module * [Aaru.Server](https://github.com/aaru-dps/Aaru.Server) - This module contains the server-side code that's running
(compression, fork union, etc), and this module provides support for them. If a image is at https://www.aaru.app
compressed, say in gzip, or encoded, say in AppleDouble, a filter is the responsible of * [Aaru.Settings](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Settings) - This module contains code for handling
decompressing or decoding it on-the-fly. Aaru settings.
* [Aaru.Helpers](https://github.com/aaru-dps/Aaru.Helpers) - * [Aaru.Tests](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Tests) - This module contains the unit tests for the
This module contains a collection of helpers for array manipulation, big-endian marshalling, rest of the modules. You should add new unit tests here but cannot run all of them because the test images they
datetime conversion, hexadecimal printing, string manipulation and byte swapping. require amount to more than 100GiB.
* [Aaru.Partitions](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Partitions) - * [Aaru.Tests.Devices](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Tests.Devices) - This module presents a menu
This module contains code for reading partition schemes. driven interface to send commands to devices, as a way to test the Core module, as those tests cannot be automated. It
* [Aaru.Server](https://github.com/aaru-dps/Aaru.Server) - can be used to debug drive responses.
This module contains the server-side code that's running at https://www.aaru.app
* [Aaru.Settings](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Settings) -
This module contains code for handling Aaru settings.
* [Aaru.Tests](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Tests) -
This module contains the unit tests for the rest of the modules. You should add new unit
tests here but cannot run all of them because the test images they require amount to more
than 100GiB.
* [Aaru.Tests.Devices](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Tests.Devices) -
This module presents a menu driven interface to send commands to devices, as a way to test
the Core module, as those tests cannot be automated. It can be used to debug drive responses.
## How Can I Contribute? ## How Can I Contribute?
### Reporting Devices ### Reporting Devices
Aaru tries to be as universal as possible. However some devices do not behave in Aaru tries to be as universal as possible. However some devices do not behave in the expected ways, some media is
the expected ways, some media is unknown and needs to be known prior to enabling dumping of it, unknown and needs to be known prior to enabling dumping of it, etc.
etc.
For that reason, Aaru includes the [device-report command](https://github.com/aaru-dps/Aaru/wiki/Reporting-physical-device-capabilities). For that reason, Aaru includes
Using this command will guide you thru a series of questions about the device, and if it the [device-report command](https://github.com/aaru-dps/Aaru/wiki/Reporting-physical-device-capabilities). Using this
contains removable media, for you to insert the different media you have, and create a report command will guide you thru a series of questions about the device, and if it contains removable media, for you to
of its abilities. The report will automatically be sent to our server and saved on your computer. insert the different media you have, and create a report of its abilities. The report will automatically be sent to our
Please note that we do not store any personal information and when possible remove the drive server and saved on your computer. Please note that we do not store any personal information and when possible remove
serial numbers from the report. the drive serial numbers from the report.
If you have a drive attached to a computer that you cannot run the full Aaru on it If you have a drive attached to a computer that you cannot run the full Aaru on it but can compile a C89 application,
but can compile a C89 application, you can use [AaruRemote](https://github.com/aaru-dps/aaruremote) you can use [AaruRemote](https://github.com/aaru-dps/aaruremote)
and an ethernet connection between that machine and a machine that can run the full Aaru. and an ethernet connection between that machine and a machine that can run the full Aaru.
### Reporting Bugs ### Reporting Bugs
This section guides you through submitting a bug report for Aaru. Following these guidelines This section guides you through submitting a bug report for Aaru. Following these guidelines helps maintainers and the
helps maintainers and the community understand your report :pencil:, reproduce the community understand your report :pencil:, reproduce the behavior :computer: :computer:, and find related reports :
behavior :computer: :computer:, and find related reports :mag_right:. mag_right:.
Before creating bug reports, please check [this list](#before-submitting-a-bug-report) as you Before creating bug reports, please check [this list](#before-submitting-a-bug-report) as you might find out that you
might find out that you don't need to create one. When you are creating a bug report, please don't need to create one. When you are creating a bug report, please
[include as many details as possible](#how-do-i-submit-a-good-bug-report). Fill out [include as many details as possible](#how-do-i-submit-a-good-bug-report). Fill out
[the required template](.github/ISSUE_TEMPLATE.md), the information it asks for helps us resolve [the required template](.github/ISSUE_TEMPLATE.md), the information it asks for helps us resolve issues faster.
issues faster.
> **Note:** If you find a **Closed** issue that seems like it is the same thing that you're > **Note:** If you find a **Closed** issue that seems like it is the same thing that you're experiencing, open a new issue and include a link to the original issue in the body of your new one.
experiencing, open a new issue and include a link to the original issue in the body of your
new one.
#### Before Submitting A Bug Report #### Before Submitting A Bug Report
* **Check the [wiki](https://github.com/aaru-dps/Aaru/wiki)** for a list of common * **Check the [wiki](https://github.com/aaru-dps/Aaru/wiki)** for a list of common questions and problems.
questions and problems.
* **Determine [which module the problem should be reported in](#aaru-and-modules)**. * **Determine [which module the problem should be reported in](#aaru-and-modules)**.
* **Perform a [cursory search](https://github.com/search?q=+is%3Aissue+user%3Aclaunia)** * **Perform a [cursory search](https://github.com/search?q=+is%3Aissue+user%3Aclaunia)**
to see if the problem has already been reported. If it has **and the issue is still open**, to see if the problem has already been reported. If it has **and the issue is still open**, add a comment to the
add a comment to the existing issue instead of opening a new one. existing issue instead of opening a new one.
#### How Do I Submit A (Good) Bug Report? #### How Do I Submit A (Good) Bug Report?
Bugs are tracked as [GitHub issues](https://guides.github.com/features/issues/). After Bugs are tracked as [GitHub issues](https://guides.github.com/features/issues/). After you've
you've determined [which module](#aaru-and-modules) your bug is related to, determined [which module](#aaru-and-modules) your bug is related to, create an issue on that repository and provide the
create an issue on that repository and provide the following information by filling in following information by filling in
[the template](.github/ISSUE_TEMPLATE.md). [the template](.github/ISSUE_TEMPLATE.md).
Explain the problem and include additional details to help maintainers reproduce the problem: Explain the problem and include additional details to help maintainers reproduce the problem:
* **Use a clear and descriptive title** for the issue to identify the problem. * **Use a clear and descriptive title** for the issue to identify the problem.
* **Describe the exact steps which reproduce the problem** in as many details as possible. * **Describe the exact steps which reproduce the problem** in as many details as possible. For example, start by
For example, start by explaining how you started Aaru, e.g. which command exactly explaining how you started Aaru, e.g. which command exactly you used in the terminal. Also note that some device
you used in the terminal. Also note that some device commands requires you to have commands requires you to have administrative privileges, be in a specific group, or be the root user, so try it again
administrative privileges, be in a specific group, or be the root user, so try it again with with escalated privileges.
escalated privileges. * **Provide specific examples to demonstrate the steps**. Include links to media images, reports of the devices, or the
* **Provide specific examples to demonstrate the steps**. Include links to media images, output of using [Aaru.Tests.Devices](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Tests.Devices).
reports of the devices, or the output of using [Aaru.Tests.Devices](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Tests.Devices). * **Describe the behavior you observed after following the steps** and point out what exactly is the problem with that
* **Describe the behavior you observed after following the steps** and point out what exactly is the problem with that behavior. behavior.
* **Explain which behavior you expected to see instead and why.** * **Explain which behavior you expected to see instead and why.**
* **Include a copy of the output in the terminal** enabling both verbose, using the `-v` * **Include a copy of the output in the terminal** enabling both verbose, using the `-v`
command line parameter, and debug, using the `-d` command line parameter, outputs. command line parameter, and debug, using the `-d` command line parameter, outputs.
* **If you're reporting that Aaru crashed**, try doing the same with the debug * **If you're reporting that Aaru crashed**, try doing the same with the debug version and include a crash report with a
version and include a crash report with a stack trace. Include the crash report in the issue stack trace. Include the crash report in the issue in
in a [code block](https://help.github.com/articles/markdown-basics/#multiple-lines), a a [code block](https://help.github.com/articles/markdown-basics/#multiple-lines), a
[file attachment](https://help.github.com/articles/file-attachments-on-issues-and-pull-requests/), [file attachment](https://help.github.com/articles/file-attachments-on-issues-and-pull-requests/), or put it in
or put it in a [gist](https://gist.github.com/) and provide link to that gist. a [gist](https://gist.github.com/) and provide link to that gist.
* **If the problem wasn't triggered by a specific action**, describe what you were doing * **If the problem wasn't triggered by a specific action**, describe what you were doing before the problem happened and
before the problem happened and share more information using the guidelines below. share more information using the guidelines below.
Include details about your configuration and environment: Include details about your configuration and environment:
* **Which version of Aaru are you using?** * **Which version of Aaru are you using?**
* **What's the name and version of the OS you're using**? * **What's the name and version of the OS you're using**?
* **Are you running Aaru in a virtual machine?** If so, which VM software are you * **Are you running Aaru in a virtual machine?** If so, which VM software are you using and which operating systems and
using and which operating systems and versions are used for the host and the guest? versions are used for the host and the guest?
* **Are you trying to execute a device command?** If so, who manufactured the device, which * **Are you trying to execute a device command?** If so, who manufactured the device, which model is it, and how is it
model is it, and how is it connected to the computer? connected to the computer?
### Suggesting Enhancements ### Suggesting Enhancements
This section guides you through submitting an enhancement suggestion for Aaru, including This section guides you through submitting an enhancement suggestion for Aaru, including completely new features and
completely new features and minor improvements to existing functionality. Following these minor improvements to existing functionality. Following these guidelines helps maintainers and the community understand
guidelines helps maintainers and the community understand your suggestion :pencil: and find your suggestion :pencil: and find related suggestions :mag_right:.
related suggestions :mag_right:.
Before creating enhancement suggestions, please [include as many details as possible](#how-do-i-submit-a-good-enhancement-suggestion). Before creating enhancement suggestions,
Fill in [the template](.github/ISSUE_TEMPLATE.md), including the steps that you imagine you would please [include as many details as possible](#how-do-i-submit-a-good-enhancement-suggestion). Fill
take if the feature you're requesting existed. in [the template](.github/ISSUE_TEMPLATE.md), including the steps that you imagine you would take if the feature you're
requesting existed.
#### How Do I Submit A (Good) Enhancement Suggestion? #### How Do I Submit A (Good) Enhancement Suggestion?
Enhancement suggestions are tracked as [GitHub issues](https://guides.github.com/features/issues/). Enhancement suggestions are tracked as [GitHub issues](https://guides.github.com/features/issues/). After you've
After you've determined [which module](#aaru-and-modules) your enhancement suggestion determined [which module](#aaru-and-modules) your enhancement suggestion is related to, create an issue on that
is related to, create an issue on that repository and provide the following information: repository and provide the following information:
* **Use a clear and descriptive title** for the issue to identify the suggestion. * **Use a clear and descriptive title** for the issue to identify the suggestion.
* **Provide a step-by-step description of the suggested enhancement** in as many details as * **Provide a step-by-step description of the suggested enhancement** in as many details as possible.
possible. * **Provide specific examples to demonstrate the steps**. If the feature is about a media image, filesystem,
* **Provide specific examples to demonstrate the steps**. If the feature is about a media image, partitioning scheme, or filter, please include as many test files as possible, and if applicable which software
filesystem, partitioning scheme, or filter, please include as many test files as possible, created them.
and if applicable which software created them.
* **Describe the current behavior** and **explain which behavior you expected to see instead** and why. * **Describe the current behavior** and **explain which behavior you expected to see instead** and why.
* **List some other applications where this enhancement exists.** * **List some other applications where this enhancement exists.**
* **Specify which version of Aaru you're using.** * **Specify which version of Aaru you're using.**
@@ -231,43 +218,46 @@ Unsure where to begin contributing to Aaru? You can start by looking through the
* [Beginner issues][beginner] - issues which should only require a few lines of code, and a test or two. * [Beginner issues][beginner] - issues which should only require a few lines of code, and a test or two.
* [Help wanted issues][help-wanted] - issues which should be a bit more involved than `beginner` issues. * [Help wanted issues][help-wanted] - issues which should be a bit more involved than `beginner` issues.
Both issue lists are sorted by total number of comments. While not perfect, number of Both issue lists are sorted by total number of comments. While not perfect, number of comments is a reasonable proxy for
comments is a reasonable proxy for impact a given change will have. impact a given change will have.
If you want to read about using Aaru, the [wiki](https://github.com/aaru-dps/Aaru/wiki) is available. If you want to read about using Aaru, the [wiki](https://github.com/aaru-dps/Aaru/wiki) is available.
Do not modify the interfaces. If you need or want to, comment in an issue how and why you Do not modify the interfaces. If you need or want to, comment in an issue how and why you want to change it and we'll
want to change it and we'll discuss it. Same applies for creating new interfaces. discuss it. Same applies for creating new interfaces.
Aaru uses C# 7 language features (inline declaration, Tuples, etc.) so it can only Aaru uses C# 7 language features (inline declaration, Tuples, etc.) so it can only be compiled
be compiled with [VisualStudio](http://www.visualstudio.com) 2017 or higher, [Xamarin Studio](https://www.xamarin.com/download) with [VisualStudio](http://www.visualstudio.com) 2017 or higher, [Xamarin Studio](https://www.xamarin.com/download)
7 or higher, [MonoDevelop](http://www.monodevelop.com) 7 or higher, or [JetBrains Rider](https://www.jetbrains.com/rider/) 2017.2 or higher. 7 or higher, [MonoDevelop](http://www.monodevelop.com) 7 or higher,
or [JetBrains Rider](https://www.jetbrains.com/rider/) 2017.2 or higher.
### Pull Requests ### Pull Requests
* Fill in [the required template](.github/PULL_REQUEST_TEMPLATE.md) * Fill in [the required template](.github/PULL_REQUEST_TEMPLATE.md)
* Do not include issue numbers in the PR title * Do not include issue numbers in the PR title
* Follow the [code styleguide](#code-styleguide). * Follow the [code styleguide](#code-styleguide).
* Include test files as applicable, that do not have software under copyright inside them, * Include test files as applicable, that do not have software under copyright inside them, if possible.
if possible.
* Document new code based using XML documentation wherever possible. * Document new code based using XML documentation wherever possible.
* DO NOT end files with a newline. * DO NOT end files with a newline.
* Avoid platform-dependent code, unless absolutely needed. Any call to a part of the * Avoid platform-dependent code, unless absolutely needed. Any call to a part of the .NET framework that doesn't start
.NET framework that doesn't start with `System.` is probably platform-dependent. with `System.` is probably platform-dependent.
* Do not call libraries external to .NET. Only Interop calls to the operating system kernel * Do not call libraries external to .NET. Only Interop calls to the operating system kernel
(that is `KERNEL32.DLL` in Windows and `libc` in others) will be accepted. If you need to (that is `KERNEL32.DLL` in Windows and `libc` in others) will be accepted. If you need to talk with a USB devices your
talk with a USB devices your pull request must implement calls both to `WinUsb` and `libusb`. pull request must implement calls both to `WinUsb` and `libusb`.
### Patronizing ### Patronizing
If you want to donate money you can become a patron at https://www.patreon.com/claunia If you want to donate money you can become a patron at https://www.patreon.com/claunia
### Donating ### Donating
You may donate us one of the [devices we need](NEEDED.md). You may donate us one of the [devices we need](NEEDED.md).
### Needed information ### Needed information
If you have test images, imaging applications that generate formats we do not support, or
documentation about media dump formats, filesystems or partitioning schemes we do not If you have test images, imaging applications that generate formats we do not support, or documentation about media dump
support, you can provide us with that information to add support for them. formats, filesystems or partitioning schemes we do not support, you can provide us with that information to add support
for them.
## Styleguides ## Styleguides
@@ -289,8 +279,7 @@ support, you can provide us with that information to add support for them.
- Do not use `var` ever. - Do not use `var` ever.
- `else`, `while`, `catch` and `finally` should be on a new line. - `else`, `while`, `catch` and `finally` should be on a new line.
- If you know C apply a simple rule: Be as C as and as less C# or C++ as possible. - If you know C apply a simple rule: Be as C as and as less C# or C++ as possible.
- If you will only store variables, use a struct. If you need it to be nullable, use a - If you will only store variables, use a struct. If you need it to be nullable, use a nullable struct if applicable.
nullable struct if applicable.
- Indent statements and cases. - Indent statements and cases.
- Indent using 4 spaces (soft tab). - Indent using 4 spaces (soft tab).
- Instace and static fields should be lowerCamelCase. - Instace and static fields should be lowerCamelCase.
@@ -298,8 +287,7 @@ support, you can provide us with that information to add support for them.
- Separate attributes. - Separate attributes.
- Use 120 columns margins. - Use 120 columns margins.
- Use built-in keywords: `uint` instead of `UInt32`. - Use built-in keywords: `uint` instead of `UInt32`.
- Use expression bodies only for properties, indexes and events. For the rest use block - Use expression bodies only for properties, indexes and events. For the rest use block bodies.
bodies.
- Use implicit modifiers. - Use implicit modifiers.
- Use inline variable declaration. - Use inline variable declaration.
- Use struct implicit constructor. - Use struct implicit constructor.

View File

@@ -4,6 +4,7 @@
* [ ] Can you reproduce the problem in the debug version? * [ ] Can you reproduce the problem in the debug version?
### Check and fill as appropriate: ### Check and fill as appropriate:
* [ ] I was running Aaru under Windows [version here]... * [ ] I was running Aaru under Windows [version here]...
* [ ] I was running Aaru under Linux [version here]... * [ ] I was running Aaru under Linux [version here]...
* [ ] I was running Aaru under FreeBSD [version here]... * [ ] I was running Aaru under FreeBSD [version here]...
@@ -23,9 +24,11 @@
`Aaru [command] [parameters]` `Aaru [command] [parameters]`
### Expected behavior: ### Expected behavior:
[What you expected to happen] [What you expected to happen]
### Actual behavior: ### Actual behavior:
[What actually happened] [What actually happened]
### If command was expected to work with a device fill this out: ### If command was expected to work with a device fill this out:
@@ -44,6 +47,7 @@
* [ ] MultiMediaCard * [ ] MultiMediaCard
### Output of command execution with debug output enabled ### Output of command execution with debug output enabled
``` ```
Paste the whole output of the executed command when you append '-d' to your command line parameters here Paste the whole output of the executed command when you append '-d' to your command line parameters here
``` ```

View File

@@ -1,16 +1,16 @@
This is a list of hardware, software, and general information needed to expand and better support various unique hardware and This is a list of hardware, software, and general information needed to expand and better support various unique
software configurations for Aaru. We accept donation of this hardware, or loans: paying for shipping is greatly appreciated, hardware and software configurations for Aaru. We accept donation of this hardware, or loans: paying for shipping is
but can make other arrangements depending on cost. For media, we do accept loans, but please be aware that due to its age, there is greatly appreciated, but can make other arrangements depending on cost. For media, we do accept loans, but please be
no guarantee it will still be working after it is returned and thus donations are preferred. aware that due to its age, there is no guarantee it will still be working after it is returned and thus donations are
preferred.
Drives Drives
====== ======
This is a list of drives. The reason we need these drives is because it is the only way to add enhanced support for them (e.g. media This is a list of drives. The reason we need these drives is because it is the only way to add enhanced support for
detection, ECC support, raw dumping, etc.). Also some drives depart from the specifications and need special workarounds. If a drive is them (e.g. media detection, ECC support, raw dumping, etc.). Also some drives depart from the specifications and need
listed here, but the media it uses is not listed below, we already have media for it. Drives are preferred in ATA/ATAPI, SCSI, USB or special workarounds. If a drive is listed here, but the media it uses is not listed below, we already have media for it.
FireWire buses. Parallel port drives require a larger amount of work, and there is no guarantee it can work, at all, with other drives. If in Drives are preferred in ATA/ATAPI, SCSI, USB or FireWire buses. Parallel port drives require a larger amount of work,
doubt, please contact us. and there is no guarantee it can work, at all, with other drives. If in doubt, please contact us.
- 5.25" magneto-optical (preferibly the 9.6Gb supporting one) - 5.25" magneto-optical (preferibly the 9.6Gb supporting one)
- 8" shugart floppy drive (preferibly the 240VAC one) - 8" shugart floppy drive (preferibly the 240VAC one)
@@ -43,7 +43,9 @@ doubt, please contact us.
Media Media
===== =====
This is the media for the drives listed above, or media for drives we do have, but lack and thus cannot test the actual hardware. This is the media for the drives listed above, or media for drives we do have, but lack and thus cannot test the actual
hardware.
- 5.25" magneto-optical media: 128MiB - 5.25" magneto-optical media: 128MiB
- ADR tapes - ADR tapes
- AIT tapes - AIT tapes
@@ -72,9 +74,8 @@ This is the media for the drives listed above, or media for drives we do have, b
Software Software
================== ==================
This is a list of software whose physical media has some characteristics that needs This is a list of software whose physical media has some characteristics that needs to be investigated to allow correct
to be investigated to allow correct dumping of such characteristics. Usually those dumping of such characteristics. Usually those are copy protections.
are copy protections.
- CD-i Ready - CD-i Ready
- Accelerator - Accelerator

View File

@@ -1,5 +1,7 @@
## Types of changes ## Types of changes
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: --> <!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue) - [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality) - [ ] New feature (non-breaking change which adds functionality)
- [ ] New filesystem, test images in [url] - [ ] New filesystem, test images in [url]

View File

@@ -11,16 +11,15 @@ Copyright © 2011-2021 Natalia Portillo <claunia@claunia.com>
You can see statistics and device reports [here](https://www.aaru.app/Stats) You can see statistics and device reports [here](https://www.aaru.app/Stats)
Aaru is a fully featured media dump management solution. You usually know media dumps Aaru is a fully featured media dump management solution. You usually know media dumps as disc images, disk images, tape
as disc images, disk images, tape images, etc. images, etc.
With Aaru you can identify a media dump, extract files from it (for supported With Aaru you can identify a media dump, extract files from it (for supported filesystems), compare two of them, create
filesystems), compare two of them, create them from real media using the appropriate drive, them from real media using the appropriate drive, create a sidecar metadata with information about the media dump, and a
create a sidecar metadata with information about the media dump, and a lot of other features lot of other features that commonly would require you to use separate applications.
that commonly would require you to use separate applications.
To see last changes, check the [changelog](Changelog.md). To see last changes, check the [changelog](Changelog.md). To see list of pending things to do, check
To see list of pending things to do, check the [list of issues](https://github.com/aaru-dps/Aaru/issues). the [list of issues](https://github.com/aaru-dps/Aaru/issues).
If you want to contribute in any way please read the [contributing guide](CONTRIBUTING.md). If you want to contribute in any way please read the [contributing guide](CONTRIBUTING.md).
@@ -29,8 +28,8 @@ Stable releases in [Github](https://github.com/aaru-dps/Aaru/releases).
System requirements System requirements
=================== ===================
Aaru is created using .NET Core 3.1 and can be compiled with all the major IDEs. Aaru is created using .NET Core 3.1 and can be compiled with all the major IDEs. To run it you require to use one of the
To run it you require to use one of the stable releases, or build it yourself. stable releases, or build it yourself.
Usage Usage
===== =====
@@ -43,7 +42,9 @@ Or read the [documentation](https://github.com/aaru-dps/Aaru.Documentation/blob/
Features Features
======== ========
* Identifies a disk image getting information about the disk itself and shows information about partitions and filesystems inside them
* Identifies a disk image getting information about the disk itself and shows information about partitions and
filesystems inside them
* Can checksum the disks (and if optical disc, separate tracks) user-data (tags and metadata coming soon) * Can checksum the disks (and if optical disc, separate tracks) user-data (tags and metadata coming soon)
* Can compare two disk images, even different formats, for different sectors and/or metadata * Can compare two disk images, even different formats, for different sectors and/or metadata
* Can list and extract contents from supported filesystems * Can list and extract contents from supported filesystems
@@ -51,17 +52,20 @@ Features
* Can read several known sector by sector formats with variable bytes per sector. * Can read several known sector by sector formats with variable bytes per sector.
* Can read standard sector by sector copies for optical and magnetic discs with constant bytes per sector. * Can read standard sector by sector copies for optical and magnetic discs with constant bytes per sector.
* Can verify sectors or disk images if supported by the underlying format * Can verify sectors or disk images if supported by the underlying format
* Can dump media from ATA, ATAPI, SCSI, USB, FireWire and SDHCI drives (magnetic disks, optical discs, magnetoptical disks, flash devices, memory cards and tapes) to several supported image formats. * Can dump media from ATA, ATAPI, SCSI, USB, FireWire and SDHCI drives (magnetic disks, optical discs, magnetoptical
disks, flash devices, memory cards and tapes) to several supported image formats.
* Can convert between image formats. * Can convert between image formats.
* Includes an open-source archival image format with compression and deduplication. * Includes an open-source archival image format with compression and deduplication.
* Can create standard open XML metadata from existing images. * Can create standard open XML metadata from existing images.
* Can measure readability and speed of media (same that can be dumped, MHDD style) * Can measure readability and speed of media (same that can be dumped, MHDD style)
* Has an online database with drive capabilities, and can report the capabilities of any drive. * Has an online database with drive capabilities, and can report the capabilities of any drive.
* Works on any operating system and architecture where .NET Core is supported (drive access requires Windows, Linux or FreeBSD). * Works on any operating system and architecture where .NET Core is supported (drive access requires Windows, Linux or
FreeBSD).
* Has a graphical interface (work in progress) * Has a graphical interface (work in progress)
Supported disk image formats (read-only) Supported disk image formats (read-only)
======================================== ========================================
* Apple Disk Archival/Retrieval Tool (DART) * Apple Disk Archival/Retrieval Tool (DART)
* Apple II nibble images (NIB) * Apple II nibble images (NIB)
* BlindWrite 4 TOC files (.BWT/.BWI/.BWS) * BlindWrite 4 TOC files (.BWT/.BWI/.BWS)
@@ -84,6 +88,7 @@ Supported disk image formats (read-only)
Supported disk image formats (read and write) Supported disk image formats (read and write)
============================================= =============================================
* Alcohol 120% Media Descriptor Structure (.MDS/.MDF) * Alcohol 120% Media Descriptor Structure (.MDS/.MDF)
* Anex86 disk images (.FDI for floppies, .HDI for hard disks) * Anex86 disk images (.FDI for floppies, .HDI for hard disks)
* Any 512 bytes/sector disk image format (sector by sector copy, aka raw) * Any 512 bytes/sector disk image format (sector by sector copy, aka raw)
@@ -121,6 +126,7 @@ Supported disk image formats (read and write)
Supported partitioning schemes Supported partitioning schemes
============================== ==============================
* Acorn Linux and RISCiX partitions * Acorn Linux and RISCiX partitions
* ACT Apricot partitions * ACT Apricot partitions
* Amiga Rigid Disk Block (RDB) * Amiga Rigid Disk Block (RDB)
@@ -148,6 +154,7 @@ Supported partitioning schemes
Supported file systems for read-only operations Supported file systems for read-only operations
=============================================== ===============================================
* 3DO Opera file system * 3DO Opera file system
* Apple DOS file system * Apple DOS file system
* Apple Lisa file system * Apple Lisa file system
@@ -164,6 +171,7 @@ Supported file systems for read-only operations
Supported file systems for identification and information only Supported file systems for identification and information only
============================================================== ==============================================================
* Acorn Advanced Disc Filing System * Acorn Advanced Disc Filing System
* Alexander Osipov DOS (AO-DOS for Electronika BK-0011) file system * Alexander Osipov DOS (AO-DOS for Electronika BK-0011) file system
* Amiga Fast File System v2, untested * Amiga Fast File System v2, untested
@@ -229,6 +237,7 @@ Supported file systems for identification and information only
Supported checksums Supported checksums
=================== ===================
* Adler-32 * Adler-32
* CRC-16 * CRC-16
* CRC-32 * CRC-32
@@ -242,6 +251,7 @@ Supported checksums
Supported filters Supported filters
================= =================
* Apple PCExchange (FINDER.DAT & RESOURCE.FRK) * Apple PCExchange (FINDER.DAT & RESOURCE.FRK)
* AppleDouble * AppleDouble
* AppleSingle * AppleSingle
@@ -254,11 +264,11 @@ Supported filters
Partially supported disk image formats Partially supported disk image formats
====================================== ======================================
These disk image formats cannot be read, but their contents can be checksummed on sidecar creation These disk image formats cannot be read, but their contents can be checksummed on sidecar creation
* DiscFerret * DiscFerret
* KryoFlux STREAM * KryoFlux STREAM
* SuperCardPro * SuperCardPro
License License
======= =======
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fclaunia%2FDiscImageChef.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fclaunia%2FDiscImageChef?ref=badge_large) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fclaunia%2FDiscImageChef.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fclaunia%2FDiscImageChef?ref=badge_large)