using System.Collections.Generic; using System.IO; using System.Linq; using SabreTools.Library.DatFiles; using SabreTools.Library.FileTypes; using SabreTools.Library.Help; using SabreTools.Library.Tools; namespace RombaSharp.Features { internal class Build : BaseFeature { public const string Value = "Build"; public Build() { Name = Value; Flags = new List() { "build" }; Description = "For each specified DAT file it creates the torrentzip files."; _featureType = FeatureType.Flag; LongDescription = @"For each specified DAT file it creates the torrentzip files in the specified output dir. The files will be placed in the specified location using a folder structure according to the original DAT master directory tree structure."; Features = new Dictionary(); AddFeature(OutStringInput); AddFeature(FixdatOnlyFlag); AddFeature(CopyFlag); AddFeature(WorkersInt32Input); AddFeature(SubworkersInt32Input); } public override void ProcessFeatures(Dictionary features) { base.ProcessFeatures(features); // Get feature flags bool copy = GetBoolean(features, CopyValue); string outdat = GetString(features, OutStringValue); // Verify the filenames Dictionary foundDats = GetValidDats(Inputs); // Ensure the output directory is set if (string.IsNullOrWhiteSpace(outdat)) outdat = "out"; // Now that we have the dictionary, we can loop through and output to a new folder for each foreach (string key in foundDats.Keys) { // Get the DAT file associated with the key DatFile datFile = DatFile.CreateAndParse(Path.Combine(_dats, foundDats[key])); // Create the new output directory if it doesn't exist string outputFolder = Path.Combine(outdat, Path.GetFileNameWithoutExtension(foundDats[key])); DirectoryExtensions.Ensure(outputFolder, create: true); // Get all online depots List onlineDepots = _depots.Where(d => d.Value.Item2).Select(d => d.Key).ToList(); // Now scan all of those depots and rebuild datFile.RebuildDepot(onlineDepots, outputFolder, false /*date*/, false /*delete*/, false /*inverse*/, (copy ? OutputFormat.TorrentGzipRomba : OutputFormat.TorrentZip), false /*updateDat*/, null /*headerToCheckAgainst*/); } } } }