Automatically detect key files with same name
This commit is contained in:
+85
-16
@@ -208,13 +208,15 @@ namespace IRDKit
|
|||||||
public static void ProcessISO(CreateOptions opt, string isoPath, string irdPath = null)
|
public static void ProcessISO(CreateOptions opt, string isoPath, string irdPath = null)
|
||||||
{
|
{
|
||||||
// Check file exists
|
// Check file exists
|
||||||
var iso = new FileInfo(isoPath);
|
FileInfo iso = new(isoPath);
|
||||||
if (!iso.Exists)
|
if (!iso.Exists)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"{nameof(isoPath)} is not a valid File or Directory");
|
Console.WriteLine($"{nameof(isoPath)} is not a valid File or Directory");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Console.WriteLine($"Reading {isoPath}");
|
|
||||||
|
// Determin IRD path if none given
|
||||||
|
irdPath ??= Path.GetFileNameWithoutExtension(isoPath) + ".ird";
|
||||||
|
|
||||||
// Create new reproducible redump-style IRD with a given hex key
|
// Create new reproducible redump-style IRD with a given hex key
|
||||||
if (opt.Key != null)
|
if (opt.Key != null)
|
||||||
@@ -223,17 +225,24 @@ namespace IRDKit
|
|||||||
{
|
{
|
||||||
// Get disc key from hex string
|
// Get disc key from hex string
|
||||||
byte[] discKey = Convert.FromHexString(opt.Key);
|
byte[] discKey = Convert.FromHexString(opt.Key);
|
||||||
|
if (discKey == null || discKey.Length != 16)
|
||||||
|
throw new ArgumentException(opt.Key);
|
||||||
|
|
||||||
Console.WriteLine($"Creating reproducible, redump-style IRD with Key: {opt.Key}");
|
Console.WriteLine($"Creating {irdPath} with Key: {opt.Key}");
|
||||||
IRD ird1 = new ReIRD(isoPath, discKey, opt.Layerbreak);
|
IRD ird1 = new ReIRD(isoPath, discKey, opt.Layerbreak);
|
||||||
ird1.Write(irdPath ?? Path.GetFileNameWithoutExtension(isoPath) + ".ird");
|
ird1.Write(irdPath);
|
||||||
ird1.Print();
|
ird1.Print();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch (ArgumentException)
|
||||||
|
{
|
||||||
|
Console.Error.WriteLine("Given key not valid, detecting key automatically...");
|
||||||
}
|
}
|
||||||
catch (FileNotFoundException)
|
catch (FileNotFoundException)
|
||||||
{
|
{
|
||||||
Console.Error.WriteLine("File not found");
|
Console.Error.WriteLine("File not found, failed to create IRD");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create new reproducible redump-style IRD with a given key file
|
// Create new reproducible redump-style IRD with a given key file
|
||||||
@@ -243,17 +252,25 @@ namespace IRDKit
|
|||||||
{
|
{
|
||||||
// Read key from .key file
|
// Read key from .key file
|
||||||
byte[] discKey = File.ReadAllBytes(opt.KeyFile);
|
byte[] discKey = File.ReadAllBytes(opt.KeyFile);
|
||||||
|
if (discKey == null || discKey.Length != 16)
|
||||||
|
throw new ArgumentException(opt.KeyFile);
|
||||||
|
|
||||||
Console.WriteLine($"Creating reproducible, redump-style IRD with Key: {Convert.ToHexString(discKey)}");
|
|
||||||
|
Console.WriteLine($"Creating {irdPath} with Key: {Convert.ToHexString(discKey)}");
|
||||||
IRD ird2 = new ReIRD(isoPath, discKey, opt.Layerbreak);
|
IRD ird2 = new ReIRD(isoPath, discKey, opt.Layerbreak);
|
||||||
ird2.Write(irdPath ?? Path.GetFileNameWithoutExtension(isoPath) + ".ird");
|
ird2.Write(irdPath);
|
||||||
ird2.Print();
|
ird2.Print();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch (ArgumentException)
|
||||||
|
{
|
||||||
|
Console.Error.WriteLine("Given key file not valid, detecting key automatically...");
|
||||||
}
|
}
|
||||||
catch (FileNotFoundException)
|
catch (FileNotFoundException)
|
||||||
{
|
{
|
||||||
Console.Error.WriteLine("File not found");
|
Console.Error.WriteLine("File not found, failed to create IRD");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create new reproducible redump-style IRD with a given GetKey log
|
// Create new reproducible redump-style IRD with a given GetKey log
|
||||||
@@ -261,16 +278,68 @@ namespace IRDKit
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Console.WriteLine($"Creating reproducible, redump-style IRD with key from: {opt.GetKeyLog}");
|
Console.WriteLine($"Creating {irdPath} with key from: {opt.GetKeyLog}");
|
||||||
IRD ird3 = new ReIRD(isoPath, opt.GetKeyLog);
|
IRD ird3 = new ReIRD(isoPath, opt.GetKeyLog);
|
||||||
ird3.Write(irdPath ?? Path.GetFileNameWithoutExtension(isoPath) + ".ird");
|
ird3.Write(irdPath);
|
||||||
ird3.Print();
|
ird3.Print();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
catch (FileNotFoundException)
|
catch (FileNotFoundException)
|
||||||
{
|
{
|
||||||
Console.Error.WriteLine("File not found");
|
Console.Error.WriteLine("File not found, failed to create IRD");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// No key provided, try search for .key file
|
||||||
|
string keyfilePath = Path.GetFileNameWithoutExtension(isoPath) + ".key";
|
||||||
|
FileInfo keyfile = new(keyfilePath);
|
||||||
|
if (keyfile.Exists)
|
||||||
|
{
|
||||||
|
// Found .key file, try use it
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Read key from .key file
|
||||||
|
byte[] discKey = File.ReadAllBytes(keyfilePath);
|
||||||
|
if (discKey == null || discKey.Length != 16)
|
||||||
|
throw new ArgumentException(opt.KeyFile);
|
||||||
|
|
||||||
|
Console.WriteLine($"Creating {irdPath} with Key: {Convert.ToHexString(discKey)}");
|
||||||
|
IRD ird2 = new ReIRD(isoPath, discKey, opt.Layerbreak);
|
||||||
|
ird2.Write(irdPath);
|
||||||
|
ird2.Print();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch (ArgumentException)
|
||||||
|
{
|
||||||
|
Console.Error.WriteLine("Given key file not valid, detecting key automatically...");
|
||||||
|
}
|
||||||
|
catch (FileNotFoundException)
|
||||||
|
{
|
||||||
|
Console.Error.WriteLine("File not found, failed to create IRD");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// No key provided, try search for .getkey.log file
|
||||||
|
string logfilePath = Path.GetFileNameWithoutExtension(isoPath) + ".getkey.log";
|
||||||
|
FileInfo logfile = new(logfilePath);
|
||||||
|
if (logfile.Exists)
|
||||||
|
{
|
||||||
|
// Found .getkey.log file, check it is valid
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Creating {irdPath} with key from: {logfilePath}");
|
||||||
|
IRD ird3 = new ReIRD(isoPath, logfilePath);
|
||||||
|
ird3.Write(irdPath);
|
||||||
|
ird3.Print();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch (FileNotFoundException)
|
||||||
|
{
|
||||||
|
Console.Error.WriteLine("File not found, failed to create IRD");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// No key provided, try get key from redump.org
|
// No key provided, try get key from redump.org
|
||||||
@@ -335,9 +404,9 @@ namespace IRDKit
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create IRD with key from redump
|
// Create IRD with key from redump
|
||||||
Console.WriteLine($"Creating reproducible, redump-style IRD with Key: {Convert.ToHexString(key)}");
|
Console.WriteLine($"Creating {irdPath} with Key: {Convert.ToHexString(key)}");
|
||||||
IRD ird = new ReIRD(isoPath, key, opt.Layerbreak);
|
IRD ird = new ReIRD(isoPath, key, opt.Layerbreak);
|
||||||
ird.Write(irdPath ?? Path.GetFileNameWithoutExtension(isoPath) + ".ird");
|
ird.Write(irdPath);
|
||||||
ird.Print();
|
ird.Print();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user