diff --git a/SabreTools.Helper/Data/Build.cs b/SabreTools.Helper/Data/Build.cs index 1b3a80e0..0020e3cd 100644 --- a/SabreTools.Helper/Data/Build.cs +++ b/SabreTools.Helper/Data/Build.cs @@ -218,7 +218,7 @@ namespace SabreTools.Helper.Data helptext.Add(" -dat= Input DAT to rebuild against"); helptext.Add(" -out= Output directory"); helptext.Add(" -t=, --temp= Set the temporary directory to use"); - helptext.Add(" -del, --delete Delete input files [DO NOT USE]"); + helptext.Add(" -del, --delete Delete fully rebuilt input files"); helptext.Add(" -in, --inverse Rebuild only files not in DAT"); helptext.Add(" -qs, --quick Enable quick scanning of archives"); helptext.Add(" -ad, --add-date Add original dates from DAT, if possible"); @@ -230,7 +230,7 @@ namespace SabreTools.Helper.Data //helptext.Add(" -trar Enable TorrentRAR output"); //helptext.Add(" -txz Enable TorrentXZ output"); helptext.Add(" -tzip Enable TorrentZip output"); - helptext.Add(" -h=, --header= Set a header skipper to use, blank means all"); + //helptext.Add(" -h=, --header= Set a header skipper to use, blank means all"); helptext.Add(" -7z={1} Set scanning level for 7z archives"); helptext.Add(" -gz={2} Set scanning level for GZip archives"); helptext.Add(" -rar={2} Set scanning level for RAR archives"); diff --git a/SabreTools.Helper/Dats/Partials/DatFile.Rebuild.cs b/SabreTools.Helper/Dats/Partials/DatFile.Rebuild.cs index 8a987634..a4e0abde 100644 --- a/SabreTools.Helper/Dats/Partials/DatFile.Rebuild.cs +++ b/SabreTools.Helper/Dats/Partials/DatFile.Rebuild.cs @@ -119,7 +119,7 @@ namespace SabreTools.Helper.Dats // If the input is a file if (File.Exists(input)) { - logger.User("Checking file: '" + input + "'"); + logger.Verbose("Checking file: '" + input + "'"); RebuildToOutputHelper(input, outDir, tempDir, quickScan, date, delete, inverse, outputFormat, romba, archiveScanLevel, updateDat, headerToCheckAgainst, maxDegreeOfParallelism, logger); } @@ -127,10 +127,10 @@ namespace SabreTools.Helper.Dats // If the input is a directory else if (Directory.Exists(input)) { - logger.User("Checking directory: '" + input + "'"); + logger.Verbose("Checking directory: '" + input + "'"); foreach (string file in Directory.EnumerateFiles(input, "*", SearchOption.AllDirectories)) { - logger.User("Checking file: '" + file + "'"); + logger.Verbose("Checking file: '" + file + "'"); RebuildToOutputHelper(file, outDir, tempDir, quickScan, date, delete, inverse, outputFormat, romba, archiveScanLevel, updateDat, headerToCheckAgainst, maxDegreeOfParallelism, logger); } @@ -213,26 +213,15 @@ namespace SabreTools.Helper.Dats // If the file was an archive and was extracted successfully, check it if (!encounteredErrors) { + usedInternally = true; + logger.Verbose(Path.GetFileName(file) + " treated like an archive"); List extracted = Directory.EnumerateFiles(tempSubDir, "*", SearchOption.AllDirectories).ToList(); foreach (string entry in extracted) { Rom rom = FileTools.GetFileInfo(entry, logger, noMD5: quickScan, noSHA1: quickScan, header: headerToCheckAgainst); - RebuildToOutputIndividual(rom, file, outDir, tempSubDir, date, inverse, outputFormat, + usedInternally &= RebuildToOutputIndividual(rom, entry, outDir, tempSubDir, date, inverse, outputFormat, romba, updateDat, false /* isZip */, headerToCheckAgainst, logger); - - // Now we want to remove the file from the temp directory - try - { - File.Delete(entry); - } - catch { } - } - - // If the temp directory is empty, we assume that everything inside was used - if (Directory.EnumerateFiles(tempSubDir, "*", SearchOption.AllDirectories).Count() == 0) - { - usedInternally = true; } } // Otherwise, just get the info on the file itself @@ -250,9 +239,14 @@ namespace SabreTools.Helper.Dats { try { + logger.Verbose("Attempting to delete input file '" + file + "'"); File.Delete(file); + logger.Verbose("File '" + file + "' deleted"); + } + catch (Exception ex) + { + logger.Error("An error occurred while trying to delete '" + file + "' " + ex.ToString()); } - catch { } } // Now delete the temp directory @@ -313,6 +307,8 @@ namespace SabreTools.Helper.Dats return rebuilt; } + logger.User("Matches found for '" + file + "', rebuilding accordingly..."); + // Now loop through the list and rebuild accordingly foreach (Rom item in dupes) { @@ -339,7 +335,7 @@ namespace SabreTools.Helper.Dats } catch { - rebuilt &= false; + rebuilt = false; } break; @@ -361,8 +357,11 @@ namespace SabreTools.Helper.Dats rebuilt &= ArchiveTools.WriteTorrentZip(file, outDir, item, logger, date: date); break; } + } - // And now clear the temp folder to get rid of any transient files + // And now clear the temp folder to get rid of any transient files if we unzipped + if (isZip) + { try { Directory.Delete(tempDir, true); @@ -374,10 +373,13 @@ namespace SabreTools.Helper.Dats // If we have no duplicates and we're filtering, rebuild it else if (!hasDuplicates && inverse) { + string machinename = null; + // If we have an archive input, get the real name of the file to use if (isZip) { // Otherwise, extract the file to the temp folder + machinename = Style.GetFileNameWithoutExtension(file); file = ArchiveTools.ExtractItem(file, rom.Name, tempDir, logger); } @@ -389,6 +391,20 @@ namespace SabreTools.Helper.Dats // Get the item from the current file Rom item = FileTools.GetFileInfo(file, logger); + item.Machine = new Machine() + { + Name = Style.GetFileNameWithoutExtension(item.Name), + Description = Style.GetFileNameWithoutExtension(item.Name), + }; + + // If we are coming from an archive, set the correct machine name + if (machinename != null) + { + item.Machine.Name = machinename; + item.Machine.Description = machinename; + } + + logger.User("Matches found for '" + file + "', rebuilding accordingly..."); // Now rebuild to the output file switch (outputFormat) @@ -435,12 +451,15 @@ namespace SabreTools.Helper.Dats break; } - // And now clear the temp folder to get rid of any transient files - try + // And now clear the temp folder to get rid of any transient files if we unzipped + if (isZip) { - Directory.Delete(tempDir, true); + try + { + Directory.Delete(tempDir, true); + } + catch { } } - catch { } } return rebuilt; diff --git a/SabreTools.Helper/README.1ST b/SabreTools.Helper/README.1ST index 4c4e24d5..fb72e6be 100644 --- a/SabreTools.Helper/README.1ST +++ b/SabreTools.Helper/README.1ST @@ -392,10 +392,10 @@ Options: (inside the running folder) is not preferred. This is used for any operations that require an archive to be extracted. - -d, --delete Enable deletion of the input files [DO NOT USE] - Optionally, the input files, once processed, can be deleted. This can be useful - when the original file structure is no longer needed or if there is limited space - on the source drive. + -d, --delete Delete fully rebuilt input files + Optionally, the input files, once processed and fully matched, can be deleted. This + can be useful when the original file structure is no longer needed or if there is + limited space on the source drive. -in, --inverse Match files not in the DAT Instead of the normal behavior of rebuilding using a DAT, this flag allows the user @@ -461,7 +461,7 @@ Options: This is primarily used by external tool RomVault (http://www.romvault.com/) and is already widely used. - -h=, --header= Remove headers from hash calculations + -h=, --header= Remove headers from hash calculations [NOT IMPLEMENTED] If this is set, then all files that have copier headers that are detected will have them removed from the hash calculation. This will allow for a headered collection to be hashed without possibly variant information. If a particular header skipper is diff --git a/SabreTools.Helper/Tools/ArchiveTools.cs b/SabreTools.Helper/Tools/ArchiveTools.cs index 10815683..962c6811 100644 --- a/SabreTools.Helper/Tools/ArchiveTools.cs +++ b/SabreTools.Helper/Tools/ArchiveTools.cs @@ -190,6 +190,7 @@ namespace SabreTools.Helper.Tools zr = zf.CloseReadStream(); writeStream.Dispose(); } + zf.Close(); encounteredErrors = false; } }