[RombaSharp, Utilities] Implement DatStats for RombaSharp

This commit is contained in:
Matt Nadareski
2018-01-27 16:58:30 -08:00
parent 4db95a6651
commit 7a23913828
2 changed files with 68 additions and 9 deletions

View File

@@ -64,14 +64,8 @@ namespace RombaSharp
{
// TODO: All instances of Hash.DeepHashes should be made into 0x0 eventually
df.PopulateFromDir(dir, Hash.DeepHashes, false, false, SkipFileType.None, false, false, _tmpdir, false, null, true);
// If we're looking for only needed, consider the zipfiles themselves too
if (onlyNeeded)
{
// TODO: All instances of Hash.DeepHashes should be made into 0x0 eventually
df.PopulateFromDir(dir, Hash.DeepHashes, false, true, SkipFileType.None, false, false, _tmpdir, false, null, true);
}
}
// Create an empty Dat for files that need to be rebuilt
DatFile need = new DatFile();
@@ -266,10 +260,17 @@ namespace RombaSharp
/// Wrap printing dat stats
/// </summary>
/// <param name="inputs">List of input DATs to get stats from</param>
/// TODO: Verify implementation
private static void InitDatStats(List<string> inputs)
{
Globals.Logger.Error("This feature is not yet implemented: datstats");
// If we have no inputs listed, we want to use datroot
if (inputs == null || inputs.Count == 0)
{
inputs = new List<string>();
inputs.Add(Path.GetFullPath(_dats));
}
// Now output the stats for all inputs
DatFile.OutputStats(inputs, "rombasharp-datstats", null /* outDir */, true /* single */, true /* baddumpCol */, true /* nodumpCol */, StatReportFormat.Textfile);
}
/// <summary>

View File

@@ -1426,6 +1426,29 @@ namespace SabreTools.Library.Tools
return infiles;
}
/// <summary>
/// Retrieve a list of directories from a directory recursively in proper order
/// </summary>
/// <param name="directory">Directory to parse</param>
/// <param name="infiles">List representing existing files</param>
/// <returns>List with all new files</returns>
public static List<string> RetrieveDirectories(string directory, List<string> infiles)
{
// Take care of the files in the top directory
List<string> toadd = Directory.EnumerateDirectories(directory, "*", SearchOption.TopDirectoryOnly).ToList();
toadd.Sort(new NaturalComparer());
infiles.AddRange(toadd);
// Then recurse through and add from the directories
foreach (string dir in toadd)
{
infiles = RetrieveDirectories(dir, infiles);
}
// Return the new list
return infiles;
}
#endregion
#region File Manipulation
@@ -1598,6 +1621,41 @@ namespace SabreTools.Library.Tools
return outputs;
}
/// <summary>
/// Retrieve a list of just directories from inputs
/// </summary>
/// <param name="inputs">List of strings representing directories and files</param>
/// <param name="appendparent">True if the parent name should be appended after the special character "¬", false otherwise (default)</param>
/// <returns>List of strings representing just directories from the inputs</returns>
public static List<string> GetOnlyDirectoriesFromInputs(List<string> inputs, bool appendparent = false)
{
List<string> outputs = new List<string>();
foreach (string input in inputs)
{
if (Directory.Exists(input))
{
List<string> directories = RetrieveDirectories(input, new List<string>());
foreach (string dir in directories)
{
try
{
outputs.Add(Path.GetFullPath(dir) + (appendparent ? "¬" + Path.GetFullPath(input) : ""));
}
catch (PathTooLongException)
{
Globals.Logger.Warning("The path for '{0}' was too long", dir);
}
catch (Exception ex)
{
Globals.Logger.Error(ex.ToString());
}
}
}
}
return outputs;
}
/// <summary>
/// Get the XmlTextReader associated with a file, if possible
/// </summary>