From 7a23913828e7337b74b285bd4455ebdc792d5f92 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Sat, 27 Jan 2018 16:58:30 -0800 Subject: [PATCH] [RombaSharp, Utilities] Implement DatStats for RombaSharp --- RombaSharp/RombaSharp.Inits.cs | 19 ++++----- SabreTools.Library/Tools/Utilities.cs | 58 +++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 9 deletions(-) diff --git a/RombaSharp/RombaSharp.Inits.cs b/RombaSharp/RombaSharp.Inits.cs index 7f78256d..6a97b46c 100644 --- a/RombaSharp/RombaSharp.Inits.cs +++ b/RombaSharp/RombaSharp.Inits.cs @@ -64,13 +64,7 @@ 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); - } + 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 @@ -266,10 +260,17 @@ namespace RombaSharp /// Wrap printing dat stats /// /// List of input DATs to get stats from - /// TODO: Verify implementation private static void InitDatStats(List 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(); + 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); } /// diff --git a/SabreTools.Library/Tools/Utilities.cs b/SabreTools.Library/Tools/Utilities.cs index d8e70ecb..7def3d6b 100644 --- a/SabreTools.Library/Tools/Utilities.cs +++ b/SabreTools.Library/Tools/Utilities.cs @@ -1426,6 +1426,29 @@ namespace SabreTools.Library.Tools return infiles; } + /// + /// Retrieve a list of directories from a directory recursively in proper order + /// + /// Directory to parse + /// List representing existing files + /// List with all new files + public static List RetrieveDirectories(string directory, List infiles) + { + // Take care of the files in the top directory + List 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; } + /// + /// Retrieve a list of just directories from inputs + /// + /// List of strings representing directories and files + /// True if the parent name should be appended after the special character "¬", false otherwise (default) + /// List of strings representing just directories from the inputs + public static List GetOnlyDirectoriesFromInputs(List inputs, bool appendparent = false) + { + List outputs = new List(); + foreach (string input in inputs) + { + if (Directory.Exists(input)) + { + List directories = RetrieveDirectories(input, new List()); + 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; + } + /// /// Get the XmlTextReader associated with a file, if possible ///