using dinfo.core.Utils.Globals; using YamlDotNet.Serialization; using YamlDotNet.Serialization.NamingConventions; namespace dinfo.core.Handlers.ConfigTools; public class YamlConfigStructure { [YamlMember(Alias = "recursive")] public bool RecursiveConfig { get; set; } = false; [YamlMember(Alias = "verbose")] public bool VerboseConfig { get; set; } = false; [YamlMember(Alias = "ignore_gitignore")] public bool IgnoreGitignoreConfig { get; set; } = false; [YamlMember(Alias = "no_tui")] public bool NoTuiConfig { get; set; } = false; [YamlMember(Alias = "ignored_files_or_directory")] public IgnoreFilesOrDirectory IgnoredFilesOrDirectory { get; set; } = new(); } public class IgnoreFilesOrDirectory { [YamlMember(Alias = "ignored_files")] public List IgnoredFilesConfig { get; set; } = new(); [YamlMember(Alias = "ignored_directory")] public List IgnoredDirectoryConfig { get; set; } = new(); } public static class ConfigHelper { public static void FindConfigFile(string targetDirectory) { while (!string.IsNullOrEmpty(targetDirectory)) { if ((Directory.Exists(Path.Combine(targetDirectory, ".git"))) || File.Exists(Path.Combine(targetDirectory, "dinfo.yaml"))) { GlobalsUtils.ConfigFilePath = Path.Combine(targetDirectory, "dinfo.yaml"); return; } var parentDir = Directory.GetParent(targetDirectory); targetDirectory = parentDir != null ? parentDir.FullName : string.Empty; } GlobalsUtils.ConfigFilePath = string.Empty; } public static void DeserializeConfigFile(string configFilePath) { var deserializer = new DeserializerBuilder() .WithNamingConvention(UnderscoredNamingConvention.Instance) .Build(); var configContent = File.ReadAllText(configFilePath); var config = deserializer.Deserialize(configContent); GlobalsUtils.Recursive = config.RecursiveConfig; GlobalsUtils.Verbose = config.VerboseConfig; GlobalsUtils.IgnoreGitignore = config.IgnoreGitignoreConfig; GlobalsUtils.NoTui = config.NoTuiConfig; GlobalsUtils.IgnoredDirectories = config.IgnoredFilesOrDirectory.IgnoredDirectoryConfig; GlobalsUtils.IgnoredFiles = config.IgnoredFilesOrDirectory.IgnoredFilesConfig; } }