diff --git a/Aaru.Core/ImageInfo.cs b/Aaru.Core/ImageInfo.cs
index a8946d8f7..e8bdf254e 100644
--- a/Aaru.Core/ImageInfo.cs
+++ b/Aaru.Core/ImageInfo.cs
@@ -48,6 +48,7 @@ using Aaru.Decoders.SCSI;
using Aaru.Decoders.Xbox;
using Aaru.Helpers;
using Schemas;
+using Spectre.Console;
using DDS = Aaru.Decoders.DVD.DDS;
using DMI = Aaru.Decoders.Xbox.DMI;
using Inquiry = Aaru.Decoders.SCSI.Inquiry;
@@ -72,19 +73,23 @@ namespace Aaru.Core
/// Media image
public static void PrintImageInfo(IMediaImage imageFormat)
{
- AaruConsole.WriteLine("Image information:");
+ Table table;
+
+ AaruConsole.WriteLine("[bold]Image information:[/]");
if(!string.IsNullOrWhiteSpace(imageFormat.Info.Version))
- AaruConsole.WriteLine("Format: {0} version {1}", imageFormat.Format, imageFormat.Info.Version);
+ AaruConsole.WriteLine("[bold]Format:[/] [italic]{0}[/] version {1}", Markup.Escape(imageFormat.Format),
+ Markup.Escape(imageFormat.Info.Version));
else
- AaruConsole.WriteLine("Format: {0}", imageFormat.Format);
+ AaruConsole.WriteLine("[bold]Format:[/] [italic]{0}[/]", Markup.Escape(imageFormat.Format));
if(!string.IsNullOrWhiteSpace(imageFormat.Info.Application) &&
!string.IsNullOrWhiteSpace(imageFormat.Info.ApplicationVersion))
- AaruConsole.WriteLine("Was created with {0} version {1}", imageFormat.Info.Application,
- imageFormat.Info.ApplicationVersion);
+ AaruConsole.WriteLine("Was created with [italic]{0}[/] version [italic]{1}[/]",
+ Markup.Escape(imageFormat.Info.Application),
+ Markup.Escape(imageFormat.Info.ApplicationVersion));
else if(!string.IsNullOrWhiteSpace(imageFormat.Info.Application))
- AaruConsole.WriteLine("Was created with {0}", imageFormat.Info.Application);
+ AaruConsole.WriteLine("Was created with [italic]{0}[/]", Markup.Escape(imageFormat.Info.Application));
AaruConsole.WriteLine("Image without headers is {0} bytes long", imageFormat.Info.ImageSize);
@@ -94,7 +99,7 @@ namespace Aaru.Core
imageFormat.Info.Sectors * imageFormat.Info.SectorSize);
if(!string.IsNullOrWhiteSpace(imageFormat.Info.Creator))
- AaruConsole.WriteLine("Created by: {0}", imageFormat.Info.Creator);
+ AaruConsole.WriteLine("[bold]Created by:[/] {0}", Markup.Escape(imageFormat.Info.Creator));
if(imageFormat.Info.CreationTime != DateTime.MinValue)
AaruConsole.WriteLine("Created on {0}", imageFormat.Info.CreationTime);
@@ -102,14 +107,14 @@ namespace Aaru.Core
if(imageFormat.Info.LastModificationTime != DateTime.MinValue)
AaruConsole.WriteLine("Last modified on {0}", imageFormat.Info.LastModificationTime);
- AaruConsole.WriteLine("Contains a media of type {0} and XML type {1}", imageFormat.Info.MediaType,
- imageFormat.Info.XmlMediaType);
+ AaruConsole.WriteLine("Contains a media of type [italic]{0}[/] and XML type [italic]{1}[/]",
+ imageFormat.Info.MediaType, imageFormat.Info.XmlMediaType);
AaruConsole.WriteLine("{0} partitions", imageFormat.Info.HasPartitions ? "Has" : "Doesn't have");
AaruConsole.WriteLine("{0} sessions", imageFormat.Info.HasSessions ? "Has" : "Doesn't have");
if(!string.IsNullOrWhiteSpace(imageFormat.Info.Comments))
- AaruConsole.WriteLine("Comments: {0}", imageFormat.Info.Comments);
+ AaruConsole.WriteLine("[bold]Comments:[/] {0}", Markup.Escape(imageFormat.Info.Comments));
if(imageFormat.Info.MediaSequence != 0 &&
imageFormat.Info.LastMediaSequence != 0)
@@ -117,51 +122,62 @@ namespace Aaru.Core
imageFormat.Info.LastMediaSequence);
if(!string.IsNullOrWhiteSpace(imageFormat.Info.MediaTitle))
- AaruConsole.WriteLine("Media title: {0}", imageFormat.Info.MediaTitle);
+ AaruConsole.WriteLine("[bold]Media title:[/] [italic]{0}[/]",
+ Markup.Escape(imageFormat.Info.MediaTitle));
if(!string.IsNullOrWhiteSpace(imageFormat.Info.MediaManufacturer))
- AaruConsole.WriteLine("Media manufacturer: {0}", imageFormat.Info.MediaManufacturer);
+ AaruConsole.WriteLine("[bold]Media manufacturer:[/] [italic]{0}[/]",
+ Markup.Escape(imageFormat.Info.MediaManufacturer));
if(!string.IsNullOrWhiteSpace(imageFormat.Info.MediaModel))
- AaruConsole.WriteLine("Media model: {0}", imageFormat.Info.MediaModel);
+ AaruConsole.WriteLine("[bold]Media model:[/] [italic]{0}[/]",
+ Markup.Escape(imageFormat.Info.MediaModel));
if(!string.IsNullOrWhiteSpace(imageFormat.Info.MediaSerialNumber))
- AaruConsole.WriteLine("Media serial number: {0}", imageFormat.Info.MediaSerialNumber);
+ AaruConsole.WriteLine("[bold]Media serial number:[/] [italic]{0}[/]",
+ Markup.Escape(imageFormat.Info.MediaSerialNumber));
if(!string.IsNullOrWhiteSpace(imageFormat.Info.MediaBarcode))
- AaruConsole.WriteLine("Media barcode: {0}", imageFormat.Info.MediaBarcode);
+ AaruConsole.WriteLine("[bold]Media barcode:[/] [italic]{0}[/]",
+ Markup.Escape(imageFormat.Info.MediaBarcode));
if(!string.IsNullOrWhiteSpace(imageFormat.Info.MediaPartNumber))
- AaruConsole.WriteLine("Media part number: {0}", imageFormat.Info.MediaPartNumber);
+ AaruConsole.WriteLine("[bold]Media part number:[/] [italic]{0}[/]",
+ Markup.Escape(imageFormat.Info.MediaPartNumber));
if(!string.IsNullOrWhiteSpace(imageFormat.Info.DriveManufacturer))
- AaruConsole.WriteLine("Drive manufacturer: {0}", imageFormat.Info.DriveManufacturer);
+ AaruConsole.WriteLine("[bold]Drive manufacturer:[/] [italic]{0}[/]",
+ Markup.Escape(imageFormat.Info.DriveManufacturer));
if(!string.IsNullOrWhiteSpace(imageFormat.Info.DriveModel))
- AaruConsole.WriteLine("Drive model: {0}", imageFormat.Info.DriveModel);
+ AaruConsole.WriteLine("[bold]Drive model:[/] [italic]{0}[/]",
+ Markup.Escape(imageFormat.Info.DriveModel));
if(!string.IsNullOrWhiteSpace(imageFormat.Info.DriveSerialNumber))
- AaruConsole.WriteLine("Drive serial number: {0}", imageFormat.Info.DriveSerialNumber);
+ AaruConsole.WriteLine("[bold]Drive serial number:[/] [italic]{0}[/]",
+ Markup.Escape(imageFormat.Info.DriveSerialNumber));
if(!string.IsNullOrWhiteSpace(imageFormat.Info.DriveFirmwareRevision))
- AaruConsole.WriteLine("Drive firmware info: {0}", imageFormat.Info.DriveFirmwareRevision);
+ AaruConsole.WriteLine("[bold]Drive firmware info:[/] [italic]{0}[/]",
+ Markup.Escape(imageFormat.Info.DriveFirmwareRevision));
if(imageFormat.Info.Cylinders > 0 &&
imageFormat.Info.Heads > 0 &&
imageFormat.Info.SectorsPerTrack > 0 &&
imageFormat.Info.XmlMediaType != XmlMediaType.OpticalDisc &&
(!(imageFormat is ITapeImage tapeImage) || !tapeImage.IsTape))
- AaruConsole.WriteLine("Media geometry: {0} cylinders, {1} heads, {2} sectors per track",
- imageFormat.Info.Cylinders, imageFormat.Info.Heads,
- imageFormat.Info.SectorsPerTrack);
+ AaruConsole.
+ WriteLine("[bold]Media geometry:[/] [italic]{0} cylinders, {1} heads, {2} sectors per track[/]",
+ imageFormat.Info.Cylinders, imageFormat.Info.Heads, imageFormat.Info.SectorsPerTrack);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Count > 0)
{
- AaruConsole.WriteLine("Contains {0} readable media tags:", imageFormat.Info.ReadableMediaTags.Count);
+ AaruConsole.WriteLine("[bold]Contains {0} readable media tags:[/]",
+ imageFormat.Info.ReadableMediaTags.Count);
foreach(MediaTagType tag in imageFormat.Info.ReadableMediaTags.OrderBy(t => t))
- AaruConsole.Write("{0} ", tag);
+ AaruConsole.Write("[italic]{0}[/] ", Markup.Escape(tag.ToString()));
AaruConsole.WriteLine();
}
@@ -169,10 +185,11 @@ namespace Aaru.Core
if(imageFormat.Info.ReadableSectorTags != null &&
imageFormat.Info.ReadableSectorTags.Count > 0)
{
- AaruConsole.WriteLine("Contains {0} readable sector tags:", imageFormat.Info.ReadableSectorTags.Count);
+ AaruConsole.WriteLine("[bold]Contains {0} readable sector tags:[/]",
+ imageFormat.Info.ReadableSectorTags.Count);
foreach(SectorTagType tag in imageFormat.Info.ReadableSectorTags.OrderBy(t => t))
- AaruConsole.Write("{0} ", tag);
+ AaruConsole.Write("[italic]{0}[/] ", tag);
AaruConsole.WriteLine();
}
@@ -193,7 +210,7 @@ namespace Aaru.Core
Array.Copy(inquiry, 8, scsiVendorId, 0, 8);
}
- AaruConsole.WriteLine("SCSI INQUIRY contained in image:");
+ AaruConsole.WriteLine("[bold]SCSI INQUIRY contained in image:[/]");
AaruConsole.Write("{0}", Inquiry.Prettify(inquiry));
AaruConsole.WriteLine();
}
@@ -202,7 +219,7 @@ namespace Aaru.Core
{
byte[] identify = imageFormat.ReadDiskTag(MediaTagType.ATA_IDENTIFY);
- AaruConsole.WriteLine("ATA IDENTIFY contained in image:");
+ AaruConsole.WriteLine("[bold]ATA IDENTIFY contained in image:[/]");
AaruConsole.Write("{0}", Identify.Prettify(identify));
AaruConsole.WriteLine();
}
@@ -211,7 +228,7 @@ namespace Aaru.Core
{
byte[] identify = imageFormat.ReadDiskTag(MediaTagType.ATAPI_IDENTIFY);
- AaruConsole.WriteLine("ATAPI IDENTIFY contained in image:");
+ AaruConsole.WriteLine("[bold]ATAPI IDENTIFY contained in image:[/]");
AaruConsole.Write("{0}", Identify.Prettify(identify));
AaruConsole.WriteLine();
}
@@ -223,7 +240,7 @@ namespace Aaru.Core
if(decMode.HasValue)
{
- AaruConsole.WriteLine("SCSI MODE SENSE (10) contained in image:");
+ AaruConsole.WriteLine("[bold]SCSI MODE SENSE (10) contained in image:[/]");
PrintScsiModePages.Print(decMode.Value, scsiDeviceType, scsiVendorId);
AaruConsole.WriteLine();
}
@@ -235,7 +252,7 @@ namespace Aaru.Core
if(decMode.HasValue)
{
- AaruConsole.WriteLine("SCSI MODE SENSE (6) contained in image:");
+ AaruConsole.WriteLine("[bold]SCSI MODE SENSE (6) contained in image:[/]");
PrintScsiModePages.Print(decMode.Value, scsiDeviceType, scsiVendorId);
AaruConsole.WriteLine();
}
@@ -265,7 +282,7 @@ namespace Aaru.Core
toc = tmp;
}
- AaruConsole.WriteLine("CompactDisc Table of Contents contained in image:");
+ AaruConsole.WriteLine("[bold]CompactDisc Table of Contents contained in image:[/]");
AaruConsole.Write("{0}", FullTOC.Prettify(toc));
AaruConsole.WriteLine();
}
@@ -288,7 +305,7 @@ namespace Aaru.Core
pma = tmp;
}
- AaruConsole.WriteLine("CompactDisc Power Management Area contained in image:");
+ AaruConsole.WriteLine("[bold]CompactDisc Power Management Area contained in image:[/]");
AaruConsole.Write("{0}", PMA.Prettify(pma));
AaruConsole.WriteLine();
}
@@ -311,7 +328,7 @@ namespace Aaru.Core
atip = tmp;
}
- AaruConsole.WriteLine("CompactDisc Absolute Time In Pregroove (ATIP) contained in image:");
+ AaruConsole.WriteLine("[bold]CompactDisc Absolute Time In Pregroove (ATIP) contained in image:[/]");
AaruConsole.Write("{0}", ATIP.Prettify(atip));
AaruConsole.WriteLine();
}
@@ -333,7 +350,7 @@ namespace Aaru.Core
cdtext = tmp;
}
- AaruConsole.WriteLine("CompactDisc Lead-in's CD-Text contained in image:");
+ AaruConsole.WriteLine("[bold]CompactDisc Lead-in's CD-Text contained in image:[/]");
AaruConsole.Write("{0}", CDTextOnLeadIn.Prettify(cdtext));
AaruConsole.WriteLine();
}
@@ -342,7 +359,7 @@ namespace Aaru.Core
{
byte[] mcn = imageFormat.ReadDiskTag(MediaTagType.CD_MCN);
- AaruConsole.WriteLine("CompactDisc Media Catalogue Number contained in image: {0}",
+ AaruConsole.WriteLine("[bold]CompactDisc Media Catalogue Number contained in image:[/] {0}",
Encoding.UTF8.GetString(mcn));
AaruConsole.WriteLine();
@@ -352,7 +369,7 @@ namespace Aaru.Core
{
byte[] pri = imageFormat.ReadDiskTag(MediaTagType.DVDR_PreRecordedInfo);
- AaruConsole.WriteLine("DVD-R(W) Pre-Recorded Information:");
+ AaruConsole.WriteLine("[bold]DVD-R(W) Pre-Recorded Information:[/]");
AaruConsole.Write("{0}", PRI.Prettify(pri));
AaruConsole.WriteLine();
}
@@ -361,7 +378,7 @@ namespace Aaru.Core
{
byte[] pfi = imageFormat.ReadDiskTag(MediaTagType.DVD_PFI);
- AaruConsole.WriteLine("DVD Physical Format Information contained in image:");
+ AaruConsole.WriteLine("[bold]DVD Physical Format Information contained in image:[/]");
AaruConsole.Write("{0}", PFI.Prettify(pfi, imageFormat.Info.MediaType));
AaruConsole.WriteLine();
}
@@ -370,7 +387,7 @@ namespace Aaru.Core
{
byte[] dds = imageFormat.ReadDiskTag(MediaTagType.DVDRAM_DDS);
- AaruConsole.WriteLine("DVD-RAM Disc Definition Structure contained in image:");
+ AaruConsole.WriteLine("[bold]DVD-RAM Disc Definition Structure contained in image:[/]");
AaruConsole.Write("{0}", DDS.Prettify(dds));
AaruConsole.WriteLine();
}
@@ -379,7 +396,7 @@ namespace Aaru.Core
{
byte[] pfi = imageFormat.ReadDiskTag(MediaTagType.DVDR_PFI);
- AaruConsole.WriteLine("DVD-R Physical Format Information contained in image:");
+ AaruConsole.WriteLine("[bold]DVD-R Physical Format Information contained in image:[/]");
AaruConsole.Write("{0}", PFI.Prettify(pfi, imageFormat.Info.MediaType));
AaruConsole.WriteLine();
}
@@ -388,7 +405,7 @@ namespace Aaru.Core
{
byte[] di = imageFormat.ReadDiskTag(MediaTagType.BD_DI);
- AaruConsole.WriteLine("Bluray Disc Information contained in image:");
+ AaruConsole.WriteLine("[bold]Bluray Disc Information contained in image:[/]");
AaruConsole.Write("{0}", DI.Prettify(di));
AaruConsole.WriteLine();
}
@@ -397,7 +414,7 @@ namespace Aaru.Core
{
byte[] dds = imageFormat.ReadDiskTag(MediaTagType.BD_DDS);
- AaruConsole.WriteLine("Bluray Disc Definition Structure contained in image:");
+ AaruConsole.WriteLine("[bold]Bluray Disc Definition Structure contained in image:[/]");
AaruConsole.Write("{0}", Decoders.Bluray.DDS.Prettify(dds));
AaruConsole.WriteLine();
}
@@ -406,7 +423,7 @@ namespace Aaru.Core
{
byte[] cis = imageFormat.ReadDiskTag(MediaTagType.PCMCIA_CIS);
- AaruConsole.WriteLine("PCMCIA CIS:");
+ AaruConsole.WriteLine("[bold]PCMCIA CIS:[/]");
Tuple[] tuples = CIS.GetTuples(cis);
if(tuples != null)
@@ -480,7 +497,7 @@ namespace Aaru.Core
{
byte[] cid = imageFormat.ReadDiskTag(MediaTagType.SD_CID);
- AaruConsole.WriteLine("SecureDigital CID contained in image:");
+ AaruConsole.WriteLine("[bold]SecureDigital CID contained in image:[/]");
AaruConsole.Write("{0}", Decoders.SecureDigital.Decoders.PrettifyCID(cid));
AaruConsole.WriteLine();
}
@@ -489,7 +506,7 @@ namespace Aaru.Core
{
byte[] csd = imageFormat.ReadDiskTag(MediaTagType.SD_CSD);
- AaruConsole.WriteLine("SecureDigital CSD contained in image:");
+ AaruConsole.WriteLine("[bold]SecureDigital CSD contained in image:[/]");
AaruConsole.Write("{0}", Decoders.SecureDigital.Decoders.PrettifyCSD(csd));
AaruConsole.WriteLine();
}
@@ -498,7 +515,7 @@ namespace Aaru.Core
{
byte[] scr = imageFormat.ReadDiskTag(MediaTagType.SD_SCR);
- AaruConsole.WriteLine("SecureDigital SCR contained in image:");
+ AaruConsole.WriteLine("[bold]SecureDigital SCR contained in image:[/]");
AaruConsole.Write("{0}", Decoders.SecureDigital.Decoders.PrettifySCR(scr));
AaruConsole.WriteLine();
}
@@ -507,7 +524,7 @@ namespace Aaru.Core
{
byte[] ocr = imageFormat.ReadDiskTag(MediaTagType.SD_OCR);
- AaruConsole.WriteLine("SecureDigital OCR contained in image:");
+ AaruConsole.WriteLine("[bold]SecureDigital OCR contained in image:[/]");
AaruConsole.Write("{0}", Decoders.SecureDigital.Decoders.PrettifyOCR(ocr));
AaruConsole.WriteLine();
}
@@ -516,7 +533,7 @@ namespace Aaru.Core
{
byte[] cid = imageFormat.ReadDiskTag(MediaTagType.MMC_CID);
- AaruConsole.WriteLine("MultiMediaCard CID contained in image:");
+ AaruConsole.WriteLine("[bold]MultiMediaCard CID contained in image:[/]");
AaruConsole.Write("{0}", Decoders.MMC.Decoders.PrettifyCID(cid));
AaruConsole.WriteLine();
}
@@ -525,7 +542,7 @@ namespace Aaru.Core
{
byte[] csd = imageFormat.ReadDiskTag(MediaTagType.MMC_CSD);
- AaruConsole.WriteLine("MultiMediaCard CSD contained in image:");
+ AaruConsole.WriteLine("[bold]MultiMediaCard CSD contained in image:[/]");
AaruConsole.Write("{0}", Decoders.MMC.Decoders.PrettifyCSD(csd));
AaruConsole.WriteLine();
}
@@ -534,7 +551,7 @@ namespace Aaru.Core
{
byte[] ecsd = imageFormat.ReadDiskTag(MediaTagType.MMC_ExtendedCSD);
- AaruConsole.WriteLine("MultiMediaCard ExtendedCSD contained in image:");
+ AaruConsole.WriteLine("[bold]MultiMediaCard ExtendedCSD contained in image:[/]");
AaruConsole.Write("{0}", Decoders.MMC.Decoders.PrettifyExtendedCSD(ecsd));
AaruConsole.WriteLine();
}
@@ -543,7 +560,7 @@ namespace Aaru.Core
{
byte[] ocr = imageFormat.ReadDiskTag(MediaTagType.MMC_OCR);
- AaruConsole.WriteLine("MultiMediaCard OCR contained in image:");
+ AaruConsole.WriteLine("[bold]MultiMediaCard OCR contained in image:[/]");
AaruConsole.Write("{0}", Decoders.MMC.Decoders.PrettifyOCR(ocr));
AaruConsole.WriteLine();
}
@@ -552,7 +569,7 @@ namespace Aaru.Core
{
byte[] xpfi = imageFormat.ReadDiskTag(MediaTagType.Xbox_PFI);
- AaruConsole.WriteLine("Xbox Physical Format Information contained in image:");
+ AaruConsole.WriteLine("[bold]Xbox Physical Format Information contained in image:[/]");
AaruConsole.Write("{0}", PFI.Prettify(xpfi, imageFormat.Info.MediaType));
AaruConsole.WriteLine();
}
@@ -567,7 +584,7 @@ namespace Aaru.Core
if(xmi.HasValue)
{
- AaruConsole.WriteLine("Xbox DMI contained in image:");
+ AaruConsole.WriteLine("[bold]Xbox DMI contained in image:[/]");
AaruConsole.Write("{0}", DMI.PrettifyXbox(xmi));
AaruConsole.WriteLine();
}
@@ -579,7 +596,7 @@ namespace Aaru.Core
if(xmi.HasValue)
{
- AaruConsole.WriteLine("Xbox 360 DMI contained in image:");
+ AaruConsole.WriteLine("[bold]Xbox 360 DMI contained in image:[/]");
AaruConsole.Write("{0}", DMI.PrettifyXbox360(xmi));
AaruConsole.WriteLine();
}
@@ -590,7 +607,7 @@ namespace Aaru.Core
{
byte[] toc = imageFormat.ReadDiskTag(MediaTagType.Xbox_SecuritySector);
- AaruConsole.WriteLine("Xbox Security Sectors contained in image:");
+ AaruConsole.WriteLine("[bold]Xbox Security Sectors contained in image:[/]");
AaruConsole.Write("{0}", SS.Prettify(toc));
AaruConsole.WriteLine();
}
@@ -602,18 +619,23 @@ namespace Aaru.Core
if(opticalImage.Sessions != null &&
opticalImage.Sessions.Count > 0)
{
- AaruConsole.WriteLine("Image sessions:");
+ table = new Table
+ {
+ Title = new TableTitle("Image sessions")
+ };
- AaruConsole.WriteLine("{0,-9}{1,-13}{2,-12}{3,-12}{4,-12}", "Session", "First track",
- "Last track", "Start", "End");
-
- AaruConsole.WriteLine("=========================================================");
+ table.AddColumn("Session");
+ table.AddColumn("First track");
+ table.AddColumn("Last track");
+ table.AddColumn("Start");
+ table.AddColumn("End");
foreach(Session session in opticalImage.Sessions)
- AaruConsole.WriteLine("{0,-9}{1,-13}{2,-12}{3,-12}{4,-12}", session.SessionSequence,
- session.StartTrack, session.EndTrack, session.StartSector,
- session.EndSector);
+ table.AddRow(session.SessionSequence.ToString(), session.StartTrack.ToString(),
+ session.EndTrack.ToString(), session.StartSector.ToString(),
+ session.EndSector.ToString());
+ AnsiConsole.Render(table);
AaruConsole.WriteLine();
}
}
@@ -627,34 +649,47 @@ namespace Aaru.Core
if(opticalImage.Tracks != null &&
opticalImage.Tracks.Count > 0)
{
- AaruConsole.WriteLine("Image tracks:");
+ table = new Table
+ {
+ Title = new TableTitle("Image tracks")
+ };
- AaruConsole.WriteLine("{0,-7}{1,-17}{2,-6}{3,-8}{4,-12}{5,-8}{6,-12}{7,-12}", "Track", "Type",
- "Bps", "Raw bps", "Subchannel", "Pregap", "Start", "End");
-
- AaruConsole.
- WriteLine("=================================================================================");
+ table.AddColumn("Track");
+ table.AddColumn("Type");
+ table.AddColumn("Bps");
+ table.AddColumn("Raw bps");
+ table.AddColumn("Subchannel");
+ table.AddColumn("Pregap");
+ table.AddColumn("Start");
+ table.AddColumn("End");
foreach(Track track in opticalImage.Tracks)
- AaruConsole.WriteLine("{0,-7}{1,-17}{2,-6}{3,-8}{4,-12}{5,-8}{6,-12}{7,-12}",
- track.TrackSequence, track.TrackType, track.TrackBytesPerSector,
- track.TrackRawBytesPerSector, track.TrackSubchannelType,
- track.TrackPregap, track.TrackStartSector, track.TrackEndSector);
+ table.AddRow(track.TrackSequence.ToString(), track.TrackType.ToString(),
+ track.TrackBytesPerSector.ToString(), track.TrackRawBytesPerSector.ToString(),
+ track.TrackSubchannelType.ToString(), track.TrackPregap.ToString(),
+ track.TrackStartSector.ToString(), track.TrackEndSector.ToString());
+
+ AnsiConsole.Render(table);
if(opticalImage.Tracks.Any(t => t.Indexes.Any()))
{
AaruConsole.WriteLine();
- AaruConsole.WriteLine("Track indexes:");
+ table = new Table
+ {
+ Title = new TableTitle("Image indexes")
+ };
- AaruConsole.WriteLine("{0,-7}{1,-7}{2,-12}", "Track", "Index", "Start");
-
- AaruConsole.WriteLine("=======================");
+ table.AddColumn("Track");
+ table.AddColumn("Index");
+ table.AddColumn("Start");
foreach(Track track in opticalImage.Tracks)
foreach(KeyValuePair index in track.Indexes)
- AaruConsole.WriteLine("{0,-7}{1,-7}{2,-12}", track.TrackSequence, index.Key,
- index.Value);
+ table.AddRow(track.TrackSequence.ToString(), index.Key.ToString(),
+ index.Value.ToString());
+
+ AnsiConsole.Render(table);
}
}
}
@@ -709,37 +744,27 @@ namespace Aaru.Core
}
}
- manufacturerLen += 2;
- modelLen += 2;
- serialLen += 2;
- softwareLen += 2;
- versionLen += 2;
- osLen += 2;
- sectorLen += 2;
- sectorLen += 2;
+ table = new Table
+ {
+ Title = new TableTitle("Dump hardware information")
+ };
- char[] separator = new char[manufacturerLen + modelLen + serialLen + softwareLen + versionLen + osLen +
- sectorLen + sectorLen];
-
- for(int i = 0; i < separator.Length; i++)
- separator[i] = '=';
-
- string format =
- $"{{0,-{manufacturerLen}}}{{1,-{modelLen}}}{{2,-{serialLen}}}{{3,-{softwareLen}}}{{4,-{versionLen}}}{{5,-{osLen}}}{{6,-{sectorLen}}}{{7,-{sectorLen}}}";
-
- AaruConsole.WriteLine("Dump hardware information:");
-
- AaruConsole.WriteLine(format, MANUFACTURER_STRING, MODEL_STRING, SERIAL_STRING, SOFTWARE_STRING,
- VERSION_STRING, OS_STRING, START_STRING, END_STRING);
-
- AaruConsole.WriteLine(new string(separator));
+ table.AddColumn(MANUFACTURER_STRING);
+ table.AddColumn(MODEL_STRING);
+ table.AddColumn(SERIAL_STRING);
+ table.AddColumn(SOFTWARE_STRING);
+ table.AddColumn(VERSION_STRING);
+ table.AddColumn(OS_STRING);
+ table.AddColumn(START_STRING);
+ table.AddColumn(END_STRING);
foreach(DumpHardwareType dump in imageFormat.DumpHardware)
{
foreach(ExtentType extent in dump.Extents)
- AaruConsole.WriteLine(format, dump.Manufacturer, dump.Model, dump.Serial, dump.Software.Name,
- dump.Software.Version, dump.Software.OperatingSystem, extent.Start,
- extent.End);
+ table.AddRow(Markup.Escape(dump.Manufacturer), Markup.Escape(dump.Model),
+ Markup.Escape(dump.Serial), Markup.Escape(dump.Software.Name),
+ Markup.Escape(dump.Software.Version), Markup.Escape(dump.Software.OperatingSystem),
+ extent.Start.ToString(), extent.End.ToString());
}
AaruConsole.WriteLine();
diff --git a/Aaru/Commands/Image/Info.cs b/Aaru/Commands/Image/Info.cs
index 5f249ef7e..bb57dd147 100644
--- a/Aaru/Commands/Image/Info.cs
+++ b/Aaru/Commands/Image/Info.cs
@@ -38,6 +38,7 @@ using Aaru.CommonTypes.Enums;
using Aaru.CommonTypes.Interfaces;
using Aaru.Console;
using Aaru.Core;
+using Spectre.Console;
namespace Aaru.Commands.Image
{
@@ -61,10 +62,29 @@ namespace Aaru.Commands.Image
MainClass.PrintCopyright();
if(debug)
- AaruConsole.DebugWriteLineEvent += System.Console.Error.WriteLine;
+ {
+ IAnsiConsole stderrConsole = AnsiConsole.Create(new AnsiConsoleSettings
+ {
+ Out = new AnsiConsoleOutput(System.Console.Error)
+ });
+
+ AaruConsole.DebugWriteLineEvent += (format, objects) =>
+ {
+ if(objects is null)
+ stderrConsole.MarkupLine(format);
+ else
+ stderrConsole.MarkupLine(format, objects);
+ };
+ }
if(verbose)
- AaruConsole.VerboseWriteLineEvent += System.Console.WriteLine;
+ AaruConsole.WriteEvent += (format, objects) =>
+ {
+ if(objects is null)
+ AnsiConsole.Markup(format);
+ else
+ AnsiConsole.Markup(format, objects);
+ };
Statistics.AddCommand("image-info");
@@ -73,7 +93,13 @@ namespace Aaru.Commands.Image
AaruConsole.DebugWriteLine("Image-info command", "--verbose={0}", verbose);
var filtersList = new FiltersList();
- IFilter inputFilter = filtersList.GetFilter(imagePath);
+ IFilter inputFilter = null;
+
+ Core.Spectre.ProgressSingleSpinner(ctx =>
+ {
+ ctx.AddTask("Identifying file filter...").IsIndeterminate();
+ inputFilter = filtersList.GetFilter(imagePath);
+ });
if(inputFilter == null)
{
@@ -84,7 +110,13 @@ namespace Aaru.Commands.Image
try
{
- IMediaImage imageFormat = ImageFormat.Detect(inputFilter);
+ IMediaImage imageFormat = null;
+
+ Core.Spectre.ProgressSingleSpinner(ctx =>
+ {
+ ctx.AddTask("Identifying image format...").IsIndeterminate();
+ imageFormat = ImageFormat.Detect(inputFilter);
+ });
if(imageFormat == null)
{
@@ -98,7 +130,15 @@ namespace Aaru.Commands.Image
try
{
- if(!imageFormat.Open(inputFilter))
+ bool opened = false;
+
+ Core.Spectre.ProgressSingleSpinner(ctx =>
+ {
+ ctx.AddTask("Opening image file...").IsIndeterminate();
+ opened = imageFormat.Open(inputFilter);
+ });
+
+ if(!opened)
{
AaruConsole.WriteLine("Unable to open image format");
AaruConsole.WriteLine("No error given");