using System.Collections.Generic; using System.IO; using SabreTools.Library.Data; using SabreTools.Library.DatFiles; using SabreTools.Library.Filtering; using SabreTools.Library.Help; using SabreTools.Library.IO; namespace RombaSharp.Features { internal class Diffdat : BaseFeature { public const string Value = "Diffdat"; public Diffdat() { Name = Value; Flags = new List() { "diffdat" }; Description = "Creates a DAT file with those entries that are in -new DAT."; _featureType = FeatureType.Flag; LongDescription = @"Creates a DAT file with those entries that are in -new DAT file and not in -old DAT file. Ignores those entries in -old that are not in -new."; this.Features = new Dictionary(); AddFeature(OutStringInput); AddFeature(OldStringInput); AddFeature(NewStringInput); AddFeature(NameStringInput); AddFeature(DescriptionStringInput); } public override void ProcessFeatures(Dictionary features) { base.ProcessFeatures(features); // Get feature flags string name = GetString(features, NameStringValue); string description = GetString(features, DescriptionStringValue); string newdat = GetString(features, NewStringValue); string olddat = GetString(features, OldStringValue); string outdat = GetString(features, OutStringValue); // Ensure the output directory DirectoryExtensions.Ensure(outdat, create: true); // Check that all required files exist if (!File.Exists(olddat)) { Globals.Logger.Error($"File '{olddat}' does not exist!"); return; } if (!File.Exists(newdat)) { Globals.Logger.Error($"File '{newdat}' does not exist!"); return; } // Create the encapsulating datfile DatFile datfile = DatFile.Create(); datfile.Header.Name = name; datfile.Header.Description = description; // Create the inputs List dats = new List { newdat }; List basedats = new List { olddat }; // Now run the diff on the inputs datfile.PopulateUserData(basedats, new Filter()); datfile.DiffAgainst(dats, outdat, false, new Filter(), false); } } }