Print All option for info
`-a`/`--all` for irdkit info command
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
name: Build
|
||||
|
||||
on:
|
||||
push: {}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
project: [IRDKit]
|
||||
runtime: [win-x86, win-x64, win-arm64, linux-x64, linux-arm64, osx-x64, osx-arm64]
|
||||
framework: [net8.0]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: 'true'
|
||||
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 9.0.x
|
||||
|
||||
- name: Restore dependencies
|
||||
run: dotnet restore
|
||||
|
||||
- name: Build
|
||||
run: dotnet publish ${{ matrix.project }}/${{ matrix.project }}.csproj -f ${{ matrix.framework }} -r ${{ matrix.runtime }} -c Release -p:DebugType=None -p:DebugSymbols=false
|
||||
|
||||
- name: Upload build
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ matrix.project }}_${{ matrix.framework }}_${{ matrix.runtime }}
|
||||
path: ${{ matrix.project }}/bin/Release/${{ matrix.framework }}/${{ matrix.runtime }}/publish/*
|
||||
@@ -5,18 +5,21 @@
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetName>irdkit</TargetName>
|
||||
<AssemblyName>irdkit</AssemblyName>
|
||||
<TargetFrameworks>net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
|
||||
<TargetFrameworks>net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
|
||||
<RuntimeIdentifiers>win-x86;win-x64;win-arm64;linux-x64;linux-arm64;osx-x64;osx-arm64</RuntimeIdentifiers>
|
||||
<CheckEolTargetFramework>false</CheckEolTargetFramework>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<SuppressTfmSupportBuildWarnings>true</SuppressTfmSupportBuildWarnings>
|
||||
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
|
||||
<PublishSingleFile>true</PublishSingleFile>
|
||||
<SelfContained>false</SelfContained>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<Version>0.9.3</Version>
|
||||
<Version>0.9.5</Version>
|
||||
|
||||
<!-- Package Properties -->
|
||||
<Authors>Deterous</Authors>
|
||||
<Description>Library for ISO Rebuild Data</Description>
|
||||
<Copyright>Copyright (c) Deterous 2023-2024</Copyright>
|
||||
<Copyright>Copyright (c) Deterous 2023-2025</Copyright>
|
||||
<PackageReadmeFile>README.md</PackageReadmeFile>
|
||||
<RepositoryUrl>https://github.com/Deterous/LibIRD</RepositoryUrl>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
@@ -30,8 +33,8 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CommandLineParser" Version="2.9.1" />
|
||||
<PackageReference Include="SabreTools.Hashing" Version="1.4.0" />
|
||||
<PackageReference Include="SabreTools.RedumpLib" Version="1.5.2" />
|
||||
<PackageReference Include="SabreTools.Hashing" Version="1.5.0" />
|
||||
<PackageReference Include="SabreTools.RedumpLib" Version="1.7.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
+10
-5
@@ -59,6 +59,9 @@ namespace IRDKit
|
||||
[Option('o', "output", HelpText = "Path to the text or json file to be created (will overwrite)")]
|
||||
public string OutPath { get; set; }
|
||||
|
||||
[Option('a', "all", HelpText = "Print the entire contents of the IRD")]
|
||||
public bool All { get; set; }
|
||||
|
||||
[Option('j', "json", HelpText = "Print IRD or ISO information as a JSON object")]
|
||||
public bool Json { get; set; }
|
||||
|
||||
@@ -283,7 +286,7 @@ namespace IRDKit
|
||||
string lastIRD = irdFiles.Last();
|
||||
foreach (string file in irdFiles)
|
||||
{
|
||||
PrintInfo(file, opt.Json, (noISO && file.Equals(lastIRD)), opt.OutPath);
|
||||
PrintInfo(file, opt.Json, (noISO && file.Equals(lastIRD)), opt.OutPath, opt.All);
|
||||
}
|
||||
|
||||
|
||||
@@ -325,7 +328,7 @@ namespace IRDKit
|
||||
}
|
||||
|
||||
// Print info from given file
|
||||
PrintInfo(filePath, opt.Json, true, opt.OutPath);
|
||||
PrintInfo(filePath, opt.Json, true, opt.OutPath, opt.All);
|
||||
|
||||
if (opt.OutPath != null && opt.OutPath != "")
|
||||
Console.WriteLine($"Info saved to {opt.OutPath}");
|
||||
@@ -464,8 +467,9 @@ namespace IRDKit
|
||||
/// </summary>
|
||||
/// <param name="inPath">File to retrieve info from</param>
|
||||
/// <param name="json">Whether to format output as JSON (true) or plain text (false)</param>
|
||||
/// <param name="single">Whether to print a single JSON object or not</param>
|
||||
/// <param name="outPath">File to output info to</param>
|
||||
public static void PrintInfo(string inPath, bool json, bool single = true, string outPath = null)
|
||||
public static void PrintInfo(string inPath, bool json, bool single = true, string outPath = null, bool printAll = false)
|
||||
{
|
||||
// Check if file is an ISO
|
||||
bool isISO = String.Compare(Path.GetExtension(inPath), ".iso", StringComparison.OrdinalIgnoreCase) == 0;
|
||||
@@ -492,10 +496,10 @@ namespace IRDKit
|
||||
File.AppendAllText(outPath, $"\"{Path.GetFileName(inPath)}\": ");
|
||||
else
|
||||
Console.Write($"\"{Path.GetFileName(inPath)}\": ");
|
||||
ird.PrintJson(outPath, single);
|
||||
ird.PrintJson(outPath, single, printAll);
|
||||
}
|
||||
else
|
||||
IRD.Read(inPath).Print(outPath, Path.GetFileName(inPath));
|
||||
IRD.Read(inPath).Print(outPath, Path.GetFileName(inPath), printAll);
|
||||
|
||||
if (json)
|
||||
return;
|
||||
@@ -518,6 +522,7 @@ namespace IRDKit
|
||||
/// </summary>
|
||||
/// <param name="isoPath">Path to ISO file</param>
|
||||
/// <param name="json">Whether to format output as JSON (true) or plain text (false)</param>
|
||||
/// <param name="single">Whether to print a single JSON object or not</param>
|
||||
/// <param name="outPath">File to output info to</param>
|
||||
/// <exception cref="FileNotFoundException"></exception>
|
||||
/// <exception cref="InvalidFileSystemException"></exception>
|
||||
|
||||
@@ -32,6 +32,7 @@ For all options, run `irdkit help info`
|
||||
To print info about an ISO or IRD file, run `irdkit info game.iso` or `irdkit info game.ird`
|
||||
The info can be printed to a file, e.g. `-o out.txt` or `--output=`
|
||||
The info can be formatted as a JSON with `-j` or `--json`
|
||||
To print all info in the IRD use `-a` or `--all`
|
||||
|
||||
## Comparing IRDs
|
||||
|
||||
|
||||
+86
-8
@@ -1561,7 +1561,9 @@ namespace LibIRD
|
||||
/// Prints IRD fields to console
|
||||
/// </summary>
|
||||
/// <param name="printPath">Optional path to save file to</param>
|
||||
public void Print(string printPath = null, string irdName = null)
|
||||
/// <param name="printAll">Optionally print IRD name in output header</param>
|
||||
/// <param name="printAll">Optionally print all IRD data</param>
|
||||
public void Print(string printPath = null, string irdName = null, bool printAll = false)
|
||||
{
|
||||
// Build string from parameters
|
||||
StringBuilder printText = new();
|
||||
@@ -1579,11 +1581,38 @@ namespace LibIRD
|
||||
printText.AppendLine($"PUP Version: {SystemVersion}");
|
||||
printText.AppendLine($"Disc Version: {DiscVersion}");
|
||||
printText.AppendLine($"App Version: {AppVersion}");
|
||||
if (printAll)
|
||||
{
|
||||
printText.AppendLine($"Header: {ByteArrayToHexString(Header)}");
|
||||
printText.AppendLine($"Footer: {ByteArrayToHexString(Footer)}");
|
||||
}
|
||||
printText.AppendLine($"Regions: {RegionCount}");
|
||||
if (printAll)
|
||||
{
|
||||
for (int i = 0; i < RegionCount; i++)
|
||||
{
|
||||
printText.Append($" Region {i} : ");
|
||||
if (RegionHashes[i] == null)
|
||||
printText.AppendLine($"{ByteArrayToHexString(NullMD5)}");
|
||||
else
|
||||
printText.AppendLine($"{ByteArrayToHexString(RegionHashes[i])}");
|
||||
}
|
||||
}
|
||||
printText.AppendLine($"Files: {FileCount}");
|
||||
if (ExtraConfig != 0x0000)
|
||||
if (printAll)
|
||||
{
|
||||
for (int i = 0; i < FileCount; i++)
|
||||
{
|
||||
printText.Append($" {FileKeys[i]:X7} : ");
|
||||
if (FileHashes[i] == null)
|
||||
printText.AppendLine($"{ByteArrayToHexString(NullMD5)}");
|
||||
else
|
||||
printText.AppendLine($"{ByteArrayToHexString(FileHashes[i])}");
|
||||
}
|
||||
}
|
||||
if (printAll || ExtraConfig != 0x0000)
|
||||
printText.AppendLine($"Extra Config: {ExtraConfig:X4}");
|
||||
if (Attachments != 0x0000)
|
||||
if (printAll || Attachments != 0x0000)
|
||||
printText.AppendLine($"Attachments: {Attachments:X4}");
|
||||
printText.AppendLine($"Unique ID: {UID:X8}");
|
||||
printText.AppendLine($"Data 1 Key: {ByteArrayToHexString(Data1Key)}");
|
||||
@@ -1610,7 +1639,9 @@ namespace LibIRD
|
||||
/// Prints IRD fields to a json object
|
||||
/// </summary>
|
||||
/// <param name="jsonPath">Optionally print to json file</param>
|
||||
public void PrintJson(string jsonPath = null, bool single = true)
|
||||
/// <param name="single">Optionally print single object (no trailing comma)</param>
|
||||
/// <param name="printAll">Optionally print all IRD data</param>
|
||||
public void PrintJson(string jsonPath = null, bool single = true, bool printAll = false)
|
||||
{
|
||||
// Build string from parameters
|
||||
StringBuilder json = new();
|
||||
@@ -1624,11 +1655,58 @@ namespace LibIRD
|
||||
json.AppendLine($" \"PUP Version\": \"{SystemVersion}\",");
|
||||
json.AppendLine($" \"Disc Version\": \"{DiscVersion}\",");
|
||||
json.AppendLine($" \"App Version\": \"{AppVersion}\",");
|
||||
json.AppendLine($" \"Regions\": \"{RegionCount}\",");
|
||||
json.AppendLine($" \"Files\": \"{FileCount}\",");
|
||||
if (ExtraConfig != 0x0000)
|
||||
if (printAll)
|
||||
{
|
||||
json.AppendLine($" \"Header\": \"{ByteArrayToHexString(Header)}\",");
|
||||
json.AppendLine($" \"Footer\": \"{ByteArrayToHexString(Footer)}\",");
|
||||
}
|
||||
if (!printAll)
|
||||
json.AppendLine($" \"Regions\": \"{RegionCount}\",");
|
||||
else
|
||||
{
|
||||
json.Append($" \"Regions\": [ ");
|
||||
for (int i = 0; i < RegionCount - 1; i++)
|
||||
{
|
||||
if (RegionHashes[i] == null)
|
||||
json.Append($"\"{ByteArrayToHexString(NullMD5)}\", ");
|
||||
else
|
||||
json.Append($"\"{ByteArrayToHexString(RegionHashes[i])}\", ");
|
||||
}
|
||||
if (RegionCount > 0)
|
||||
{
|
||||
if (RegionHashes[RegionCount - 1] == null)
|
||||
json.Append($"\"{ByteArrayToHexString(NullMD5)}\"");
|
||||
else
|
||||
json.Append($"\"{ByteArrayToHexString(RegionHashes[RegionCount - 1])}\"");
|
||||
}
|
||||
json.AppendLine(" ],");
|
||||
}
|
||||
if(!printAll)
|
||||
json.AppendLine($" \"Files\": \"{FileCount}\",");
|
||||
else
|
||||
{
|
||||
json.Append($" \"Files\": [ ");
|
||||
for (int i = 0; i < RegionCount - 1; i++)
|
||||
{
|
||||
json.Append($" \"{FileKeys[i]}\" : ");
|
||||
if (RegionHashes[i] == null)
|
||||
json.Append($"\"{ByteArrayToHexString(NullMD5)}\", ");
|
||||
else
|
||||
json.Append($"\"{ByteArrayToHexString(FileHashes[i])}\", ");
|
||||
}
|
||||
if (FileCount > 0)
|
||||
{
|
||||
json.Append($" \"{FileKeys[FileCount - 1]}\" : ");
|
||||
if (FileHashes[FileCount - 1] == null)
|
||||
json.Append($"\"{ByteArrayToHexString(NullMD5)}\"");
|
||||
else
|
||||
json.Append($"\"{ByteArrayToHexString(FileHashes[FileCount - 1])}\"");
|
||||
}
|
||||
json.AppendLine(" ],");
|
||||
}
|
||||
if (printAll || ExtraConfig != 0x0000)
|
||||
json.AppendLine($" \"Extra Config\": \"{ExtraConfig:X4}\",");
|
||||
if (Attachments != 0x0000)
|
||||
if (printAll || Attachments != 0x0000)
|
||||
json.AppendLine($" \"Attachments\": \"{Attachments:X4}\",");
|
||||
json.AppendLine($" \"Unique ID\": \"{UID:X8}\",");
|
||||
json.AppendLine($" \"Data 1 Key\": \"{ByteArrayToHexString(Data1Key)}\",");
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<LangVersion>latest</LangVersion>
|
||||
<SuppressTfmSupportBuildWarnings>true</SuppressTfmSupportBuildWarnings>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<Version>0.9.3</Version>
|
||||
<Version>0.9.4</Version>
|
||||
<PackageOutputPath>../nupkg</PackageOutputPath>
|
||||
|
||||
<!-- Avoid inexact read with 'System.IO.Stream.Read' -->
|
||||
@@ -16,7 +16,7 @@
|
||||
<!-- Package Properties -->
|
||||
<Authors>Deterous</Authors>
|
||||
<Description>Library for ISO Rebuild Data</Description>
|
||||
<Copyright>Copyright (c) Deterous 2023-2024</Copyright>
|
||||
<Copyright>Copyright (c) Deterous 2023-2025</Copyright>
|
||||
<PackageReadmeFile>README.md</PackageReadmeFile>
|
||||
<RepositoryUrl>https://github.com/Deterous/LibIRD/</RepositoryUrl>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
|
||||
Reference in New Issue
Block a user