Colorify image info command.

This commit is contained in:
2025-08-18 02:34:48 +01:00
parent 0c098d2a69
commit 499f1fd7b0
7 changed files with 193 additions and 127 deletions

View File

@@ -1,8 +1,8 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Aaru" type="DotNetProject" factoryName=".NET Project">
<option name="EXE_PATH" value="$PROJECT_DIR$/Aaru/bin/Debug/net10.0/aaru" />
<option name="PROGRAM_PARAMETERS" value="fs ls qcow.qc.lz" />
<option name="WORKING_DIRECTORY" value="/mnt/AaruTests/Media image formats/QEMU/QEMU Copy On Write" />
<option name="PROGRAM_PARAMETERS" value="i info report_cdrom.aif" />
<option name="WORKING_DIRECTORY" value="/mnt/AaruTests/Media image formats/AaruFormat/V1" />
<option name="PASS_PARENT_ENVS" value="1" />
<option name="USE_EXTERNAL_CONSOLE" value="0" />
<option name="ENV_FILE_PATHS" value="" />

View File

@@ -74,4 +74,9 @@
<PackageReference Include="System.Runtime.Handles"/>
<PackageReference Include="System.Runtime.InteropServices"/>
</ItemGroup>
<ItemGroup>
<Reference Include="Spectre.Console.Json">
<HintPath>..\..\..\..\.nuget\packages\spectre.console.json\0.50.0\lib\net9.0\Spectre.Console.Json.dll</HintPath>
</Reference>
</ItemGroup>
</Project>

View File

@@ -53,6 +53,7 @@ using Aaru.Logging;
using Humanizer;
using Humanizer.Bytes;
using Spectre.Console;
using Spectre.Console.Json;
using DDS = Aaru.Decoders.DVD.DDS;
using DMI = Aaru.Decoders.Xbox.DMI;
using Inquiry = Aaru.Decoders.SCSI.Inquiry;
@@ -212,7 +213,7 @@ public static class ImageInfo
imageFormat.Info.ReadableMediaTags.Count);
foreach(MediaTagType tag in imageFormat.Info.ReadableMediaTags.OrderBy(t => t))
AaruLogging.Write("[italic]{0}[/] ", Markup.Escape(tag.ToString()));
AaruLogging.Write("[italic][rosybrown]{0}[/][/] ", Markup.Escape(tag.ToString()));
AaruLogging.WriteLine();
}
@@ -223,7 +224,7 @@ public static class ImageInfo
imageFormat.Info.ReadableSectorTags.Count);
foreach(SectorTagType tag in imageFormat.Info.ReadableSectorTags.OrderBy(t => t))
AaruLogging.Write("[italic]{0}[/] ", tag);
AaruLogging.Write("[italic][rosybrown]{0}[/][/] ", Markup.Escape(tag.ToString()));
AaruLogging.WriteLine();
}
@@ -272,6 +273,8 @@ public static class ImageInfo
Title = new TableTitle(Localization.Core.Title_Dump_hardware_information)
};
AaruLogging.Information(Localization.Core.Title_Dump_hardware_information);
table.AddColumn(Localization.Core.Title_Manufacturer);
table.AddColumn(Localization.Core.Title_Model);
table.AddColumn(Localization.Core.Title_Serial);
@@ -280,22 +283,31 @@ public static class ImageInfo
table.AddColumn(Localization.Core.Title_Operating_system);
table.AddColumn(Localization.Core.Title_Start);
table.AddColumn(Localization.Core.Title_End);
table.Border(TableBorder.Rounded);
table.BorderColor(Color.Yellow);
table.Columns[6].RightAligned();
table.Columns[7].RightAligned();
foreach(DumpHardware dump in imageFormat.DumpHardware)
{
foreach(Extent extent in dump.Extents)
{
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());
table.AddRow($"[navy]{Markup.Escape(dump.Manufacturer ?? "")}[/]",
$"[navy]{Markup.Escape(dump.Model ?? "")}[/]",
$"[fuchsia]{Markup.Escape(dump.Serial ?? "")}[/]",
$"[red3]{Markup.Escape(dump.Software.Name ?? "")}[/]",
$"[red3]{Markup.Escape(dump.Software.Version ?? "")}[/]",
$"[red3]{Markup.Escape(dump.Software.OperatingSystem ?? "")}[/]",
$"[lime]{extent.Start}[/]",
$"[lime]{extent.End}[/]");
// Write each row to AaruLogging.Information as a line
AaruLogging
.Information($"Manufacturer {dump.Manufacturer ?? ""}, model {dump.Model ?? ""}, serial {dump.Serial ?? ""}, software {dump.Software?.Name ?? ""}, version {dump.Software?.Version ?? ""}, operating system {dump.Software?.OperatingSystem ?? ""}, start {extent.Start}, end {extent.End}");
}
}
AnsiConsole.Write(table);
AaruLogging.WriteLine();
}
@@ -305,20 +317,24 @@ public static class ImageInfo
if(errno != ErrorNumber.NoError) return;
AaruLogging.WriteLine(Localization.Core.Mapping_WithMarkup);
string jsonString = JsonSerializer.Serialize(mappings,
new JsonSerializerOptions
{
WriteIndented = true,
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
Converters =
{
new JsonStringEnumConverter()
}
});
AaruLogging.WriteLine("{0}",
Markup.Escape(JsonSerializer.Serialize(mappings,
new JsonSerializerOptions
{
WriteIndented = true,
DefaultIgnoreCondition =
JsonIgnoreCondition.WhenWritingNull,
Converters =
{
new JsonStringEnumConverter()
}
})));
AaruLogging.Information(Localization.Core.Mapping_WithMarkup);
AaruLogging.Information(jsonString);
AnsiConsole.Write(new Panel(new JsonText(jsonString)).Header(Localization.Core.Mapping_WithMarkup)
.Collapse()
.RoundedBorder()
.BorderColor(Color.Yellow));
}
static void PrintBlockImageInfo(IMediaImage imageFormat)
@@ -673,14 +689,14 @@ public static class ImageInfo
case TupleCodes.CISTPL_SWIL:
case TupleCodes.CISTPL_VERS_2:
AaruLogging.Debug(MODULE_NAME,
Localization.Core.Invoke_Found_undecoded_tuple_ID_0,
tuple.Code);
Localization.Core.Invoke_Found_undecoded_tuple_ID_0,
tuple.Code);
break;
default:
AaruLogging.Debug(MODULE_NAME,
Localization.Core.Found_unknown_tuple_ID_0,
(byte)tuple.Code);
Localization.Core.Found_unknown_tuple_ID_0,
(byte)tuple.Code);
break;
}
@@ -856,19 +872,33 @@ public static class ImageInfo
Title = new TableTitle(Localization.Core.Title_Image_sessions)
};
AaruLogging.Information(Localization.Core.Title_Image_sessions);
table.Border(TableBorder.Rounded);
table.BorderColor(Color.Yellow);
table.AddColumn(Localization.Core.Title_Session);
table.AddColumn(Localization.Core.Title_First_track);
table.AddColumn(Localization.Core.Title_Last_track);
table.AddColumn(Localization.Core.Title_Start);
table.AddColumn(Localization.Core.Title_End);
table.Columns[0].RightAligned();
table.Columns[1].RightAligned();
table.Columns[2].RightAligned();
table.Columns[3].RightAligned();
table.Columns[4].RightAligned();
foreach(Session session in opticalImage.Sessions)
{
table.AddRow(session.Sequence.ToString(),
session.StartTrack.ToString(),
session.EndTrack.ToString(),
session.StartSector.ToString(),
session.EndSector.ToString());
table.AddRow($"[navy]{session.Sequence}[/]",
$"[purple]{session.StartTrack}[/]",
$"[purple]{session.EndTrack}[/]",
$"[lime]{session.StartSector}[/]",
$"[lime]{session.EndSector}[/]");
// Write all the session infomation to AaruLogging.Information in a single line
AaruLogging
.Information($"Session {session.Sequence}: first track {session.StartTrack}, last track {session.EndTrack}, start sector {session.StartSector}, end sector {session.EndSector}");
}
AnsiConsole.Write(table);
@@ -889,6 +919,9 @@ public static class ImageInfo
Title = new TableTitle(Localization.Core.Title_Image_tracks)
};
table.Border(TableBorder.Rounded);
table.BorderColor(Color.Yellow);
table.AddColumn(Localization.Core.Title_Track);
table.AddColumn(Localization.Core.Title_Type_for_media);
table.AddColumn(Localization.Core.Title_Bps);
@@ -897,17 +930,27 @@ public static class ImageInfo
table.AddColumn(Localization.Core.Title_Pregap);
table.AddColumn(Localization.Core.Title_Start);
table.AddColumn(Localization.Core.Title_End);
table.Columns[0].RightAligned();
table.Columns[2].RightAligned();
table.Columns[3].RightAligned();
table.Columns[5].RightAligned();
table.Columns[6].RightAligned();
table.Columns[7].RightAligned();
foreach(Track track in opticalImage.Tracks)
{
table.AddRow(track.Sequence.ToString(),
track.Type.ToString(),
track.BytesPerSector.ToString(),
track.RawBytesPerSector.ToString(),
track.SubchannelType.ToString(),
track.Pregap.ToString(),
track.StartSector.ToString(),
track.EndSector.ToString());
table.AddRow($"[teal]{track.Sequence}[/]",
$"[orange3]{track.Type}[/]",
$"[aqua]{track.BytesPerSector}[/]",
$"[aqua]{track.RawBytesPerSector}[/]",
$"[fuchsia]{track.SubchannelType}[/]",
$"[darkgreen]{track.Pregap}[/]",
$"[lime]{track.StartSector}[/]",
$"[lime]{track.EndSector}[/]");
// Write all the track information to AaruLogging.Information in a single line
AaruLogging
.Information($"Track {track.Sequence}: type {track.Type}, bytes per sector {track.BytesPerSector}, raw bytes per sector {track.RawBytesPerSector}, subchannel type {track.SubchannelType}, pregap {track.Pregap}, start sector {track.StartSector}, end sector {track.EndSector}");
}
AnsiConsole.Write(table);
@@ -921,14 +964,27 @@ public static class ImageInfo
Title = new TableTitle(Localization.Core.Title_Image_indexes)
};
AaruLogging.Information(Localization.Core.Title_Image_indexes);
table.Border(TableBorder.Rounded);
table.BorderColor(Color.Yellow);
table.AddColumn(Localization.Core.Title_Track);
table.AddColumn(Localization.Core.Title_Index);
table.AddColumn(Localization.Core.Title_Start);
table.Columns[0].RightAligned();
table.Columns[1].RightAligned();
table.Columns[2].RightAligned();
foreach(Track track in opticalImage.Tracks)
{
foreach(KeyValuePair<ushort, int> index in track.Indexes)
table.AddRow(track.Sequence.ToString(), index.Key.ToString(), index.Value.ToString());
{
table.AddRow($"[teal]{track.Sequence}[/]", $"[darkgreen]{index.Key}[/]", $"[lime]{index.Value}[/]");
// Write all the index information to AaruLogging.Information in a single line
AaruLogging.Information($"Track {track.Sequence}, index {index.Key}: start sector {index.Value}");
}
}
AnsiConsole.Write(table);

View File

@@ -516,10 +516,10 @@
<value>Filesystem has not been unmounted correctly or contains errors</value>
</data>
<data name="Image_without_headers_is_0_bytes_long" xml:space="preserve">
<value>Image without headers is {0} bytes long</value>
<value>[slateblue1]Image without headers is [lime]{0}[/] bytes long[/]</value>
</data>
<data name="Contains_a_media_of_0_sectors_with_a_maximum_sector_size_of_1_bytes_etc" xml:space="preserve">
<value>Contains a media of {0} sectors with a maximum sector size of {1} bytes (if all sectors are of the same size this would be {2})</value>
<value>[slateblue1]Contains a media of [lime]{0}[/] sectors with a maximum sector size of [teal]{1}[/] bytes (if all sectors are of the same size this would be [aqua]{2}[/])[/]</value>
</data>
<data name="Contains_a_media_of_type_0_and_XML_type_1" xml:space="preserve">
<value>Contains a media of type {0} and XML type {1}</value>
@@ -535,13 +535,13 @@
<comment>{0} is a person's name</comment>
</data>
<data name="Created_on_0" xml:space="preserve">
<value>Created on {0}</value>
<value>[slateblue1]Created on[/] [yellow3]{0}[/]</value>
</data>
<data name="Last_modified_on_0" xml:space="preserve">
<value>Last modified on {0}</value>
<value>[slateblue1]Last modified on[/] [yellow3]{0}[/]</value>
</data>
<data name="Media_is_number_0_on_a_set_of_1_medias" xml:space="preserve">
<value>Media is number {0} on a set of {1} medias</value>
<value>[slateblue1]Media is number [teal]{0}[/] on a set of [teal]{1}[/] medias[/]</value>
</data>
<data name="Media_manufacturer_0" xml:space="preserve">
<value>Media manufacturer: {0}</value>
@@ -553,36 +553,36 @@
<value>Drive serial number: {0}</value>
</data>
<data name="Title_Session" xml:space="preserve">
<value>Session</value>
<value>[bold][navy]Session[/][/]</value>
</data>
<data name="Title_Start" xml:space="preserve">
<value>Start</value>
<value>[bold][lime]Start[/][/]</value>
</data>
<data name="Title_First_track" xml:space="preserve">
<value>First track</value>
<value>[bold][purple]First track[/][/]</value>
</data>
<data name="Title_Last_track" xml:space="preserve">
<value>Last track</value>
<value>[bold][purple]Last track[/][/]</value>
</data>
<data name="Title_End" xml:space="preserve">
<value>End</value>
<value>[bold][lime]End[/][/]</value>
</data>
<data name="Title_Track" xml:space="preserve">
<value>Track</value>
<value>[bold][teal]Track[/][/]</value>
</data>
<data name="Title_Bps" xml:space="preserve">
<value>Bps</value>
<value>[bold][aqua]Bps[/][/]</value>
<comment>Bytes per sector</comment>
</data>
<data name="Title_Raw_bps" xml:space="preserve">
<value>Raw bps</value>
<value>[bold][aqua]Raw bps[/][/]</value>
<comment>Bytes per sector</comment>
</data>
<data name="Title_Subchannel" xml:space="preserve">
<value>Subchannel</value>
<value>[bold][fuchsia]Subchannel[/][/]</value>
</data>
<data name="Title_Pregap" xml:space="preserve">
<value>Pregap</value>
<value>[bold][darkgreen]Pregap[/][/]</value>
</data>
<data name="Title_CompactDisc" xml:space="preserve">
<value>CompactDisc</value>
@@ -3111,10 +3111,10 @@ It has no sense to do it, and it will put too much strain on the tape.</value>
<value>Trying plugin {0}</value>
</data>
<data name="Title_Index" xml:space="preserve">
<value>Index</value>
<value>[bold][darkgreen]Index[/][/]</value>
</data>
<data name="Title_Image_indexes" xml:space="preserve">
<value>Image indexes</value>
<value>[bold][blue]Image indexes[/][/]</value>
</data>
<data name="Found_0_at_1" xml:space="preserve">
<value>Found {0} @ {1}</value>
@@ -3237,176 +3237,176 @@ It has no sense to do it, and it will put too much strain on the tape.</value>
<value>Uploading partial statistics file {0}</value>
</data>
<data name="Was_created_with_0_version_1_WithMarkup" xml:space="preserve">
<value>Was created with [italic]{0}[/] version [italic]{1}[/]</value>
<value>[slateblue1]Was created with [italic][rosybrown]{0}[/][/] version [italic][rosybrown]{1}[/][/][/]</value>
</data>
<data name="Created_by_0_WithMarkup" xml:space="preserve">
<value>[bold]Created by:[/] {0}</value>
<value>[slateblue1][bold]Created by:[/][/] [green]{0}[/]</value>
</data>
<data name="Has_partitions" xml:space="preserve">
<value>Has partitions</value>
<value>[green]Has partitions[/]</value>
</data>
<data name="Doesnt_have_partitions" xml:space="preserve">
<value>Doesn't have partitions</value>
<value>[red]Doesn't have partitions[/red]</value>
</data>
<data name="Has_sessions" xml:space="preserve">
<value>Has sessions</value>
<value>[green]Has sessions[/]</value>
</data>
<data name="Doesnt_have_sessions" xml:space="preserve">
<value>Doesn't have sessions</value>
<value>[red]Doesn't have sessions[/red]</value>
</data>
<data name="Comments_0_WithMarkup" xml:space="preserve">
<value>[bold]Comments:[/] {0}</value>
<value>[slateblue1][bold]Comments:[/][/] {0}</value>
</data>
<data name="Media_title_0_WithMarkup" xml:space="preserve">
<value>[bold]Media title:[/] [italic]{0}[/]</value>
<value>[bold][slateblue1]Media title:[/][/] [italic]{0}[/]</value>
</data>
<data name="Media_manufacturer_0_WithMarkup" xml:space="preserve">
<value>[bold]Media manufacturer:[/] [italic]{0}[/]</value>
<value>[bold][slateblue1]Media manufacturer:[/][/] [italic]{0}[/]</value>
</data>
<data name="Media_model_0_WithMarkup" xml:space="preserve">
<value>[bold]Media model:[/] [italic]{0}[/]</value>
<value>[bold][slateblue1]Media model:[/][/] [italic]{0}[/]</value>
</data>
<data name="Media_serial_number_0_WithMarkup" xml:space="preserve">
<value>[bold]Media serial number:[/] [italic]{0}[/]</value>
<value>[bold][slateblue1]Media serial number:[/][/] [italic]{0}[/]</value>
</data>
<data name="Media_barcode_0_WithMarkup" xml:space="preserve">
<value>[bold]Media barcode:[/] [italic]{0}[/]</value>
<value>[bold][slateblue1]Media barcode:[/][/] [italic]{0}[/]</value>
</data>
<data name="Media_part_number_0_WithMarkup" xml:space="preserve">
<value>[bold]Media part number:[/] [italic]{0}[/]</value>
<value>[bold][slateblue1]Media part number:[/][/] [italic]{0}[/]</value>
</data>
<data name="Drive_manufacturer_0_WithMarkup" xml:space="preserve">
<value>[bold]Drive manufacturer:[/] [italic]{0}[/]</value>
<value>[bold][slateblue1]Drive manufacturer:[/][/] [italic]{0}[/]</value>
</data>
<data name="Drive_model_0_WithMarkup" xml:space="preserve">
<value>[bold]Drive model:[/] [italic]{0}[/]</value>
<value>[bold][slateblue1]Drive model:[/][/] [italic]{0}[/]</value>
</data>
<data name="Drive_firmware_info_0_WithMarkup" xml:space="preserve">
<value>[bold]Drive firmware info:[/] [italic]{0}[/]</value>
<value>[bold][slateblue1]Drive firmware info:[/][/] [italic]{0}[/]</value>
</data>
<data name="Media_geometry_0_cylinders_1_heads_2_sectors_per_track_WithMarkup" xml:space="preserve">
<value>[bold]Media geometry:[/] [italic]{0} cylinders, {1} heads, {2} sectors per track[/]</value>
<value>[bold][slateblue1]Media geometry:[/] [italic][teal]{0}[/] cylinders, [teal]{1}[/] heads, [teal]{2}[/] sectors per track[/][/]</value>
</data>
<data name="Contains_0_readable_media_tags_WithMarkup" xml:space="preserve">
<value>[bold]Contains {0} readable media tags:[/]</value>
<value>[bold][blue]Contains [teal]{0}[/] readable media tags:[/][/]</value>
</data>
<data name="Contains_0_readable_sector_tags_WithMarkup" xml:space="preserve">
<value>[bold]Contains {0} readable sector tags:[/]</value>
<value>[bold][blue]Contains [teal]{0}[/] readable sector tags:[/][/]</value>
</data>
<data name="Title_Manufacturer" xml:space="preserve">
<value>Manufacturer</value>
<value>[bold][navy]Manufacturer[/][/]</value>
</data>
<data name="Title_Model" xml:space="preserve">
<value>Model</value>
<value>[bold][navy]Model[/][/]</value>
</data>
<data name="Title_Serial" xml:space="preserve">
<value>Serial</value>
<value>[bold][fuchsia]Serial[/][/]</value>
<comment>As in serial number</comment>
</data>
<data name="Title_Software" xml:space="preserve">
<value>Software</value>
<value>[bold][red3]Software[/][/]</value>
</data>
<data name="Title_Version" xml:space="preserve">
<value>Version</value>
<value>[bold][red3]Version[/][/]</value>
</data>
<data name="Title_Operating_system" xml:space="preserve">
<value>Operating system</value>
<value>[bold][red3]Operating system[/][/]</value>
</data>
<data name="Title_Dump_hardware_information" xml:space="preserve">
<value>Dump hardware information</value>
<value>[bold][blue]Dump hardware information[/][/]</value>
</data>
<data name="Mapping_WithMarkup" xml:space="preserve">
<value>[bold]Mapping:[/]</value>
<value>[bold][blue]Mapping:[/][/]</value>
</data>
<data name="SCSI_INQUIRY_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]SCSI INQUIRY contained in image:[/]</value>
<value>[bold][blue]SCSI INQUIRY contained in image:[/][/]</value>
</data>
<data name="ATA_IDENTIFY_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]ATA IDENTIFY contained in image:[/]</value>
<value>[bold][blue]ATA IDENTIFY contained in image:[/][/]</value>
</data>
<data name="ATAPI_IDENTIFY_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]ATAPI IDENTIFY contained in image:[/]</value>
<value>[bold][blue]ATAPI IDENTIFY contained in image:[/][/]</value>
</data>
<data name="SCSI_MODE_SENSE_10_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]SCSI MODE SENSE (10) contained in image:[/]</value>
<value>[bold][blue]SCSI MODE SENSE (10) contained in image:[/][/]</value>
</data>
<data name="SCSI_MODE_SENSE_6_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]SCSI MODE SENSE (6) contained in image:[/]</value>
<value>[bold][blue]SCSI MODE SENSE (6) contained in image:[/][/]</value>
</data>
<data name="CompactDisc_Table_of_Contents_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]CompactDisc Table of Contents contained in image:[/]</value>
<value>[bold][blue]CompactDisc Table of Contents contained in image:[/][/]</value>
</data>
<data name="CompactDisc_Absolute_Time_In_Pregroove_ATIP_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]CompactDisc Absolute Time In Pregroove (ATIP) contained in image:[/]</value>
<value>[bold][blue]CompactDisc Absolute Time In Pregroove (ATIP) contained in image:[/][/]</value>
</data>
<data name="CompactDisc_Lead_in_CD_Text_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]CompactDisc Lead-in's CD-Text contained in image:[/]</value>
<value>[bold][blue]CompactDisc Lead-in's CD-Text contained in image:[/][/]</value>
</data>
<data name="CompactDisc_Media_Catalogue_Number_contained_in_image_0_WithMarkup" xml:space="preserve">
<value>[bold]CompactDisc Media Catalogue Number contained in image:[/] {0}</value>
<value>[bold][blue]CompactDisc Media Catalogue Number contained in image:[/][/] [teal]{0}[/]</value>
</data>
<data name="DVD_RW_Pre_Recorded_Information_WithMarkup" xml:space="preserve">
<value>[bold]DVD-R(W) Pre-Recorded Information:[/]</value>
<value>[bold][blue]DVD-R(W) Pre-Recorded Information:[/][/]</value>
</data>
<data name="DVD_Physical_Format_Information_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]DVD Physical Format Information contained in image:[/]</value>
<value>[bold][blue]DVD Physical Format Information contained in image:[/][/]</value>
</data>
<data name="DVD_RAM_Disc_Definition_Structure_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]DVD-RAM Disc Definition Structure contained in image:[/]</value>
<value>[bold][blue]DVD-RAM Disc Definition Structure contained in image:[/][/]</value>
</data>
<data name="DVD_R_Physical_Format_Information_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]DVD-R Physical Format Information contained in image:[/]</value>
<value>[bold][blue]DVD-R Physical Format Information contained in image:[/][/]</value>
</data>
<data name="Bluray_Disc_Information_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]Blu-ray Disc Information contained in image:[/]</value>
<value>[bold][blue]Blu-ray Disc Information contained in image:[/][/]</value>
</data>
<data name="Bluray_Disc_Definition_Structure_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]Blu-ray Disc Definition Structure contained in image:[/]</value>
<value>[bold][blue]Blu-ray Disc Definition Structure contained in image:[/][/]</value>
</data>
<data name="PCMCIA_CIS_WithMarkup" xml:space="preserve">
<value>[bold]PCMCIA CIS:[/]</value>
<value>[bold][blue]PCMCIA CIS:[/][/]</value>
</data>
<data name="SecureDigital_CID_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]SecureDigital CID contained in image:[/]</value>
<value>[bold][blue]SecureDigital CID contained in image:[/][/]</value>
</data>
<data name="SecureDigital_CSD_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]SecureDigital CSD contained in image:[/]</value>
<value>[bold][blue]SecureDigital CSD contained in image:[/][/]</value>
</data>
<data name="SecureDigital_SCR_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]SecureDigital SCR contained in image:[/]</value>
<value>[bold][blue]SecureDigital SCR contained in image:[/][/]</value>
</data>
<data name="SecureDigital_OCR_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]SecureDigital OCR contained in image:[/]</value>
<value>[bold][blue]SecureDigital OCR contained in image:[/][/]</value>
</data>
<data name="MultiMediaCard_CID_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]MultiMediaCard CID contained in image:[/]</value>
<value>[bold][blue]MultiMediaCard CID contained in image:[/][/]</value>
</data>
<data name="MultiMediaCard_CSD_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]MultiMediaCard CSD contained in image:[/]</value>
<value>[bold][blue]MultiMediaCard CSD contained in image:[/][/]</value>
</data>
<data name="MultiMediaCard_Extended_CSD_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]MultiMediaCard Extended CSD contained in image:[/]</value>
<value>[bold][blue]MultiMediaCard Extended CSD contained in image:[/][/]</value>
</data>
<data name="MultiMediaCard_OCR_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]MultiMediaCard OCR contained in image:[/]</value>
<value>[bold][blue]MultiMediaCard OCR contained in image:[/][/]</value>
</data>
<data name="Xbox_Physical_Format_Information_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]Xbox Physical Format Information contained in image:[/]</value>
<value>[bold][blue]Xbox Physical Format Information contained in image:[/][/]</value>
</data>
<data name="Xbox_DMI_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]Xbox DMI contained in image:[/]</value>
<value>[bold][blue]Xbox DMI contained in image:[/][/]</value>
</data>
<data name="Xbox_360_DMI_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]Xbox 360 DMI contained in image:[/]</value>
<value>[bold][blue]Xbox 360 DMI contained in image:[/][/]</value>
</data>
<data name="Xbox_Security_Sectors_contained_in_image_WithMarkup" xml:space="preserve">
<value>[bold]Xbox Security Sectors contained in image:[/]</value>
<value>[bold][blue]Xbox Security Sectors contained in image:[/][/]</value>
</data>
<data name="Title_Image_tracks" xml:space="preserve">
<value>Image tracks</value>
<value>[bold][blue]Image tracks[/][/]</value>
</data>
<data name="Title_Image_sessions" xml:space="preserve">
<value>Image sessions</value>
<value>[bold][blue]Image sessions[/][/]</value>
</data>
<data name="Please_write_description_of_media_type" xml:space="preserve">
<value>Please write a description of the media type and press enter: </value>
@@ -3467,22 +3467,22 @@ It has no sense to do it, and it will put too much strain on the tape.</value>
<value>Could not get tuples</value>
</data>
<data name="Title_Type_for_media" xml:space="preserve">
<value>Type</value>
<value>[bold][orange3]Type[/][/]</value>
</data>
<data name="Image_information_WithMarkup" xml:space="preserve">
<value>[bold]Image information:[/]</value>
<value>[bold][blue]Image information:[/][/]</value>
</data>
<data name="Format_0_version_1_WithMarkup" xml:space="preserve">
<value>[bold]Format:[/] [italic]{0}[/] version {1}</value>
<value>[bold][slateblue1]Format:[/][/] [italic][rosybrown]{0}[/][/] [slateblue1]version[/] [rosybrown]{1}[/]</value>
</data>
<data name="Format_0_WithMarkup" xml:space="preserve">
<value>[bold]Format:[/] [italic]{0}[/]</value>
<value>[bold][slateblue1]Format:[/][/] [italic][rosybrown]{0}[/][/]</value>
</data>
<data name="Was_created_with_0_WithMarkup" xml:space="preserve">
<value>Was created with [italic]{0}[/]</value>
<value>[slateblue1]Was created with [italic][rosybrown]{0}[/][/][/]</value>
</data>
<data name="Contains_a_media_of_type_0_and_XML_type_1_WithMarkup" xml:space="preserve">
<value>Contains a media of type [italic]{0}[/] and XML type [italic]{1}[/]</value>
<value>[slateblue1]Contains a media of type [italic][fuchsia]{0}[/][/] and XML type [italic][rosybrown]{1}[/][/][/]</value>
</data>
<data name="Drive_serial_number_0_WithMarkup" xml:space="preserve">
<value>[bold]Drive serial number:[/] [italic]{0}[/]</value>

View File

@@ -80,6 +80,7 @@
<PackageReference Include="Serilog.Sinks.Spectre"/>
<PackageReference Include="Spectre.Console"/>
<PackageReference Include="Spectre.Console.Cli"/>
<PackageReference Include="Spectre.Console.Json"/>
<PackageReference Include="System.Text.Encoding.CodePages"/>
<PackageReference Include="System.Text.Json"/>
<PackageReference Include="System.ValueTuple"/>

View File

@@ -61,7 +61,7 @@ sealed class ImageInfoCommand : Command<ImageInfoCommand.Settings>
Core.Spectre.ProgressSingleSpinner(ctx =>
{
ctx.AddTask(UI.Identifying_file_filter).IsIndeterminate();
ctx.AddTask($"[slateblue1]{UI.Identifying_file_filter}[/]").IsIndeterminate();
inputFilter = PluginRegister.Singleton.GetFilter(settings.ImagePath);
});
@@ -78,7 +78,7 @@ sealed class ImageInfoCommand : Command<ImageInfoCommand.Settings>
Core.Spectre.ProgressSingleSpinner(ctx =>
{
ctx.AddTask(UI.Identifying_image_format).IsIndeterminate();
ctx.AddTask($"[slateblue1]{UI.Identifying_image_format}[/]").IsIndeterminate();
imageFormat = ImageFormat.Detect(inputFilter);
});
@@ -89,7 +89,10 @@ sealed class ImageInfoCommand : Command<ImageInfoCommand.Settings>
return (int)ErrorNumber.UnrecognizedFormat;
}
AaruLogging.WriteLine(UI.Image_format_identified_by_0_1, imageFormat.Name, imageFormat.Id);
AaruLogging.WriteLine($"[slateblue1]{UI.Image_format_identified_by_0_1}[/]",
$"[green]{imageFormat.Name}[/]",
$"[italic][red]{imageFormat.Id}[/][/]");
AaruLogging.WriteLine();
try
@@ -98,7 +101,7 @@ sealed class ImageInfoCommand : Command<ImageInfoCommand.Settings>
Core.Spectre.ProgressSingleSpinner(ctx =>
{
ctx.AddTask(UI.Invoke_Opening_image_file).IsIndeterminate();
ctx.AddTask($"[slateblue1]{UI.Invoke_Opening_image_file}[/]").IsIndeterminate();
opened = imageFormat.Open(inputFilter);
});

View File

@@ -49,6 +49,7 @@
<PackageVersion Include="Spectre.Console.Analyzer" Version="1.0.0"/>
<PackageVersion Include="Spectre.Console" Version="0.50.0"/>
<PackageVersion Include="Spectre.Console.Cli" Version="0.50.0"/>
<PackageVersion Include="Spectre.Console.Json" Version="0.50.0"/>
<PackageVersion Include="System.Collections" Version="4.3.0"/>
<PackageVersion Include="System.ComponentModel.Annotations" Version="6.0.0-preview.4.21253.7"/>
<PackageVersion Include="System.Diagnostics.Debug" Version="4.3.0"/>