diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs index 6e868f86..8fcc2bf3 100644 --- a/MainWindow.xaml.cs +++ b/MainWindow.xaml.cs @@ -135,7 +135,7 @@ namespace DICUI // Local variables string driveLetter = cmb_DriveLetter.Text; string outputDirectory = txt_OutputDirectory.Text; - string outputFileName = txt_OutputFilename.Text; + string outputFilename = txt_OutputFilename.Text; int driveSpeed = (int)cmb_DriveSpeed.SelectedItem; btn_Start.IsEnabled = false; @@ -165,13 +165,20 @@ namespace DICUI process.StartInfo.FileName = dicPath; process.StartInfo.Arguments = discType + " " + driveLetter - + " \"" + Path.Combine(outputDirectory, outputFileName) + "\" " + + " \"" + Path.Combine(outputDirectory, outputFilename) + "\" " + (selected.Item3 != DiscType.BD25 && selected.Item3 != DiscType.BD50 ? driveSpeed + " " : "") + string.Join(" ", defaultParams); process.Start(); process.WaitForExit(); }); + // Check to make sure that the output had all the correct files + if (!Utilities.FoundAllFiles(outputDirectory, outputFilename)) + { + lbl_Status.Content = "Error! Please check output directory as dump may be incomplete!"; + return; + } + // Special cases switch (selected.Item2) { @@ -179,7 +186,7 @@ namespace DICUI case KnownSystem.SonyPlayStation4: if (!File.Exists(sgRawPath)) { - lbl_Status.Content = "Error! Could not find sg-raw!!"; + lbl_Status.Content = "Error! Could not find sg-raw!"; return; } @@ -205,8 +212,8 @@ namespace DICUI string batchname = "PSX" + Guid.NewGuid() + ".bat"; using (StreamWriter writetext = new StreamWriter(batchname)) { - writetext.WriteLine(psxtPath + " " + "\"" + Utilities.GetFirstTrack(outputDirectory, outputFileName) + "\" > " + "\"" + Path.Combine(outputDirectory, "psxt001z.txt")); - writetext.WriteLine(psxtPath + " " + "--libcrypt " + "\"" + Path.Combine(outputDirectory, outputFileName + ".sub") + "\" > " + "\"" + Path.Combine(outputDirectory, "libcrypt.txt")); + writetext.WriteLine(psxtPath + " " + "\"" + Utilities.GetFirstTrack(outputDirectory, outputFilename) + "\" > " + "\"" + Path.Combine(outputDirectory, "psxt001z.txt")); + writetext.WriteLine(psxtPath + " " + "--libcrypt " + "\"" + Path.Combine(outputDirectory, outputFilename + ".sub") + "\" > " + "\"" + Path.Combine(outputDirectory, "libcrypt.txt")); writetext.WriteLine(psxtPath + " " + "--libcryptdrvfast " + driveLetter + " > " + "\"" + Path.Combine(outputDirectory, "libcryptdrv.log")); } diff --git a/Utilities.cs b/Utilities.cs index 334d8534..70698597 100644 --- a/Utilities.cs +++ b/Utilities.cs @@ -623,41 +623,94 @@ namespace DICUI .ToList(); } - /// - /// Attempts to find the first track of a dumped disc based on the inputs - /// - /// Base directory to use - /// Base filename to use - /// Proper path to first track, null on error - /// - /// By default, this assumes that the outputFilename doesn't contain a proper path, and just a name. - /// This can lead to a situation where the outputFilename contains a path, but only the filename gets - /// used in the processing and can lead to a "false null" return - /// - public static string GetFirstTrack(string outputDirectory, string outputFilename) - { - // First, sanitized the output filename to strip off any potential extension - outputFilename = Path.GetFileNameWithoutExtension(outputFilename); + /// + /// Attempts to find the first track of a dumped disc based on the inputs + /// + /// Base directory to use + /// Base filename to use + /// Proper path to first track, null on error + /// + /// By default, this assumes that the outputFilename doesn't contain a proper path, and just a name. + /// This can lead to a situation where the outputFilename contains a path, but only the filename gets + /// used in the processing and can lead to a "false null" return + /// + public static string GetFirstTrack(string outputDirectory, string outputFilename) + { + // First, sanitized the output filename to strip off any potential extension + outputFilename = Path.GetFileNameWithoutExtension(outputFilename); - // Go through all standard output naming schemes - if (File.Exists(Path.Combine(outputDirectory, outputFilename + ".bin"))) - { - return Path.Combine(outputDirectory, outputFilename + ".bin"); - } - if (File.Exists(Path.Combine(outputDirectory, outputFilename + " (Track 1).bin"))) - { - return Path.Combine(outputDirectory, outputFilename + " (Track 1).bin"); - } - if (File.Exists(Path.Combine(outputDirectory, outputFilename + " (Track 01).bin"))) - { - return Path.Combine(outputDirectory, outputFilename + " (Track 01).bin"); - } - if (File.Exists(Path.Combine(outputDirectory, outputFilename + ".iso"))) - { - return Path.Combine(outputDirectory, outputFilename + ".iso"); - } + // Go through all standard output naming schemes + string combinedBase = Path.Combine(outputDirectory, outputFilename); + if (File.Exists(combinedBase + ".bin")) + { + return combinedBase + ".bin"; + } + if (File.Exists(combinedBase + " (Track 1).bin")) + { + return combinedBase + " (Track 1).bin"; + } + if (File.Exists(combinedBase + " (Track 01).bin")) + { + return combinedBase + " (Track 01).bin"; + } + if (File.Exists(combinedBase + ".iso")) + { + return Path.Combine(combinedBase + ".iso"); + } - return null; - } + return null; + } + + /// + /// Ensures that all required output files have been created + /// + /// Base directory to use + /// Base filename to use + /// + public static bool FoundAllFiles(string outputDirectory, string outputFilename) + { + // First, sanitized the output filename to strip off any potential extension + outputFilename = Path.GetFileNameWithoutExtension(outputFilename); + + // Check to see what type of files we should be expecting + string ext = Path.GetExtension(GetFirstTrack(outputDirectory, outputFilename)).TrimStart('.'); + + // Now ensure that all required files exist + string combinedBase = Path.Combine(outputDirectory, outputFilename); + switch(ext) + { + case "bin": + return File.Exists(combinedBase + ".c2") + && File.Exists(combinedBase + ".ccd") + && File.Exists(combinedBase + ".cue") + && File.Exists(combinedBase + ".dat") + && File.Exists(combinedBase + ".img") + && File.Exists(combinedBase + ".img_EdcEcc.txt") + && File.Exists(combinedBase + ".scm") + && File.Exists(combinedBase + ".sub") + && File.Exists(combinedBase + "_c2Error.txt") + && File.Exists(combinedBase + "_cmd.txt") + && File.Exists(combinedBase + "_disc.txt") + && File.Exists(combinedBase + "_drive.txt") + && File.Exists(combinedBase + "_img.cue") + && File.Exists(combinedBase + "_mainError.txt") + && File.Exists(combinedBase + "_mainInfo.txt") + && File.Exists(combinedBase + "_subError.txt") + && File.Exists(combinedBase + "_subInfo.txt") + && File.Exists(combinedBase + "_subIntention.txt") + && File.Exists(combinedBase + "_subReadable.txt") + && File.Exists(combinedBase + "_volDesc.txt"); + case "iso": + return File.Exists(combinedBase + ".dat") + && File.Exists(combinedBase + "_cmd.txt") + && File.Exists(combinedBase + "_disc.txt") + && File.Exists(combinedBase + "_drive.txt") + && File.Exists(combinedBase + "_mainError.txt") + && File.Exists(combinedBase + "_mainInfo.txt") + && File.Exists(combinedBase + "_volDesc.txt"); + default: + return false; + } + } } }