[DatFile] Add flag for DFD filtering (archive / file)

This commit is contained in:
Matt Nadareski
2017-05-03 14:11:38 -07:00
parent 3a6040b6ba
commit a4dad289a3
6 changed files with 57 additions and 11 deletions

View File

@@ -243,6 +243,16 @@
Unzip, Unzip,
} }
/// <summary>
/// Determines which files should be skipped in DFD
/// </summary>
public enum SkipFileType
{
None = 0,
Archive,
File,
}
/// <summary> /// <summary>
/// Determines how the current dictionary is sorted by /// Determines how the current dictionary is sorted by
/// </summary> /// </summary>

View File

@@ -30,14 +30,15 @@ namespace SabreTools.Helper.Dats
/// <param name="bare">True if the date should be omitted from the DAT, false otherwise</param> /// <param name="bare">True if the date should be omitted from the DAT, false otherwise</param>
/// <param name="archivesAsFiles">True if archives should be treated as files, false otherwise</param> /// <param name="archivesAsFiles">True if archives should be treated as files, false otherwise</param>
/// <param name="enableGzip">True if GZIP archives should be treated as files, false otherwise</param> /// <param name="enableGzip">True if GZIP archives should be treated as files, false otherwise</param>
/// <param name="skipFileType">Type of files that should be skipped</param>
/// <param name="addBlanks">True if blank items should be created for empty folders, false otherwise</param> /// <param name="addBlanks">True if blank items should be created for empty folders, false otherwise</param>
/// <param name="addDate">True if dates should be archived for all files, false otherwise</param> /// <param name="addDate">True if dates should be archived for all files, false otherwise</param>
/// <param name="tempDir">Name of the directory to create a temp folder in (blank is current directory)</param> /// <param name="tempDir">Name of the directory to create a temp folder in (blank is current directory)</param>
/// <param name="outDir">Output directory to </param> /// <param name="outDir">Output directory to </param>
/// <param name="copyFiles">True if files should be copied to the temp directory before hashing, false otherwise</param> /// <param name="copyFiles">True if files should be copied to the temp directory before hashing, false otherwise</param>
/// <param name="headerToCheckAgainst">Populated string representing the name of the skipper to use, a blank string to use the first available checker, null otherwise</param> /// <param name="headerToCheckAgainst">Populated string representing the name of the skipper to use, a blank string to use the first available checker, null otherwise</param>
public bool PopulateFromDir(string basePath, Hash omitFromScan, bool bare, bool archivesAsFiles, public bool PopulateFromDir(string basePath, Hash omitFromScan, bool bare, bool archivesAsFiles, bool enableGzip,
bool enableGzip, bool addBlanks, bool addDate, string tempDir, bool copyFiles, string headerToCheckAgainst) SkipFileType skipFileType, bool addBlanks, bool addDate, string tempDir, bool copyFiles, string headerToCheckAgainst)
{ {
// If the description is defined but not the name, set the name from the description // If the description is defined but not the name, set the name from the description
if (String.IsNullOrEmpty(Name) && !String.IsNullOrEmpty(Description)) if (String.IsNullOrEmpty(Name) && !String.IsNullOrEmpty(Description))
@@ -67,8 +68,8 @@ namespace SabreTools.Helper.Dats
List<string> files = Directory.EnumerateFiles(basePath, "*", SearchOption.TopDirectoryOnly).ToList(); List<string> files = Directory.EnumerateFiles(basePath, "*", SearchOption.TopDirectoryOnly).ToList();
Parallel.ForEach(files, Globals.ParallelOptions, item => Parallel.ForEach(files, Globals.ParallelOptions, item =>
{ {
PopulateFromDirCheckFile(item, basePath, omitFromScan, bare, archivesAsFiles, enableGzip, addBlanks, addDate, PopulateFromDirCheckFile(item, basePath, omitFromScan, bare, archivesAsFiles, enableGzip, skipFileType,
tempDir, copyFiles, headerToCheckAgainst); addBlanks, addDate, tempDir, copyFiles, headerToCheckAgainst);
}); });
// Find all top-level subfolders // Find all top-level subfolders
@@ -78,8 +79,8 @@ namespace SabreTools.Helper.Dats
List<string> subfiles = Directory.EnumerateFiles(item, "*", SearchOption.AllDirectories).ToList(); List<string> subfiles = Directory.EnumerateFiles(item, "*", SearchOption.AllDirectories).ToList();
Parallel.ForEach(subfiles, Globals.ParallelOptions, subitem => Parallel.ForEach(subfiles, Globals.ParallelOptions, subitem =>
{ {
PopulateFromDirCheckFile(subitem, basePath, omitFromScan, bare, archivesAsFiles, enableGzip, addBlanks, addDate, PopulateFromDirCheckFile(subitem, basePath, omitFromScan, bare, archivesAsFiles, enableGzip, skipFileType,
tempDir, copyFiles, headerToCheckAgainst); addBlanks, addDate, tempDir, copyFiles, headerToCheckAgainst);
}); });
}); });
@@ -135,8 +136,8 @@ namespace SabreTools.Helper.Dats
} }
else if (File.Exists(basePath)) else if (File.Exists(basePath))
{ {
PopulateFromDirCheckFile(basePath, Path.GetDirectoryName(Path.GetDirectoryName(basePath)), omitFromScan, bare, archivesAsFiles, enableGzip, addBlanks, addDate, PopulateFromDirCheckFile(basePath, Path.GetDirectoryName(Path.GetDirectoryName(basePath)), omitFromScan, bare, archivesAsFiles, enableGzip,
tempDir, copyFiles, headerToCheckAgainst); skipFileType, addBlanks, addDate, tempDir, copyFiles, headerToCheckAgainst);
} }
// Now that we're done, delete the temp folder (if it's not the default) // Now that we're done, delete the temp folder (if it's not the default)
@@ -158,13 +159,14 @@ namespace SabreTools.Helper.Dats
/// <param name="bare">True if the date should be omitted from the DAT, false otherwise</param> /// <param name="bare">True if the date should be omitted from the DAT, false otherwise</param>
/// <param name="archivesAsFiles">True if archives should be treated as files, false otherwise</param> /// <param name="archivesAsFiles">True if archives should be treated as files, false otherwise</param>
/// <param name="enableGzip">True if GZIP archives should be treated as files, false otherwise</param> /// <param name="enableGzip">True if GZIP archives should be treated as files, false otherwise</param>
/// <param name="skipFileType">Type of files that should be skipped</param>
/// <param name="addBlanks">True if blank items should be created for empty folders, false otherwise</param> /// <param name="addBlanks">True if blank items should be created for empty folders, false otherwise</param>
/// <param name="addDate">True if dates should be archived for all files, false otherwise</param> /// <param name="addDate">True if dates should be archived for all files, false otherwise</param>
/// <param name="tempDir">Name of the directory to create a temp folder in (blank is current directory)</param> /// <param name="tempDir">Name of the directory to create a temp folder in (blank is current directory)</param>
/// <param name="copyFiles">True if files should be copied to the temp directory before hashing, false otherwise</param> /// <param name="copyFiles">True if files should be copied to the temp directory before hashing, false otherwise</param>
/// <param name="headerToCheckAgainst">Populated string representing the name of the skipper to use, a blank string to use the first available checker, null otherwise</param> /// <param name="headerToCheckAgainst">Populated string representing the name of the skipper to use, a blank string to use the first available checker, null otherwise</param>
private void PopulateFromDirCheckFile(string item, string basePath, Hash omitFromScan, bool bare, bool archivesAsFiles, private void PopulateFromDirCheckFile(string item, string basePath, Hash omitFromScan, bool bare, bool archivesAsFiles,
bool enableGzip, bool addBlanks, bool addDate, string tempDir, bool copyFiles, string headerToCheckAgainst) bool enableGzip, SkipFileType skipFileType, bool addBlanks, bool addDate, string tempDir, bool copyFiles, string headerToCheckAgainst)
{ {
// Define the temporary directory // Define the temporary directory
string tempSubDir = Path.GetFullPath(Path.Combine(tempDir, Path.GetRandomFileName())) + Path.DirectorySeparatorChar; string tempSubDir = Path.GetFullPath(Path.Combine(tempDir, Path.GetRandomFileName())) + Path.DirectorySeparatorChar;
@@ -225,6 +227,13 @@ namespace SabreTools.Helper.Dats
} }
} }
// If the file should be skipped based on type, do so now
if ((extracted != null && skipFileType == SkipFileType.Archive)
|| (extracted == null && skipFileType == SkipFileType.File))
{
return;
}
// If the extracted list is null, just scan the item itself // If the extracted list is null, just scan the item itself
if (extracted == null || archivesAsFiles) if (extracted == null || archivesAsFiles)
{ {

View File

@@ -248,6 +248,12 @@ Options:
implies that the files will be in the TorrentGZ format as well, including implies that the files will be in the TorrentGZ format as well, including
naming convention. naming convention.
-ska, --skiparc Skip archive files
Skip any files that are treated like archives
-skf, --skipfile Skip non-archive files
Skip any files that are not treated like archives
-f=, --filename= Set the external name of the DAT -f=, --filename= Set the external name of the DAT
Set the base filename for the output DAT(s) [default is folder name plus date] Set the base filename for the output DAT(s) [default is folder name plus date]

View File

@@ -185,6 +185,16 @@ namespace SabreTools
"Read files from a Romba input", "Read files from a Romba input",
FeatureType.Flag, FeatureType.Flag,
null)); null));
datFromDir.AddFeature("skiparc", new Feature(
new List<string>() { "-ska", "--skiparc" },
"Skip any files that are treated like archives",
FeatureType.Flag,
null));
datFromDir.AddFeature("skipfile", new Feature(
new List<string>() { "-skf", "--skipfile" },
"Skip any files that are not treated like archives",
FeatureType.Flag,
null));
datFromDir.AddFeature("filename", new Feature( datFromDir.AddFeature("filename", new Feature(
new List<string>() { "-f", "--filename" }, new List<string>() { "-f", "--filename" },
"Set the external name of the DAT", "Set the external name of the DAT",

View File

@@ -45,6 +45,7 @@ namespace SabreTools
/// <param name="removeDateFromAutomaticName">True if the date should be omitted from the DAT, false otherwise</param> /// <param name="removeDateFromAutomaticName">True if the date should be omitted from the DAT, false otherwise</param>
/// <param name="parseArchivesAsFiles">True if archives should be treated as files, false otherwise</param> /// <param name="parseArchivesAsFiles">True if archives should be treated as files, false otherwise</param>
/// <param name="enableGzip">True if GZIP archives should be treated as files, false otherwise</param> /// <param name="enableGzip">True if GZIP archives should be treated as files, false otherwise</param>
/// <param name="skipFileType">Type of files that should be skipped on scan</param>
/// <param name="addBlankFilesForEmptyFolder">True if blank items should be created for empty folders, false otherwise</param> /// <param name="addBlankFilesForEmptyFolder">True if blank items should be created for empty folders, false otherwise</param>
/// <param name="addFileDates">True if dates should be archived for all files, false otherwise</param> /// <param name="addFileDates">True if dates should be archived for all files, false otherwise</param>
/// /* Output DAT info */ /// /* Output DAT info */
@@ -75,6 +76,7 @@ namespace SabreTools
bool removeDateFromAutomaticName, bool removeDateFromAutomaticName,
bool parseArchivesAsFiles, bool parseArchivesAsFiles,
bool enableGzip, bool enableGzip,
SkipFileType skipFileType,
bool addBlankFilesForEmptyFolder, bool addBlankFilesForEmptyFolder,
bool addFileDates, bool addFileDates,
@@ -133,7 +135,7 @@ namespace SabreTools
string basePath = Path.GetFullPath(path); string basePath = Path.GetFullPath(path);
bool success = datdata.PopulateFromDir(basePath, omitFromScan, removeDateFromAutomaticName, parseArchivesAsFiles, enableGzip, bool success = datdata.PopulateFromDir(basePath, omitFromScan, removeDateFromAutomaticName, parseArchivesAsFiles, enableGzip,
addBlankFilesForEmptyFolder, addFileDates, tempDir, copyFiles, headerToCheckAgainst); skipFileType, addBlankFilesForEmptyFolder, addFileDates, tempDir, copyFiles, headerToCheckAgainst);
// If it was a success, write the DAT out // If it was a success, write the DAT out
if (success) if (success)

View File

@@ -126,6 +126,7 @@ namespace SabreTools
Hash omitFromScan = Hash.SHA256 | Hash.SHA384 | Hash.SHA512; // Should be set to 0x0 later Hash omitFromScan = Hash.SHA256 | Hash.SHA384 | Hash.SHA512; // Should be set to 0x0 later
Hash stripHash = 0x0; Hash stripHash = 0x0;
OutputFormat outputFormat = OutputFormat.Folder; OutputFormat outputFormat = OutputFormat.Folder;
SkipFileType skipFileType = SkipFileType.None;
SplitType splitType = SplitType.None; SplitType splitType = SplitType.None;
StatDatFormat statDatFormat = 0x0; StatDatFormat statDatFormat = 0x0;
@@ -562,6 +563,14 @@ namespace SabreTools
case "--single": case "--single":
single = true; single = true;
break; break;
case "-ska":
case "--skiparc":
skipFileType = SkipFileType.Archive;
break;
case "-skf":
case "--skipfile":
skipFileType = SkipFileType.File;
break;
case "-t7z": case "-t7z":
case "--t7z": case "--t7z":
outputFormat = OutputFormat.Torrent7Zip; outputFormat = OutputFormat.Torrent7Zip;
@@ -1209,7 +1218,7 @@ namespace SabreTools
{ {
InitDatFromDir(inputs, filename, name, description, category, version, author, email, homepage, url, comment, InitDatFromDir(inputs, filename, name, description, category, version, author, email, homepage, url, comment,
forcepack, excludeOf, datFormat, romba, superdat, omitFromScan, removeDateFromAutomaticName, parseArchivesAsFiles, forcepack, excludeOf, datFormat, romba, superdat, omitFromScan, removeDateFromAutomaticName, parseArchivesAsFiles,
enableGzip, addBlankFilesForEmptyFolder, addFileDates, tempDir, outDir, copyFiles, header); enableGzip, skipFileType, addBlankFilesForEmptyFolder, addFileDates, tempDir, outDir, copyFiles, header);
} }
// If we're in header extract and remove mode // If we're in header extract and remove mode