Use Spectre for image decode command.

This commit is contained in:
2021-09-14 02:47:37 +01:00
parent 33272b8ace
commit 3111815da0

View File

@@ -40,6 +40,7 @@ using Aaru.Core;
using Aaru.Decoders.ATA;
using Aaru.Decoders.CD;
using Aaru.Decoders.SCSI;
using Spectre.Console;
namespace Aaru.Commands.Image
{
@@ -99,10 +100,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("decode");
@@ -115,7 +135,13 @@ namespace Aaru.Commands.Image
AaruConsole.DebugWriteLine("Decode 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)
{
@@ -124,7 +150,13 @@ namespace Aaru.Commands.Image
return (int)ErrorNumber.CannotOpenFile;
}
IMediaImage inputFormat = ImageFormat.Detect(inputFilter);
IMediaImage inputFormat = null;
Core.Spectre.ProgressSingleSpinner(ctx =>
{
ctx.AddTask("Identifying image format...").IsIndeterminate();
inputFormat = ImageFormat.Detect(inputFilter);
});
if(inputFormat == null)
{
@@ -133,7 +165,22 @@ namespace Aaru.Commands.Image
return (int)ErrorNumber.UnrecognizedFormat;
}
inputFormat.Open(inputFilter);
bool opened = false;
Core.Spectre.ProgressSingleSpinner(ctx =>
{
ctx.AddTask("Opening image file...").IsIndeterminate();
opened = inputFormat.Open(inputFilter);
});
if(!opened)
{
AaruConsole.WriteLine("Unable to open image format");
AaruConsole.WriteLine("No error given");
return (int)ErrorNumber.CannotOpenFormat;
}
Statistics.AddMediaFormat(inputFormat.Format);
Statistics.AddMedia(inputFormat.Info.MediaType, false);
Statistics.AddFilter(inputFilter.Name);
@@ -153,7 +200,7 @@ namespace Aaru.Commands.Image
AaruConsole.WriteLine("Error reading SCSI INQUIRY response from disc image");
else
{
AaruConsole.WriteLine("SCSI INQUIRY command response:");
AaruConsole.WriteLine("[bold]SCSI INQUIRY command response:[/]");
AaruConsole.
WriteLine("================================================================================");
@@ -174,7 +221,7 @@ namespace Aaru.Commands.Image
AaruConsole.WriteLine("Error reading ATA IDENTIFY DEVICE response from disc image");
else
{
AaruConsole.WriteLine("ATA IDENTIFY DEVICE command response:");
AaruConsole.WriteLine("[bold]ATA IDENTIFY DEVICE command response:[/]");
AaruConsole.
WriteLine("================================================================================");
@@ -196,7 +243,7 @@ namespace Aaru.Commands.Image
WriteLine("Error reading ATA IDENTIFY PACKET DEVICE response from disc image");
else
{
AaruConsole.WriteLine("ATA IDENTIFY PACKET DEVICE command response:");
AaruConsole.WriteLine("[bold]ATA IDENTIFY PACKET DEVICE command response:[/]");
AaruConsole.
WriteLine("================================================================================");
@@ -217,7 +264,7 @@ namespace Aaru.Commands.Image
AaruConsole.WriteLine("Error reading CD ATIP from disc image");
else
{
AaruConsole.WriteLine("CD ATIP:");
AaruConsole.WriteLine("[bold]CD ATIP:[/]");
AaruConsole.
WriteLine("================================================================================");
@@ -238,7 +285,7 @@ namespace Aaru.Commands.Image
AaruConsole.WriteLine("Error reading CD full TOC from disc image");
else
{
AaruConsole.WriteLine("CD full TOC:");
AaruConsole.WriteLine("[bold]CD full TOC:[/]");
AaruConsole.
WriteLine("================================================================================");
@@ -259,7 +306,7 @@ namespace Aaru.Commands.Image
AaruConsole.WriteLine("Error reading CD PMA from disc image");
else
{
AaruConsole.WriteLine("CD PMA:");
AaruConsole.WriteLine("[bold]CD PMA:[/]");
AaruConsole.
WriteLine("================================================================================");
@@ -280,7 +327,7 @@ namespace Aaru.Commands.Image
AaruConsole.WriteLine("Error reading CD session information from disc image");
else
{
AaruConsole.WriteLine("CD session information:");
AaruConsole.WriteLine("[bold]CD session information:[/]");
AaruConsole.
WriteLine("================================================================================");
@@ -301,7 +348,7 @@ namespace Aaru.Commands.Image
AaruConsole.WriteLine("Error reading CD-TEXT from disc image");
else
{
AaruConsole.WriteLine("CD-TEXT:");
AaruConsole.WriteLine("[bold]CD-TEXT:[/]");
AaruConsole.
WriteLine("================================================================================");
@@ -322,7 +369,7 @@ namespace Aaru.Commands.Image
AaruConsole.WriteLine("Error reading CD TOC from disc image");
else
{
AaruConsole.WriteLine("CD TOC:");
AaruConsole.WriteLine("[bold]CD TOC:[/]");
AaruConsole.
WriteLine("================================================================================");